Ответ
Ingress-контроллер — это специализированный под (обычно развернутый как DaemonSet или Deployment), который реализует правила, описанные в ресурсах Ingress. Он служит единой точкой входа (entry point) для внешнего HTTP/HTTPS трафика в кластер, выполняя функции L7-балансировщика нагрузки, SSL-терминатора и маршрутизатора.
Что он делает на практике:
- Маршрутизация на основе хоста и пути: Направляет запросы
api.example.comк одному набору сервисов, аapp.example.com— к другому. - Termination SSL/TLS: Принимает HTTPS-трафик, расшифровывает его и передает дальше по кластеру как HTTP, централизуя управление сертификатами (часто через Cert-Manager).
- Балансировка нагрузки: Распределяет трафик между подами сервиса, на который указывает правило.
Пример манифеста Ingress для Nginx Ingress Controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: main-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- myapp.example.com
secretName: myapp-tls-secret # Секрет с сертификатом
rules:
- host: myapp.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: backend-api-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
Популярные реализации: NGINX Ingress Controller, Traefik, HAProxy Ingress, AWS Load Balancer Controller (для ALB). Ingress-контроллер — это абстракция, которая позволяет управлять внешним доступом декларативно, средствами Kubernetes, без создания множества LoadBalancer-сервисов (что дорого и неудобно).