Gateways

Gateway — экземпляр инфраструктуры обработки трафика, конфигурация которого определяет: адреса, обработчики (listeners) и политики привязки маршрутов. Каждый Gateway связан с GatewayClass, который описывает фактический тип контроллера обработки трафика для Gateway.

Gateway создаётся в неймспейсе кластера, управление доступно на уровне кластера. Где настраивать:

  • кластер → раздел СетиGateways.
  • Через кастомные ресурсы: кластер → раздел АдминистрированиеКастомные ресурсы → API-группа gateway.networking.k8s.ioGateway.

На странице Gateways отображается список созданных в кластере Gateways.

Скриншот: список Gateways

Список Gateways


Создание Gateway

На странице Gateways нажмите + Добавить Gateway. На открывшейся странице заполните:

  • Имя — имя Gateway, при редактировании не изменяется.
  • Неймспейс — выберите неймспейс Gateway из списка неймспейсов кластера или создайте неймспейс, нажав + Создать неймспейс.
  • Лейблы и Аннотации — при необходимости.

В блоке Спецификация объекта заполните:

  • Gateway Class — выберите GatewayClass, созданный в кластере.
  • Адреса (необязательно) — один или несколько запрашиваемых IPv4-адресов доступа к Gateway. Если не заполнено, адрес или набор адресов (hostname) могут быть присвоены автоматически (зависит от реализации).
Скриншот: Gateway

Gateway

Обработчики (listeners)

Обработчики описывают, как Gateway должен прослушивать (обрабатывать) трафик. К обработчикам могут прикрепляться маршруты (HTTPRoute, GRPCRoute), определяющие куда направлять трафик.

  • Трафик, проходящий через Gateway, должен соответствовать только одному обработчику. Идентичная конфигурация обработчиков в одном Gateway приводит к ошибкам обработки трафика.
  • Если трафик не может быть обработан выбранным обработчиком, он отбрасывается.

В Gateway должен быть настроен минимум один обработчик. Доступна конфигурация:

Поле Обязательность Описание
Имя Да Имя обработчика (listener). Должно быть уникально в Gateway
Протокол Да Сетевой протокол, который обработчик ожидает получить. Доступные протоколы: HTTP, HTTPS
Порт Да Сетевой порт. Множество обработчиков могут использовать одинаковые порты (например, 80, 443)
Hostname Нет Имя хоста, для которого обработчик принимает трафик. Если не задано — для всех доменов. Имя с префиксом wildcard (*.) интерпретируются как сопоставление по суффиксу, например, для *.example.com будет соответствовать как test.example.com, так и foo.test.example.com, но не example.com.

Уникальность комбинаций: для протоколов HTTP и HTTPS должны отличаться порт, протокол и hostname (если задан). При нарушении правила уникальности добавить обработчик нельзя.

Скриншот: обработчик HTTP

Обработчик HTTP

При выборе протокола HTTPS доступна настройка TLS для обработчика.

  • Режим TLS — определяет поведение при TLS-соединения, Terminate (по умолчанию) — Gateway расшифровывает TLS-трафик или Passthrough — Gateway не расшифровывает TLS-трафик.
  • Secrets — Secrets с TLS-сертификатами и ключами для расшифровки входящего TLS-трафика. По умолчанию доступны secrets из неймспейса Gateway.
Скриншот: обработчик HTTPS с TLS

Обработчик HTTPS с TLS

В блоке Разрешённые маршруты (allowedRoutes) доступна настройка конфигурации, определяющая из каких неймспейсов могут быть прикреплены маршруты к этому обработчику. Разрешения:

Значение Описание
ALL Маршруты из любого неймспейса могут быть прикреплены к обработчику
Same Маршруты только из неймспейса Gateway могут быть прикреплены. Установлено по умолчанию
Selector Маршруты из неймспейсов в соответствии с заданным селектором могут быть прикреплены к обработчику
Скриншот: выбор маршрутов по селектору неймспейсов

Выбор маршрутов по селектору неймспейсов

Нажмите Сохранить, чтобы создать Gateway.

Пример манифеста Gateway

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: example-gateway
  namespace: infra
spec:
  gatewayClassName: cilium
  listeners:
    - name: http
      protocol: HTTP
      port: 80
      allowedRoutes:
        namespaces:
          from: Selector
          selector:
            matchLabels:
              gateway-access: "true"
    - name: https
      protocol: HTTPS
      port: 443
      hostname: app.example.com
      tls:
        mode: Terminate
        certificateRefs:
          - name: app-tls
            kind: Secret
      allowedRoutes:
        namespaces:
          from: Same

Просмотр и редактирование

На странице просмотра Gateway доступны вкладки: Gateway, Маршруты, Лейблы и аннотации и Манифест созданного Gateway.

На вкладке Gateway отображается статус Gateway и каждого обработчика:

  • Состояние — список conditions Gateway с цветовой индикацией. Нажатие на состояние открывает боковое окно с дополнительной информацией;
  • Адреса в блоке основной информации — один или несколько адресов в блоке основной информации, назначенные Gateway (status.addresses). При отсутствии данных в поле ошибка назначения адреса отобразится в состоянии Gateway. Не всегда запрашиваемые IPv4-адреса доступа при конфигурации создания Gateway могут быть назначены в конечном итоге Gateway;
  • Состояния обработчика — в строке обработчика conditions listeners. При раскрытии — полная конфигурация и количество связанных маршрутов.

На вкладке Маршруты отображается список связанных маршрутов с Gateway. Нажатие на строку открывается страницу просмотра выбранного маршрута.

Скриншот: список маршрутов

список маршрутов

Удаление обработчика не приведёт к каскадному удалению связанных маршрутов. Маршруты, связанные с обработчиком, перестанут обрабатывать трафик через удалённый обработчик.

Удаление

Удалить Gateway вы можете из списка на странице Gateways или со страницы просмотра.

Удаление Gateway не приводит к каскадному удалению связанных маршрутов. Маршруты перестанут обрабатывать трафик через удалённый Gateway.

Связанные разделы