Найти тему
DevOps step by step

Ingress

Для описания того, каким образом необходимо обрабатывать клиентский трафик, например запросы веб приложения в браузере, используется сущность Ingress (ингресс).

-2

Ingress — это объект Kubernetes, в котором описываются правила маршрутизации клиентского трафика.

Как мы с вами знаем, что объекты Kubernetes не работают, если нет соответствующего контроллера. Ingress относится к тому типу объектов, для которых нет встроенных контроллеров. Более того, в рамках кластера Kubernetes может жить несколько ингресс контроллеров.

Ингресс контроллер всегда связан с каким-то реальным балансировщиком, который принимает клиентский трафик. Это может быть nginx, haproxy, envoy или какой-то api gateway, типа ambassador-а. И задача контроллера проста: он читает изменения объектов типа Ingress, и применяет эти правила к конкретной конфигурации балансера. Т.е. чаще всего работа заключается в том, чтобы изменить конфиги балансировщика и отправить сигнал, чтобы он их перечитал.

Иногда правда, ингресс контроллером называют балансировщик и контроллер, который в связке с ним работает. Это также является общепринятым упрощением в терминологии.

-3

Давайте посмотрим простейшее описание объекта Ingress:

Как и любой объект он содержит атрибуты apiVersion, kind, metadata, spec.

В спецификации описаны правила маршрутизации. В данном случае мы все внешние запросы на URL /testpath проксируем на сервис test по порту 80.

Ингрессы не умеют работать с протоколами отличными от HTTP или HTTPS (например, WebSocket). Для работы с этими протоколами предполагается использование сервисов типа LoadBalancer и NodePort.

Как и у любого объекта Kubernetes, у него есть ряд общих для всех полей, это apiVersion, kind, metadata, spec.

В метаданных есть аннотации. Объекты типа Ingress могут обрабатываться несколькими ингресс-контроллерами. Данная аннотация сообщает, что этот конкретный ингресс должен обрабатываться nginx ингресс контроллером.

В spec находится спецификация ингресса, а в ней rules - правила маршрутизации.

Спецификация, которую мы с вами видим, описывает правила маршрутизации входящего трафика для балансировщика на основе nginx. Все запросы к хосту hello.world начинающиеся со / проксируются на сервис hello-service по порту 9000. В спецификации может быть указано несколько правил. И может быть указано несколько сервисов. Обычно создается один ингресс на один сервис или на одно приложение. Перечислять все правила маршрутизации для всех сервисов в одном ингрессе не стоит, это считается антипаттерном.

На текущий момент Ingress является слабо расширяемой сущностью, и от нее планируется уйти в сторону сущностей GatewayAPI, которые находятся в активной разработке.

Ссылки:

· Объект Ingress (англ)

· список доступных ингресс контроллеров (англ)

статья в блоге Kubernetes о дальнейшей судьбе Ingress объектов и переход к GatewaAPI (англ)

#kubernetes #ingress #devops