Гайды
Ingress и контроллеры в Kubernetes
L7-маршрутизация, ingress-nginx и Traefik, TLS и cert-manager, pathType и безопасность.
~9 мин чтения
Ingress и контроллеры в Kubernetes
Ingress — объект k8s, описывающий L7 маршрутизацию HTTP(S) к Service по хосту и пути. Реализация — Ingress Controller (nginx, traefik, HAProxy, cloud LB). Сервисы и поды — Pods, Deployments и Services; TLS и ACME — SSL/TLS и Let's Encrypt и Let's Encrypt.
1. Зачем Ingress
Много микросервисов за одним IP/балансировщиком, маршрутизация по Host / path, единая точка для TLS termination.
2. Пример Ingress (API v1)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api
port:
number: 80
ingressClassName связывает с установленным контроллером.
3. Контроллеры
| Контроллер | Особенности |
|---|---|
| ingress-nginx | Популярен, аннотации, community |
| Traefik | CRD IngressRoute, Let's Encrypt интеграция |
| Gateway API (HTTPRoute) | Эволюция модели; новые кластеры смотрят сюда |
Установка nginx-ingress часто через Helm — гайд по Helm.
4. TLS
Секрет типа kubernetes.io/tls с tls.crt/tls.key, секция spec.tls в Ingress. Автообновление — cert-manager (ACME).
5. pathType
Exact, Prefix, ImplementationSpecific — влияет на матчинг; при миграции с v1beta проверяйте поведение.
6. defaultBackend и аннотации
defaultBackend ловит 404 для неизвестных хостов. Аннотации nginx (client-max-body-size, proxy-read-timeout) задавайте осознанно per Ingress — глобальные дефолты контроллера влияют на все маршруты.
7. Canary и Gateway API
Для прогрессивного выката часто используют два Ingress с весами на внешнем LB или Flagger / Argo Rollouts. Gateway API (HTTPRoute) даёт более выразительную маршрутизацию — планируйте миграцию с классического Ingress.
Идея HTTPRoute (упрощённо; нужны GatewayClass, Gateway в вашем кластере):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api
spec:
parentRefs:
- name: public-gateway
hostnames:
- "api.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: api
port: 80
Плюсы: веса, header match, reference grant между namespace; минусы — ещё не везде дефолт, читайте матрицу поддержки вашего провайдера CNI/LB. На старых кластерах CRD могут быть v1beta1 — сверьтесь с kubectl api-resources.
8. Чек-лист
- Ограничение размера тела/таймауты на уровне аннотаций контроллера.
- Не публиковать админки без IP allowlist или SSO.
- Мониторинг 5xx и latency на ingress — см. Prometheus Operator.
-
ingressClassNameне пустой, если в кластере несколько контроллеров.
Дальше: Helm · тег Ingress