Поделиться через


Настройка входящего трафика с помощью API шлюза Kubernetes с помощью надстройки маршрутизации приложений (предварительная версия)

Это важно

Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

Предостережение

Сеть SIG Kubernetes и Комитет по реагированию на безопасность объявили о предстоящем выходеиз проекта Ingress NGINX с обслуживанием, заканчивающимся в марте 2026 года. Для кластеров AKS, использующих надстройку маршрутизации приложений с NGINX, немедленные действия не требуются. Корпорация Майкрософт предоставит официальную поддержку критически важных исправлений безопасности для ресурсов ngINX Ingress для маршрутизации приложений до ноября 2026 года.

AKS соответствует вышестоящему Kubernetes путем перехода в API шлюза в качестве долгосрочного стандарта для входящего трафика и управления трафиком L7. Рекомендуется приступить к планированию пути миграции на основе текущей настройки:

  • Пользователи надстройки маршрутизации приложений: производственные нагрузки остаются полностью поддерживаемыми до ноября 2026 года. Перейдите на реализацию API шлюза маршрутизации приложений для управления входящим трафиком с использованием API шлюза.
  • Пользователи OSS NGINX имеют несколько вариантов:
  • Пользователи сервисной сетки: Если вы планируете использовать сервисную сетку, рассмотрите дополнение к сервисной сетке на основе Istio. Используйте Istio Ingress сегодня и планируйте переход на поддержку API шлюза Istio, когда она становится общедоступной.

Надстройка маршрутизации приложений поддерживает API шлюза Kubernetes для управления входящим трафиком. API шлюза Kubernetes — это набор ресурсов, которые предоставляют стандартизованную, ориентированную на роли и расширяемую платформу для управления трафиком, предназначенную для замены и эволюции Ingress API. Таким образом, реализация API шлюза маршрутизации приложений направлена на то, чтобы стать преемником управляемой надстройки NGINX, которая основана на устаревшем Ingress API и перестанет получать поддержку от Azure после ноября 2026 года. Если вы используете управляемый NGINX, необходимо перейти к реализации API шлюза маршрутизации приложений или другой поддерживаемой реализации к ноября 2026 года.

Реализация дополнения для маршрутизации приложений Kubernetes Gateway API развертывает плоскость управления Istio для управления инфраструктурой ресурсов Kubernetes Gateway API. Однако она отличается от сервисной сетки Istio для AKS следующим образом:

Функция API шлюза маршрутизации приложений Дополнение для сервисной сетки Istio
Имя класса шлюза approuting-istio istio
Поддержка внедрения сайдкара и Istio CRD Не поддерживается. Управление инфраструктурой только для ресурсов API шлюза Kubernetes Поддерживается
Пересмотр и обновление Не пересмотрен. Обновляется на месте для минорных и патч обновлений Исправлено. Обновлено посредством канареечных обновлений для обновлений минорных версий и непосредственно для обновлений патчей.

Ограничения

  • Реализация API шлюза маршрутизации приложений и надстройка служебной сетки Istio не могут быть включены одновременно. Сначала необходимо отключить одну, а затем включить другую в разных операциях.
  • Реализация API шлюза маршрутизации приложений использует тот же список разрешений настройки ресурсов , что и надстройка Istio для проверки настроек ConfigMap для Gateway ресурсов. Настройки, не включённые в разрешённый список, блокируются с помощью веб-перехватчиков, управляемых надстройками.
  • Управление сертификатами Azure DNS и TLS с помощью надстройки маршрутизации приложений в настоящее время не поддерживается для API шлюза Kubernetes. Вы можете следовать шагам, описанным в руководстве по реализации API шлюза маршрутизации приложений для безопасного входного трафика, чтобы настроить Gateway для выполнения завершения TLS.
  • Настройка HTTPS-доступа ingress к службам HTTPS — например, сквозная передача SNI — с использованием ресурса в настоящее время не поддерживается.
  • Управление трафиком исходящего трафика через реализацию API шлюза маршрутизации приложений не поддерживается.

Необходимые условия

  • aks-preview Установите расширение или обновление до последней версии расширения с помощью команд [az extension add][az-extension-add] и [az extension update][az-extension-update]. Если вы используете Azure CLI. Необходимо использовать версию aks-preview и более позднюю 19.0.0b24.

    # Install the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension to the latest version
    az extension update --name aks-preview
    
  • Включите установку API управляемого шлюза. Использование самостоятельно управляемых CRD API шлюза с надстройкой маршрутизации приложений не поддерживается.

  • Зарегистрируйте флаг предварительного просмотра функции API шлюза маршрутизации приложений.

  • Зарегистрируйте флаг функции AppRoutingIstioGatewayAPIPreview с помощью команды az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "AppRoutingIstioGatewayAPIPreview"
    

Включение реализации API шлюза маршрутизации приложений

Настройка переменных среды

export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>

Включение во время создания кластера

Выполните следующую команду, чтобы включить реализацию API шлюза маршрутизации приложений во время создания кластера:

az aks create --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-app-routing-istio

Активация для существующего кластера

Выполните следующую команду, чтобы включить реализацию API шлюза маршрутизации приложений для существующего кластера:

az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-app-routing-istio

В пространстве имен aks-istio-system должны отображаться istiod pod.

kubectl get pods -n aks-istio-system
NAME                      READY   STATUS    RESTARTS   AGE
istiod-54b4ff45cf-htph8   1/1     Running   0          3m15s
istiod-54b4ff45cf-wlvgd   1/1     Running   0          3m

Кроме того, вы увидите, что развернуто следующее ValidatingWebhookConfiguration :

kubectl get validatingwebhookconfiguration
NAME                                        WEBHOOKS   AGE
aks-node-validating-webhook                 1          117m
azure-service-mesh-ccp-validating-webhook   1          4m2s

Если у вас включена инсталляция API управляемого шлюза, вы также увидите, что будет создана конфигурация шлюза Istio в виде ConfigMap.

kubectl get cm -n aks-istio-system
NAME                                  DATA   AGE
...
istio-gateway-class-defaults          2      43s
...

Настройка ресурса Ingress с использованием шлюза Kubernetes

Разверните приложение-пример

Сначала разверните пример httpbin приложения в default пространстве имен:

export ISTIO_RELEASE="release-1.27"
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_RELEASE/samples/httpbin/httpbin.yaml

Создание шлюза Kubernetes и HTTPRoute

Затем разверните конфигурацию API шлюза в default пространстве имен с заданным значением gatewayClassNameapprouting-istio.

kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  gatewayClassName: approuting-istio
  listeners:
  - name: http
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: Same
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: httpbin
spec:
  parentRefs:
  - name: httpbin-gateway
  hostnames: ["httpbin.example.com"]
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /get
    backendRefs:
    - name: httpbin
      port: 8000
EOF

Замечание

В приведенном выше примере создается внешняя служба подсистемы балансировки нагрузки ingress, доступная извне кластера. Вы можете добавить заметки для создания внутренней подсистемы балансировки нагрузки и настройки других параметров подсистемы балансировки нагрузки.

Замечание

По умолчанию контрольная плоскость Istio добавит GatewayClass имя approuting-istio к имени ресурсов, которые она подготавливает для Gateway. Чтобы аннотировать ваш Gateway ресурс с помощью gateway.istio.io/name-override, чтобы изменить имя подготовленных ресурсов. Имена ресурсов должны быть меньше 63 символов и должны быть допустимыми DNS-именами.

Убедитесь, что созданы Deployment, Service, HorizontalPodAutoscaler и PodDisruptionBudget для httpbin-gateway.

kubectl get deployment httpbin-gateway-approuting-istio
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
httpbin-gateway-approuting-istio   2/2     2            2           6m41s
kubectl get service httpbin-gateway-approuting-istio
NAME                               TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)                        AGE
httpbin-gateway-approuting-istio   LoadBalancer   10.0.54.96   <external-ip>    15021:30580/TCP,80:32693/TCP   7m13s
kubectl get hpa httpbin-gateway-approuting-istio
NAME                               REFERENCE                                     TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
httpbin-gateway-approuting-istio   Deployment/httpbin-gateway-approuting-istio   cpu: 3%/80%   2         5         2          8m13s
kubectl get pdb httpbin-gateway-approuting-istio
NAME                               MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
httpbin-gateway-approuting-istio   1               N/A               1                     9m1s

Отправка запроса в пример приложения

Наконец, попробуйте отправить curl запрос приложению httpbin . Сначала задайте INGRESS_HOST переменную среды:

kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -ojsonpath='{.status.addresses[0].value}')

Затем попробуйте отправить HTTP-запрос в httpbin:

curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"

Вы увидите HTTP 200 ответ.

Замечание

Сведения о защите трафика входящего трафика с помощью реализации API шлюза маршрутизации приложений см. в следующем руководстве по синхронизации секретов из Azure Key Vault (AKV) для защиты трафика входящего трафика API шлюза с завершением TLS.

Управление версиями и обновления

Реализация API шлюза маршрутизации приложений развертывает и обновляет контрольную плоскость Istio на основании версии кластера AKS в Kubernetes, как для минорных версий, так и для обновлений патчей.

Версия Istio — это максимальная поддерживаемая микро-версия Istio, совместимая с версией AKS кластера. Например, если вы используете версию AKS 1.34, то максимальная поддерживаемая минорная версия Istio, установленная по состоянию на март 2026 года, — это 1.28. Помните, что максимальная поддерживаемая версия Istio для данной версии Kubernetes может отличаться между кластерами длительной поддержки (LTS) и кластерами без LTS.

Чтобы найти максимальную поддерживаемую минорную версию Istio для версии AKS Kubernetes, можно проверить календарь выпуска добавки сетевых функций. Хотя реализация API шлюза маршрутизации приложений не подлежит ревизии, второстепенная версия плоскости управления Istio соответствует данной ревизии надстройки сетки службы (например, для надстройки сетки службы asm-1-28 второстепенная версия плоскости управления маршрутизацией Istio будет 1.28). Кроме того, можно узнать минорную версию Istio, проверив номер патча в образе istiod развертывания: kubectl get deployment istiod -n aks-istio-system -o=jsonpath="{.spec.template.spec.containers[*].image}".

Обновления

Обновления патч-версий и минорных версий контрольной плоскости Istio для реализации API шлюза маршрутизации приложения выполняются на месте. Обновления патч-версий контрольной плоскости Istio запускаются автоматически в составе выпусков AKS. Дополнительные обновления версий можно активировать автоматически или вручную в зависимости от версии AKS Kubernetes и времени выпуска дополнительных версий Istio. Дополнительные обновления версий выполняются в следующих двух сценариях:

  • Кластер AKS обновляется до новой версии с более высокой максимальной поддерживаемой версией Istio, назначенной для него. Плоскость управления Istio будет обновлена до более высокой минорной версии в рамках обновления кластера AKS.
  • Новая версия Istio выпущена для AKS и теперь является максимальной поддерживаемой версией Istio для версии кластера AKS. Уровень управления Istio в кластере будет автоматически обновлен до новой минорной версии после развертывания релиза в вашем регионе. Следуйте заметкам о выпуске AKS и трекеру выпуска AKS, чтобы отслеживать новые версии Istio и узнать, когда новая версия развернута в вашем регионе.

Возможно, что нарушения трафика могут возникнуть во время процесса обновления. Чтобы свести к минимуму нарушения во время обновления, надстройка маршрутизации приложений развертывает горизонтальное автомасштабирование Pod (HPA) с 2 минимальными репликами и PodDisruptionBudget (PDB) с минимальной доступностью 1 для каждой.Gateway Эти ресурсы можно настроить для изменения этих параметров.

Настройки ресурсов

Настройка горизонтального масштабирования Pod (HPA) для управляющей плоскости

Реализация API шлюза маршрутизации приложений поддерживает настройку плоскости управления Istio Horizontal Pod Autoscaler (HPA). Ресурс istiod HPA имеет следующие конфигурации по умолчанию:

  • Минимальные реплики: 2
  • Количество реплик: 5
  • Загрузка ЦП: 80%

Замечание

Чтобы предотвратить конфликты с API шлюза, реализация маршрутизации приложений не допускает установку minReplicas ниже начального значения по умолчанию 2.

Конфигурацию HPA можно изменить с помощью исправлений и прямых изменений. Пример:

kubectl patch hpa istiod -n aks-istio-system --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'

Настройка ресурсов шлюза

Реализация API шлюза маршрутизации приложений поддерживает настройку Gateway ресурсов с помощью аннотаций и ConfigMaps. Маршрутизация приложений использует тот же список разрешённых ресурсов для настройки ресурсов, что и сервисная mesh-сеть Istio для настройки ресурсов API шлюза. Выполните действия, описанные в документации по API шлюза дополнения Istio, чтобы настроить ресурсы, созданные для Gateways, и узнать, какие поля попадают в разрешённый список.

Замечание

istio-gateway-class-defaults ConfigMap подготавливается и согласуется системой AKS, когда CRD API управляемого шлюза и реализация API шлюза маршрутизации приложений включены совместно. Если вы ранее создали istio-gateway-class-defaults ConfigMap в aks-istio-system пространстве имен самостоятельно, необходимо удалить экземпляр самостоятельно управляемого ConfigMap перед включением CRD API Управляемого шлюза, чтобы избежать конфликтов с согласованием управляемого AKS ConfigMap.

Отключение реализации API шлюза маршрутизации приложений

Выполните следующую команду, чтобы отключить реализацию API шлюза маршрутизации приложений:

az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --disable-app-routing-istio

Очистка ресурсов

Выполните следующие команды, чтобы удалить Gateway и HttpRoute:

kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
kubectl delete httproute httpbin

Если вы создали ConfigMap для настройки Gateway, выполните следующую команду, чтобы удалить ConfigMap:

kubectl delete configmap gw-options

Если вы создали `SecretProviderClass` и секрет для остановки TLS, удалите следующие ресурсы.

kubectl delete secret httpbin-credential
kubectl delete pod secrets-store-sync-httpbin
kubectl delete secretproviderclass httpbin-credential-spc

Дальнейшие действия

Безопасный трафик входящего трафика с помощью реализации API шлюза маршрутизации приложений