Sobes.tech
Middle
104
questionbank

Как обеспечить доступ пользователей к приложению, работающему в Kubernetes?

Ответ от нейросети

sobes.tech AI

Существует несколько основных способов:

  1. Kubernetes Service Type: 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 Service Type: 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) для гибкой маршрутизации и управления доступом к различным сервисам в кластере.