Ingress - это объект API, который управляет внешним доступом к сервисам в кластере, обычно по протоколам HTTP и HTTPS. Если Service работает на уровне L4 (IP и порты), то Ingress работает на уровне L7 (прикладной уровень), позволяя маршрутизировать трафик на основе доменных имен и путей URL.
Как Ingress устроен внутри
Важно понимать: сам по себе ресурс Ingress — это просто набор правил (конфигурация). Чтобы эти правила заработали, в кластере должен быть запущен Ingress-контроллер.
Схема работы:
- Клиент отправляет запрос на публичный IP (обычно это LoadBalancer, за которым стоит контроллер).
- Ingress-controller (например, Nginx) принимает запрос.
- Он анализирует Host (например,
company.com) и Path (/service1). - Контроллер перенаправляет трафик напрямую в Pods, минуя стандартную цепочку
kube-proxy, что снижает задержки.
Пример спецификации Ingress
Ниже представлен манифест, который распределяет трафик между двумя разными сервисами в зависимости от URL.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: main-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my.company.com # Правило для поддомена
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: service-first # Отправляем на первый сервис
port:
number: 80
- host: skillbox.com # Правило для другого домена
http:
paths:
- path: /service1
pathType: Prefix
backend:
service:
name: service-second # Отправляем на второй сервис
port:
number: 80
Популярные Ingress-контроллеры
Контроллер — это фактически высокопроизводительный прокси-сервер, запущенный внутри пода, который динамически обновляет свои настройки при добавлении новых Ingress-ресурсов.
| Контроллер | Особенности |
| Ingress NGINX (Kubernetes) | Официальный контроллер от сообщества K8s. Самый популярный и стабильный. |
| NGINX Plus (от F5) | Коммерческая версия от создателей Nginx с расширенной поддержкой. |
| Kong | Построен на базе Nginx, ориентирован на управление API и плагины. |
| Traefik | Написан на Go, отлично подходит для динамических сред, поддерживает автоконфигурацию. |
| HAProxy | Известен своей экстремальной производительностью и гибкостью балансировки. |
| Istio Ingress Gateway | Часть Service Mesh, используется для сложного управления трафиком. |
Почему нельзя просто использовать LoadBalancer?
- Экономия: Один облачный
LoadBalancerстоит денег. С Ingress вам нужен только один балансировщик, чтобы обслуживать десятки разных доменов и сервисов. - Гибкость: Ingress умеет терминировать SSL-сертификаты (HTTPS), делать перенаправления (redirects) и ограничивать количество запросов (rate limiting).
- Централизация: Все правила публикации ваших приложений собраны в одном месте, а не разбросаны по разным сервисам.
Итог: ИспользуйтеServiceтипаClusterIPдля внутренних нужд, аIngress- как единую "входную дверь" для всех внешних HTTP-запросов в ваш кластер.