Ответ
За перераспределение внешнего HTTP/HTTPS трафика на сервисы внутри кластера отвечает ресурс Ingress. Важно понимать, что сам по себе Ingress — это лишь набор правил маршрутизации. Для их реализации необходим Ingress Controller — это под, который работает в кластере и отслеживает объекты Ingress, перенастраивая реальный балансировщик нагрузки (например, Nginx, Traefik или облачный Load Balancer).
Как это работает:
- Пользователь создает манифест Ingress с правилами.
- Ingress Controller (например, ingress-nginx) наблюдает за изменениями в API Kubernetes.
- Контроллер читает правила из Ingress-ресурса и генерирует конфигурацию для своего балансировщика (например,
nginx.conf). - Балансировщик начинает направлять внешний трафик на соответствующие 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) — ключевая инфраструктурная задача, влияющая на безопасность, производительность и стоимость облачных ресурсов.