middle
Что такое Ingress и Ingress Controller?
Ingress — объект Kubernetes, который управляет внешним HTTP/HTTPS-доступом к сервисам внутри кластера. Позволяет определять правила маршрутизации на основе хоста и пути запроса.
Зачем нужен Ingress, если есть Service LoadBalancer
- Service LoadBalancer создаёт отдельный балансировщик для каждого сервиса — это дорого
- Ingress позволяет использовать один балансировщик для множества сервисов, маршрутизируя трафик по правилам
- Ingress поддерживает SSL/TLS-терминацию, перенаправление, URL rewriting
Пример манифеста Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts:
- myapp.example.com
secretName: myapp-tls-secret
rules:
- host: myapp.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
Ingress Controller
Сам объект Ingress — это просто набор правил. Для их реализации необходим Ingress Controller — отдельный компонент, который считывает правила Ingress и настраивает реальный прокси-сервер.
Популярные Ingress Controller’ы:
- NGINX Ingress Controller — самый популярный, на базе NGINX
- Traefik — лёгкий, с автоматическим обнаружением сервисов
- HAProxy Ingress — на базе HAProxy
- AWS ALB Ingress Controller — для AWS Application Load Balancer
- Istio Ingress Gateway — часть service mesh Istio
Ingress Controller необходимо устанавливать отдельно — он не входит в стандартную поставку Kubernetes.
На собеседовании: ключевое — объяснить, зачем Ingress нужен поверх Service LoadBalancer (экономия ресурсов, единая точка входа, SSL-терминация). Частая ошибка — забыть, что Ingress без Ingress Controller не работает.