Ingress: маршрутизация HTTP

Когда сервисов много, не публиковать же каждый отдельным балансировщиком — Ingress собирает HTTP-трафик в одну точку.

Ingress — объект, который описывает правила маршрутизации внешнего HTTP/HTTPS-трафика на сервисы кластера по хостам и путям.

Тип LoadBalancer даёт по внешнему IP на каждый сервис — для десятка сервисов это дорого и неудобно. Ingress работает как «умный роутер» (reverse proxy): один внешний вход, а внутри правила «такой хост и путь → такой сервис».

Нужен Ingress-контроллер

Важный нюанс: сам объект Ingress — лишь набор правил. Чтобы они заработали, в кластере должен крутиться Ingress-контроллер (например, ingress-nginx) — он читает эти правила и реально направляет трафик. Без контроллера Ingress ничего не делает. В minikube его включают аддоном:

minikube addons enable ingress

Маршрутизация по путям

Отправим /api на бэкенд, всё остальное — на фронтенд:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
spec:
  rules:
    - host: myapp.local
      http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: backend
                port:
                  number: 8080
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend
                port:
                  number: 80

Теперь запрос http://myapp.local/api/users уйдёт в сервис backend, а http://myapp.local/ — в frontend. Всё через один внешний IP контроллера.

Маршрутизация по хостам

Можно разводить трафик и по доменам: shop.example.com → один сервис, blog.example.com → другой. Один Ingress-контроллер обслуживает много приложений. Здесь же обычно настраивают TLS (HTTPS) — сертификат хранится в Secret и подключается к Ingress.

УровеньОбъектЧто делает
L4 (TCP/порт)Service (LoadBalancer/NodePort)публикует один сервис
L7 (HTTP)Ingress + контроллерроутинг по хостам и путям для многих сервисов

Итог

  • Ingress — единая HTTP-точка входа с маршрутизацией по хостам и путям.
  • Правила Ingress исполняет Ingress-контроллер; без него они бездействуют.
  • Один контроллер заменяет десятки отдельных LoadBalancer-ов и умеет TLS.
Проверьте себя
1. Что описывает объект Ingress?
AПравила HTTP-маршрутизации на сервисы по хостам и путям
BЧисло реплик пода
CХранилище данных
DПеременные окружения
2. Почему один объект Ingress без дополнительного компонента не работает?
AНужен отдельный namespace
BНужен Ingress-контроллер, который исполняет правила
CНужен LoadBalancer на каждый путь
DIngress всегда работает сам
3. В чём преимущество Ingress перед отдельными LoadBalancer на каждый сервис?
AОн быстрее собирает образы
BОдин вход обслуживает много сервисов с роутингом по путям и хостам
CОн не требует меток
DОн работает только локально
Поддержать проект