Настройка Gateway

Входящий шлюз (Gateway) — это экземпляр, развернутый из Gateway Class. Он создает слушатели для перехвата внешнего трафика на указанных доменных именах и портах. Вместе с правилами маршрутизации он может направлять указанный внешний трафик на соответствующие backend-экземпляры.

Создайте входящий шлюз для более точного распределения сетевых ресурсов.

Содержание

Терминология

Название ресурсаОбзорИнструкция по использованию
Gateway ClassВ стандартной документации Gateway API Gateway Class определяется как шаблон для создания шлюзов. Разные шаблоны могут создавать входящие шлюзы для различных бизнес-сценариев, что облегчает быстрое управление трафиком.Платформа включает выделенные Gateway Classes.
Inbound GatewayВходящий шлюз соответствует конкретным экземплярам ресурсов, и пользователь может эксклюзивно использовать все слушающие и вычислительные ресурсы этого входящего шлюза. Это конфигурация правил маршрутизации, действующая для слушателя. При обнаружении внешнего трафика шлюз распределяет его на backend-экземпляры согласно правилам маршрутизации.Его можно рассматривать как экземпляр балансировщика нагрузки.
Route RuleПравила маршрутизации определяют набор правил для распределения трафика от шлюза к сервисам. В настоящее время стандартно поддерживаемые типы правил маршрутизации в Gateway API включают HTTPRoute, TCPRoute, UDPRoute и др.Платформа поддерживает прослушивание протоколов HTTP, HTTPS, TCP и UDP.

Предварительные требования

Администратор платформы должен убедиться, что кластер поддерживает внутреннюю маршрутизацию типа LoadBalancer. Для публичных облачных кластеров должен быть установлен LoadBalancer Service Controller. В непубличных облачных кластерах платформа предоставляет функцию пула внешних адресов, которая позволяет внутренней маршрутизации типа LoadBalancer автоматически получать IP из пула внешних адресов для внешнего доступа после завершения настройки.

Пример Gateway и пользовательского ресурса Alb2 (CR)

# demo-gateway.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  namespace: k-1
  name: test
  annotations:
    cpaas.io/display-name: ces
    listeners.cpaas.io/creationTimestamp: '["2025-05-26T02:05:56.135Z"]'
    listeners.cpaas.io/display-name: '[""]'
  labels:
    alb.cpaas.io/alb-ref: test-o93q7
spec:
  gatewayClassName: exclusive-gateway
  listeners:
    - allowedRoutes:
        namespaces:
          from: All
      name: gateway-metric
      protocol: TCP
      port: 11782
---
apiVersion: crd.alauda.io/v2beta1
kind: ALB2
metadata:
  namespace: k-1
  name: test-o93q7
spec:
  type: nginx
  config:
    enableAlb: false
    networkMode: container
    resources:
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 200m
        memory: 256Mi
    vip:
      enableLbSvc: true
      lbSvcAnnotations: {}
    gateway:
      mode: standalone
      name: test # # [!code callout]
  1. См. описание Gateway Class ниже.
  2. Имя alb2 формируется как {gatewayName}-{random}.
  3. Имя gateway.

Создание Gateway через веб-консоль

  1. Перейдите в Container Platform.

  2. В левой навигационной панели выберите Network > Inbound Gateway.

  3. Нажмите Create Inbound Gateway.

  4. Следуйте инструкциям для настройки конкретных параметров.

    ПараметрОписание
    NameИмя входящего шлюза.
    Gateway ClassGateway Class определяет поведение шлюза, аналогично концепции классов хранения (StorageClasses); это ресурс кластера.
    Dedicated: входящий шлюз будет соответствовать конкретному экземпляру ресурса, и пользователь сможет использовать все слушатели и вычислительные ресурсы этого шлюза.
    SpecificationМожно выбрать рекомендованный сценарий использования в зависимости от потребностей или настроить лимиты ресурсов самостоятельно.
    Access AddressАдрес входящего шлюза, который по умолчанию получается автоматически.
    Internal Routing AnnotationИспользуется для объявления конфигурации или возможностей внутренней маршрутизации типа LoadBalancer. Для подробной информации об аннотациях смотрите LoadBalancer type internal routing annotation instructions.
  5. Нажмите Create.

Создание Gateway через CLI

kubectl apply -f demo-gateway.yaml

Просмотр ресурсов, созданных платформой

После создания входящего шлюза платформа автоматически создает множество ресурсов. Не удаляйте перечисленные ниже ресурсы.

Ресурсы, создаваемые по умолчаниюИмя
Ресурс типа ALB2name-lb-random
Deploymentname-lb-random
Внутренняя маршрутизация
  • name-lb-random
  • name-lb-random-lb-random
Конфигурационный словарь
  • name-lb-random-port-info
  • name-lb-random
Service Accountname-lb-random-serviceaccount

Обновление Gateway

NOTE

Обновление входящего шлюза приведет к прерыванию сервиса на 3-5 минут. Пожалуйста, выбирайте подходящее время для выполнения этой операции.

Обновление Gateway через веб-консоль

  1. Зайдите в Container Platform.

  2. В левой навигационной панели выберите Network > Inbound Gateway.

  3. Нажмите ⋮ > Update.

  4. Обновите конфигурацию входящего шлюза по необходимости.

    Примечание: Пожалуйста, разумно задавайте спецификации в соответствии с бизнес-требованиями.

  5. Нажмите Update.

Добавление слушателя

Отслеживает трафик по указанным доменным именам и перенаправляет его на backend-экземпляры согласно привязанным правилам маршрутизации.

Предварительные требования

  • Если необходимо отслеживать протокол HTTP, заранее свяжитесь с администратором для подготовки доменного имени.

  • Если необходимо отслеживать протокол HTTPS, заранее свяжитесь с администратором для подготовки доменного имени и сертификата.

Добавление слушателя через веб-консоль

  1. В левой навигационной панели выберите Network > Inbound Gateway.

  2. Нажмите на Имя входящего шлюза.

  3. Нажмите Add Listener.

  4. Следуйте инструкциям для настройки конкретных параметров.

    ПараметрОписание
    Протокол и порт слушателяВ настоящее время поддерживается мониторинг протоколов HTTP, HTTPS, TCP и UDP, можно ввести порт для мониторинга, например: 80.

    Примечание:
    • При совпадении портов типы слушателей HTTP, HTTPS и TCP не могут сосуществовать; можно выбрать только один из протоколов.
    • При использовании HTTP или HTTPS и совпадении портов доменные имена должны быть разными.
    Доменное имяВыберите доступное доменное имя в текущем namespace для мониторинга сетевого трафика, обращающегося к этому домену.
    Подсказка: протоколы TCP и UDP не поддерживают выбор доменных имен.
  5. Нажмите Create.

Добавление слушателя через CLI

kubectl patch gateway test \
  -n k-1 \
  --type=merge \
  -p '{
    "metadata": {
      "annotations": {
        "listeners.cpaas.io/creationTimestamp": "[\"2025-05-26T02:05:56.135Z\",\"2025-05-26T03:33:52.431Z\"]",
        "listeners.cpaas.io/display-name": "[\"\",\"\" ]"
      }
    },
    "spec": {
      "listeners": [
        {
          "allowedRoutes": {
            "namespaces": {
              "from": "All"
            }
          },
          "name": "gateway-metric",
          "protocol": "TCP",
          "port": 11782
        },
        {
          "allowedRoutes": {
            "namespaces": {
              "from": "All"
            }
          },
          "name": "demo-listener",
          "protocol": "HTTP",
          "port": 8088,
          "hostname": "developer.test.cn"
        }
      ]
    }
  }'

Создание правил маршрутизации

Правила маршрутизации задают политики маршрутизации для входящего трафика, аналогично входящим правилам (Kubernetes Ingress). Они обеспечивают доступ к сетевому трафику, отслеживаемому шлюзом, для внутренней маршрутизации кластера (Kubernetes Service), облегчая стратегию маршрутизации и переадресации. Главное отличие в том, что они нацелены на разные объекты сервиса: входящие правила обслуживают Ingress Controller, а правила маршрутизации — Ingress Gateway.

После настройки прослушивания в ingress gateway шлюз будет в реальном времени отслеживать трафик с указанных доменов и портов. Правила маршрутизации могут направлять входящий трафик на backend-экземпляры по желанию.

Пример пользовательского ресурса HTTPRoute (CR)

# example-httproute.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  namespace: k-1
  name: example-http-route
  annotations:
    cpaas.io/display-name: ""
spec:
  hostnames:
    - developer.test.cn
  parentRefs:
    - kind: Gateway
      namespace: k-1
      name: test
      sectionName: demo-listener
  rules:
    - matches:
        - path:
            type: Exact
            value: "/demo"
      filters: []
      backendRefs:
        - kind: Service
          name: test-service
          namespace: k-1
          port: 80
          weight: 100
  1. Доступные типы: HTTPRoute, TCPRoute, UDPRoute.
  2. Имя слушателя Gateway.
NOTE

Если для объекта Path в правиле маршрутизации типа HTTPRoute нет совпадающего правила, автоматически добавляется правило с режимом PathPrefix и значением /.

Создание маршрута через веб-консоль

  1. Зайдите в Container Platform.

  2. В левой навигационной панели выберите Network > Route Rules.

  3. Нажмите Create Route Rule.

  4. Следуйте инструкциям для настройки параметров.

    ПараметрОписание
    Тип маршрутаВ настоящее время поддерживаются типы маршрутов: HTTPRoute, TCPRoute, UDPRoute.
    Подсказка: HTTPRoute поддерживает публикацию на слушатели протоколов HTTP и HTTPS.
    Публикация на слушательВ левой панели выберите созданный Ingress Gateway, в правой — созданный Listener. Платформа опубликует созданные правила маршрутизации на выбранный слушатель, позволяя шлюзу перенаправлять перехваченный трафик на указанные backend-экземпляры.

    Примечание: Нельзя публиковать правила маршрутизации на слушатель, который работает на порту 11782 или уже содержит TCP или UDP маршруты.
    Совпадение (Match)Можно добавить одно или несколько правил совпадения для перехвата трафика, соответствующего требованиям. Например, перехват трафика с указанным Path, перехват трафика с указанным методом и т.д.

    Примечание:
    • Нажмите Add; при добавлении нескольких правил маршрутизации связь между ними — 'AND', все правила должны совпадать для активации.
    • Нажмите Add Match; при добавлении нескольких групп правил связь между группами — 'OR', достаточно совпадения любой группы для активации.
    • TCPRoute и UDPRoute не поддерживают настройку правил совпадения.
    • Если объект совпадения — path, а метод совпадения — Exact или PathPrefix, значение value должно начинаться с "/" и не должно содержать символы типа "//", "/./", "/../", "%2f", "%2F", "#", "/..", "/." и т.п.
    Действие (Action)Можно добавить одно или несколько действий для обработки перехваченного трафика.
    • Header: заголовок HTTP-сообщения содержит много метаданных, предоставляющих дополнительную информацию о запросе или ответе. Изменяя поля заголовка, сервер может влиять на обработку запроса и ответа.
    • Redirect: совпадающий URL будет обработан указанным образом, затем запрос будет инициирован заново.
    • Rewrite: совпадающий URL будет обработан указанным образом, затем запрос будет перенаправлен на другой путь ресурса или имя файла.


    Примечание:
    • Нажмите Add; при добавлении нескольких правил действий платформа выполнит все действия последовательно в порядке отображения.
    • TCPRoute и UDPRoute не поддерживают настройку правил действий.
    • В одном правиле маршрутизации не может быть несколько действий типа Header с одинаковым значением value.
    • В одном правиле маршрутизации может быть только одно действие типа Redirect или Rewrite, и только один режим из FullPath или PrefixPath.
    • Если хотите использовать операцию PrefixPath, сначала добавьте правило совпадения с режимом PathPrefix.
    Backend InstanceПосле активации правила трафик будет перенаправлен на backend-экземпляры согласно выбранным внутренним маршрутам и портам в текущем namespace. Можно также настроить веса, при этом экземпляры с большим весом будут выбираться с большей вероятностью.
    Подсказка: Процент рядом с весом показывает вероятность перенаправления на этот экземпляр, рассчитываемую как отношение текущего значения веса к сумме всех весов.
  5. Нажмите Create.

Создание маршрута через CLI

kubectl apply -f example-httproute.yaml