Ответ
В Kubernetes конфигурация маршрутизации внешнего трафика в сервисы приложения определяется ресурсом Ingress и реализуется Ingress-контроллером (например, Nginx Ingress Controller, Traefik, HAProxy).
1. Ingress-ресурс: Это декларативный YAML-манифест, где задаются правила маршрутизации на уровне HTTP/HTTPS.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # Пример аннотации для Nginx
spec:
ingressClassName: nginx # Указание на используемый Ingress-контроллер
rules:
- host: app.example.com # Домен
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: backend-service # Имя целевого Kubernetes Service
port:
number: 8080
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
tls: # Конфигурация TLS/SSL
- hosts:
- app.example.com
secretName: app-tls-secret # Секрет с сертификатом и ключом
2. Ingress-контроллер:
Это отдельный под (часто в namespace ingress-nginx), который:
- Следит за созданием/изменением Ingress-ресурсов в кластере.
- На их основе генерирует и применяет актуальную конфигурацию (например, для Nginx — файл
nginx.conf). - Сам контроллер обычно exposed как Service типа
LoadBalancerилиNodePort.
3. Альтернативы Ingress (для других сценариев):
- Service типа LoadBalancer: Прямое создание облачного балансировщика нагрузки (AWS ELB, GCP CLB). Подходит для TCP/UDP или простых случаев.
- Service Mesh (Istio, Linkerd): Управление трафиком через ресурсы
VirtualServiceиGateway, что предоставляет более тонкий контроль (canary-развёртывания, A/B-тестирование).
Проверка:
# Просмотреть созданные Ingress-ресурсы
kubectl get ingress
# Детализировать описание конкретного Ingress
kubectl describe ingress my-app-ingress