• Русский
  • Настройка 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
    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