Ingress — ресурс Kubernetes, описывающий правила маршрутизации внешнего HTTP/HTTPS-трафика к внутренним сервисам кластера. Ingress сам по себе — только декларация правил; для работы требуется Ingress Controller — отдельный pod, реализующий эти правила (обычно на базе Nginx или Traefik).
Как работает Ingress
Пример Ingress-ресурса:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
ingressClassName: nginx
tls:
- hosts:
- app.example.com
secretName: app-tls
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
Ingress Controllers
- Nginx Ingress Controller (ingress-nginx): самый распространённый. Основан на Nginx. Поддерживается Kubernetes SIG.
- Traefik: хорошо интегрируется с CRD и Let's Encrypt.
- HAProxy Ingress: высокая производительность для L4/L7.
- AWS ALB Ingress Controller: для EKS — создаёт Application Load Balancer.
- Istio Gateway: часть service mesh, для сложных сценариев трафика.
История
Ingress API появился в Kubernetes 1.1 (2015) как beta-ресурс. Долго оставался beta — API стабилизирован только в Kubernetes 1.19 (2020). До Ingress использовали NodePort и LoadBalancer Service для внешнего доступа. Kubernetes 1.22 (2021) добавил IngressClass — возможность иметь несколько Ingress Controller в кластере. Kubernetes Gateway API (2023) — следующее поколение, более гибкое: GatewayClass, Gateway, HTTPRoute. Traefik v3 нативно поддерживает Gateway API.
На что обращать внимание
Ingress Controller должен быть установлен до создания Ingress-ресурсов — иначе они будут ignored. Cert-manager автоматически выпускает Let's Encrypt сертификаты для TLS-ресурсов через аннотацию cert-manager.io/cluster-issuer. На VPS с одной нодой Kubernetes (k3s, Minikube) Nginx Ingress Controller + cert-manager — стандартный стек для продакшн-сайтов. Не путай Kubernetes Ingress с сетевым термином «входящий трафик» — это разные контексты.
История Kubernetes Ingress
Ingress API появился в Kubernetes 1.1 (2014) как beta-ресурс. Долгое время оставался в beta — стабильной стала версия Ingress v1 в Kubernetes 1.19 (2020). Параллельно развивались Ingress Controllers: Nginx Ingress Controller (2016, NGINX Inc.), Traefik Ingress (2016), HAProxy Ingress (2017), AWS ALB Ingress (2018). В 2021 году Kubernetes SIG-Network начал разработку Gateway API — более гибкий преемник Ingress с поддержкой TCP/UDP и более богатой моделью разрешений.
Пример ресурса Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts:
- example.com
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
На что обращать внимание
Ingress работает только при наличии установленного Ingress Controller — без него ресурс Ingress игнорируется. Для VPS с одной нодой k3s: Nginx Ingress Controller + cert-manager — стандартный production-стек. Аннотации в Ingress специфичны для каждого Controller — аннотации Nginx не работают с Traefik. Kubernetes Gateway API (gatewayapi.sigs.k8s.io) — рекомендуемая замена Ingress для новых кластеров. Не путай Kubernetes Ingress с сетевым понятием «входящий трафик» — разные контексты.