Sobes.tech
Middle

Как да осигурим достъп на потребителите до приложение, работещо в Kubernetes?

sobes.tech AI

Отговор от AI

Има няколко основни начина:

  1. Тип услуга Kubernetes: LoadBalancer. Облачният доставчик създава външен балансировач на натоварването, който насочва трафика към вашите подове.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Тук се посочва типът LoadBalancer
    
  2. Тип услуга Kubernetes: NodePort. Всеки възел на клъстера отваря статичен порт, който пренасочва трафика към услугата. Достъпът до приложението става чрез IP адреса на всеки възел и този статичен порт.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: NodePort # Тук се посочва типът NodePort
    

    Това е по-малко мащабируемо и често не се препоръчва за продукционна среда.

  3. Ingress. Обект на Kubernetes, който управлява външния достъп до услугите в клъстера. Изисква наличието на Ingress контролер (например Nginx Ingress, Traefik, HAProxy). Ingress позволява настройка на маршрутизация въз основа на домейни и пътища.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-app-ingress
    spec:
      rules:
        - host: myapp.mydomain.com # Домейн име
          http:
            paths:
              - path: / # Път
                pathType: Prefix
                backend:
                  service:
                    name: my-app-service # Име на услугата
                    port:
                      number: 80 # Порт на услугата
    
  4. Gateway API (по-съвременен подход). Еволюция на Ingress, предоставя по-изразително и разширяемо API за управление на достъпа. Включва ресурси GatewayClass, Gateway, HTTPRoute (и други типове маршрути).

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: my-app-route
    spec:
      parentRefs:
        - name: my-gateway # Връзка към ресурс Gateway
      hostnames:
        - "myapp.mydomain.com"
      rules:
        - matches:
            - path:
                type: Prefix
                value: /
          backendRefs:
            - name: my-app-service # Име на услугата
              port: 80 # Порт на услугата
    

Изборът на метод зависи от изискванията:

  • Мащабируемост
  • Сложност на маршрутизацията
  • Сигурност (SSL/TLS терминиране)
  • Използваната облачна платформа
  • Необходимост от централизирано управление на достъпа

За повечето продукционни сценарии се използва LoadBalancer за предоставяне на входна точка (често за Ingress контролер) или директно, и Ingress (или Gateway API) за гъвкава маршрутизация и управление на достъпа до различни услуги в клъстера.