Ответ
Ingress — это объект Kubernetes, который я настраиваю для управления внешним HTTP/HTTPS-трафиком, поступающим в кластер. Он действует как интеллектуальный маршрутизатор (L7) поверх Service-объектов.
Основные задачи, которые я решаю с помощью Ingress:
- Централизованное управление доступом: Один Ingress может маршрутизировать трафик к десяткам внутренних сервисов, избавляя от необходимости в отдельных LoadBalancer-сервисах для каждого.
- Маршрутизация на основе хоста и пути: Например, направлять
app.example.com/apiна backend-service, аapp.example.com/static— на nginx, раздающий статику. - Termination TLS/SSL: Централизованное управление SSL-сертификатами через секреты Kubernetes, часто интегрируемое с cert-manager для автоматического получения сертификатов от Let's Encrypt.
- Реализация правил доступа и перезаписей: Настройка CORS, редиректов, rewrite-правил и базовой аутентификации.
Пример манифеста Ingress с TLS и двумя правилами:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prod-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- api.myapp.com
secretName: tls-secret # Секрет с сертификатом и ключом
rules:
- host: api.myapp.com
http:
paths:
- path: /v1/users
pathType: Prefix
backend:
service:
name: user-service-v1
port:
number: 8080
- path: /v2/users
pathType: Prefix
backend:
service:
name: user-service-v2
port:
number: 8080
Важно: Сам по себе Ingress-ресурс — это набор правил. Для их обработки необходим Ingress Controller (например, ingress-nginx, Traefik, AWS ALB Controller), который я разворачиваю в кластере. Контроллер отслеживает создание Ingress-объектов и настраивает реальный балансировщик нагрузки.