Какая сущность в Kubernetes занимается перераспределением внешних HTTP/HTTPS запросов?

«Какая сущность в Kubernetes занимается перераспределением внешних HTTP/HTTPS запросов?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

За перераспределение внешнего HTTP/HTTPS трафика на сервисы внутри кластера отвечает ресурс Ingress. Важно понимать, что сам по себе Ingress — это лишь набор правил маршрутизации. Для их реализации необходим Ingress Controller — это под, который работает в кластере и отслеживает объекты Ingress, перенастраивая реальный балансировщик нагрузки (например, Nginx, Traefik или облачный Load Balancer).

Как это работает:

  1. Пользователь создает манифест Ingress с правилами.
  2. Ingress Controller (например, ingress-nginx) наблюдает за изменениями в API Kubernetes.
  3. Контроллер читает правила из Ingress-ресурса и генерирует конфигурацию для своего балансировщика (например, nginx.conf).
  4. Балансировщик начинает направлять внешний трафик на соответствующие Kubernetes Services по правилам.

Пример Ingress для маршрутизации по хосту и пути:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: main-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /  # Аннотация специфична для контроллера
spec:
  ingressClassName: nginx  # Указание класса контроллера (Helm 3+)
  rules:
  - host: app.mycompany.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: backend-api-service
            port:
              number: 8080
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend-web-service
            port:
              number: 80
  tls:  # Раздел для TLS-терминации
  - hosts:
      - app.mycompany.com
    secretName: app-tls-secret  # Secret с сертификатом и ключом

Альтернативы и смежные концепции:

  • Service (тип LoadBalancer): Прямое создание облачного балансировщика на каждый сервис. Проще, но дороже и менее гибко для HTTP-маршрутизации.
  • Service Mesh (Istio, Linkerd): Предоставляют более продвинутые возможности (Ingress Gateway, Gateway API), включая canary-деплои, зеркалирование трафика, сложную политику безопасности на уровне L7. Ingress часто становится точкой входа в Service Mesh.

С точки зрения DevOps: Выбор и настройка Ingress Controller (Nginx vs. Traefik vs. ALB Controller) — ключевая инфраструктурная задача, влияющая на безопасность, производительность и стоимость облачных ресурсов.