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


Настройка Istio Ingress с использованием API Gateway Kubernetes для службы Azure Kubernetes (AKS) (предварительная версия)

Это важно

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

Дополнение для сетевой архитектуры Istio поддерживает как собственный API управления трафиком Istio, так и API шлюза Kubernetes для управления входящим трафиком. Вы можете использовать модель автоматического развертывания API шлюза Istio или модель ручного развертывания. В этой статье описывается настройка управления входящим трафиком для надстройки сетки Istio с использованием API шлюза Kubernetes и модели автоматического развертывания.

Ограничения и рекомендации

  • Использование API шлюза Kubernetes для управления исходящим трафиком с дополнением к служебной сетке Istio поддерживается только в модели ручного развертывания.
  • Настройки ConfigMap для Gateway ресурсов должны соответствовать списку разрешённых настроек ресурсов. Поля, не находящиеся в списке разрешённых, запрещены и блокируются через вебхуки, управляемые надстройками. Дополнительные сведения см. в политике поддержки надстроек сетки служб Istio.

Предпосылки

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

Задайте следующие переменные среды для использования в этой статье:

Variable Description
RESOURCE_GROUP Имя группы ресурсов, содержащей кластер AKS.
CLUSTER_NAME Имя кластера AKS.
LOCATION Регион Azure, в котором развернут кластер AKS.
KEY_VAULT_NAME Имя ресурса Azure Key Vault, который будет создан для хранения секретов TLS. Если у вас есть существующий ресурс, используйте это имя.

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

  • Разверните пример httpbin приложения в default пространстве имен с помощью kubectl apply команды.

    kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.26/samples/httpbin/httpbin.yaml
    

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

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

  • Разверните конфигурацию API шлюза в пространстве имен default с параметром gatewayClassName, установленным на istio, и HTTPRoute, которая маршрутизирует трафик к службе httpbin, с помощью следующего манифеста:

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

    Замечание

    Если вы выполняете мино́рное обновление ревизии и имеете две ревизии надстроек сетевой инфраструктуры служб Istio, установленные в кластере одновременно, то плоскость управления для более высокой минорной ревизии по умолчанию берёт на себя управление Gateways. Вы можете добавить istio.io/rev метку в Gateway, чтобы контролировать, какой версии контрольной плоскости она принадлежит. Если вы добавите метку ревизии, убедитесь в её обновлении в соответствии с соответствующей ревизией плоскости управления перед откатом или завершением операции обновления.

Проверка создания ресурса

  • Убедитесь, что Deployment, Service, HorizontalPodAutoscaler, и PodDisruptionBudget ресурсы были созданы с помощью следующих kubectl get команд.

    kubectl get deployment httpbin-gateway-istio
    kubectl get service httpbin-gateway-istio
    kubectl get hpa httpbin-gateway-istio
    kubectl get pdb httpbin-gateway-istio
    

    Пример выходных данных:

    # Deployment resource
    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    httpbin-gateway-istio   2/2     2            2           31m
    
    # Service resource
    NAME                    TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)                        AGE
    httpbin-gateway-istio   LoadBalancer   10.0.65.45   <external-ip>    15021:32053/TCP,80:31587/TCP   33m
    
    # HPA resource
    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   2         5         3          34m
    
    # PDB resource
    NAME                    MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
    httpbin-gateway-istio   1               N/A               2                     36m
    

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

  1. Попробуйте отправить 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}')
    
  2. Попробуйте отправить HTTP-запрос на httpbin.

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

    В выходных данных вы должны увидеть ответ HTTP 200.

Обеспечение безопасности входящего трафика Istio с помощью API шлюза Kubernetes

Надстройка сетевой службы Istio поддерживает синхронизацию секретов из Azure Key Vault для защиты входящего трафика, основанного на API шлюза, с использованием завершения TLS или передачи SNI без изменений. В следующих разделах вы синхронизируете секреты из Azure Key Vault с кластером AKS с помощью поставщика Azure Key Vault для надстройки драйвера хранилища контейнеров хранилища секретов (CSI) и завершаете TLS в шлюзе входящего трафика.

Создание сертификатов и ключей клиента или сервера

  1. Создайте корневой сертификат и закрытый ключ для подписывания сертификатов для примеров служб:

    mkdir httpbin_certs
    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=example Inc./CN=example.com' -keyout httpbin_certs/example.com.key -out httpbin_certs/example.com.crt
    
  2. Создание сертификата и закрытого ключа для httpbin.example.com:

    openssl req -out httpbin_certs/httpbin.example.com.csr -newkey rsa:2048 -nodes -keyout httpbin_certs/httpbin.example.com.key -subj "/CN=httpbin.example.com/O=httpbin organization"
    openssl x509 -req -sha256 -days 365 -CA httpbin_certs/example.com.crt -CAkey httpbin_certs/example.com.key -set_serial 0 -in httpbin_certs/httpbin.example.com.csr -out httpbin_certs/httpbin.example.com.crt
    

Настройка Azure Key Vault и создание секретов

  1. Создайте экземпляр Azure Key Vault для предоставления входных данных сертификата и ключа надстройке сетевой службы Istio, используя команду az keyvault create. Если у вас уже есть экземпляр Azure Key Vault, можно пропустить этот шаг.

    az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATION
    
  2. Включите поставщика Azure Key Vault для надстройки драйвера хранилища секретов (CSI) в вашем кластере az aks enable-addons с помощью команды.

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  3. Если в хранилище ключей используется управление доступом на основе ролей Azure (RBAC) для модели разрешений, следуйте инструкциям в статье Предоставление доступа к ключам, сертификатам и секретам Azure с помощью управления доступом на основе ролей Azure, чтобы назначить роль Пользователь секретов хранилища ключей Key Vault для управляемого удостоверения, назначенного пользователем для надстройки. Кроме того, если хранилище ключей использует модель разрешений политики доступа к хранилищу, авторизуйте управляемое удостоверение надстройки, назначаемое пользователем, для доступа к ресурсу Azure Key Vault с помощью политики доступа с помощью az keyvault set-policy команды.

    OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId' -o tsv | tr -d '\r')
    CLIENT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.clientId')
    TENANT_ID=$(az keyvault show --resource-group $RESOURCE_GROUP --name $KEY_VAULT_NAME --query 'properties.tenantId')
    
    az keyvault set-policy --name $KEY_VAULT_NAME --object-id $OBJECT_ID --secret-permissions get list
    
  4. Создайте секреты в Azure Key Vault с помощью сертификатов и ключей с помощью следующих az keyvault secret set команд:

    az keyvault secret set --vault-name $KEY_VAULT_NAME --name test-httpbin-key --file httpbin_certs/httpbin.example.com.key
    az keyvault secret set --vault-name $KEY_VAULT_NAME --name test-httpbin-crt --file httpbin_certs/httpbin.example.com.crt
    

Развертывание SecretProviderClass и пример pod

  1. Разверните SecretProviderClass, чтобы предоставить Azure Key Vault определенные параметры драйверу CSI, используя следующий манифест. В этом примере test-httpbin-key и test-httpbin-crt имена секретных объектов в Azure Key Vault.

    cat <<EOF | kubectl apply -f -
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: httpbin-credential-spc
    spec:
      provider: azure
      secretObjects:
      - secretName: httpbin-credential
        type: kubernetes.io/tls
        data:
        - objectName: test-httpbin-key
          key: tls.key
        - objectName: test-httpbin-crt
          key: tls.crt
      parameters:
        useVMManagedIdentity: "true"
        userAssignedIdentityID: $CLIENT_ID 
        keyvaultName: $KEY_VAULT_NAME
        cloudName: ""
        objects:  |
          array:
            - |
              objectName: test-httpbin-key
              objectType: secret
              objectAlias: "test-httpbin-key"
            - |
              objectName: test-httpbin-crt
              objectType: secret
              objectAlias: "test-httpbin-crt"
        tenantId: $TENANT_ID
    EOF
    

    Замечание

    Кроме того, чтобы ссылаться на тип объекта сертификата непосредственно из Azure Key Vault, используйте следующий манифест для развертывания SecretProviderClass. В этом примере test-httpbin-cert-pxf — имя объекта сертификата в Azure Key Vault.

    cat <<EOF | kubectl apply -f -
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: httpbin-credential-spc
    spec:
      provider: azure
      secretObjects:
      - secretName: httpbin-credential
        type: kubernetes.io/tls
        data:
        - objectName: test-httpbin-key
          key: tls.key
        - objectName: test-httpbin-crt
          key: tls.crt
      parameters:
        useVMManagedIdentity: "true"
        userAssignedIdentityID: $CLIENT_ID 
        keyvaultName: $KEY_VAULT_NAME
        cloudName: ""
        objects:  |
          array:
            - |
              objectName: test-httpbin-cert-pfx  #certificate object name from keyvault
              objectType: secret
              objectAlias: "test-httpbin-key"
            - |
              objectName: test-httpbin-cert-pfx #certificate object name from keyvault
              objectType: cert
              objectAlias: "test-httpbin-crt"
        tenantId: $TENANT_ID
    EOF
    
  2. Разверните пример pod с помощью следующего манифеста. Для надстройки драйвера Хранилища ключей Azure для хранилища секретов (CSI) требуется модуль pod для ссылки на ресурс SecretProviderClass, чтобы обеспечить синхронизацию секретов из Azure Key Vault в кластер.

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: secrets-store-sync-httpbin
    spec:
      containers:
        - name: busybox
          image: mcr.microsoft.com/oss/busybox/busybox:1.33.1
          command:
            - "/bin/sleep"
            - "10"
          volumeMounts:
          - name: secrets-store01-inline
            mountPath: "/mnt/secrets-store"
            readOnly: true
      volumes:
        - name: secrets-store01-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "httpbin-credential-spc"
    EOF
    

Убедитесь в создании секрета TLS

  • Убедитесь, что секрет httpbin-credential был создан в default пространстве имен, как определено в ресурсе SecretProviderClass, с помощью команды kubectl describe secret.

    kubectl describe secret/httpbin-credential
    

    Пример выходных данных:

    Name:         httpbin-credential
    Namespace:    default
    Labels:       secrets-store.csi.k8s.io/managed=true
    Annotations:  <none>
    
    Type:  kubernetes.io/tls
    
    Data
    ====
    tls.crt:  1180 bytes
    tls.key:  1675 bytes
    

Развертывание шлюза TLS

  1. Создайте шлюз Kubernetes, который ссылается на httpbin-credential секрет в конфигурации TLS, используя следующий манифест:

    cat <<EOF | kubectl apply -f -
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: httpbin-gateway
    spec:
      gatewayClassName: istio
      listeners:
      - name: https
        hostname: "httpbin.example.com"
        port: 443
        protocol: HTTPS
        tls:
          mode: Terminate
          certificateRefs:
          - name: httpbin-credential
        allowedRoutes:
          namespaces:
            from: Selector
            selector:
              matchLabels:
                kubernetes.io/metadata.name: default
    EOF
    

    Замечание

    В определении шлюза значение tls.certificateRefs.name должно совпадать со значением secretName в ресурсе SecretProviderClass.

  2. Создайте соответствующее правило HTTPRoute для настройки маршрутизации входящего трафика в службу httpbin через HTTPS с помощью следующего манифеста:

    cat <<EOF | kubectl apply -f -
    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: /status
        - path:
            type: PathPrefix
            value: /delay
        backendRefs:
        - name: httpbin
          port: 8000
    EOF
    
  3. Получите внешний IP-адрес шлюза входящего трафика и безопасный порт с помощью следующих команд:

    kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
    export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -o jsonpath='{.status.addresses[0].value}')
    export SECURE_INGRESS_PORT=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -o jsonpath='{.spec.listeners[?(@.name=="https")].port}')
    
  4. Отправьте HTTPS-запрос для доступа к httpbin службе:

    curl -v -HHost:httpbin.example.com --resolve "httpbin.example.com:$SECURE_INGRESS_PORT:$INGRESS_HOST" \
    --cacert httpbin_certs/example.com.crt "https://httpbin.example.com:$SECURE_INGRESS_PORT/status/418"
    

    Выходные данные должны показать httpbin, что служба возвращает код 418 Я - чайник.

    Замечание

    Чтобы настроить входящий трафик HTTPS к службе HTTPS, обновите режим TLS в определении шлюза до Passthrough. Эта конфигурация указывает шлюзу передавать трафик входящего трафика как есть без прекращения TLS.

Настройки примечаний

Под spec.infrastructure.annotations можно добавить заметки для настройки параметров балансировщика нагрузки для Gateway. Например, чтобы создать внутренний балансировщик нагрузки, подключенный к определенной подсети, можно создать Gateway с помощью следующих аннотаций.

spec:
  # ... existing spec content ...
  infrastructure:
    annotations: 
      service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "my-subnet"

Настройки ConfigMap

Дополнение для сервис-сети Istio поддерживает настройки ресурсов , созданных для Gateways, в том числе:

  • Услуга
  • Развертывание
  • Горизонтальный автоскейлер Pod (HPA)
  • Бюджет нарушения подов (PDB)

Параметры по умолчанию для этих ресурсов задаются в istio-gateway-class-defaults ConfigMap в aks-istio-system пространстве имен. Этот ConfigMap должен иметь метку gateway.istio.io/defaults-for-class, установленную на istio, чтобы настройки вступили в действие для всех Gateways с spec.gatewayClassName: istio. Конфигурация уровня ConfigMap устанавливается по умолчанию в пространстве имен , когда доступна установка API управляемого шлюза . После установки CRD API управляемого шлюза развертывание istio-gateway-class-defaults ConfigMap может занять до пяти минут.

kubectl get configmap istio-gateway-class-defaults -n aks-istio-system -o yaml
...
data:
  horizontalPodAutoscaler: |
    spec:
      minReplicas: 2
      maxReplicas: 5
  podDisruptionBudget: |
    spec:
      minAvailable: 1
...

Эти параметры можно изменить для всех Istio Gateways на GatewayClass уровне, обновив istio-gateway-class-defaults ConfigMap или установив их для отдельных Gateway ресурсов. Для обоих уровней GatewayClass и GatewayConfigMaps необходимо добавить поля в список разрешённых для данного ресурса. Если существуют настройки как для GatewayClass, так и для отдельных Gateway, то конфигурация уровня Gateway имеет приоритет.

Поля списка разрешений для настройки развертывания

Путь к полю Description
metadata.labels Метки развертывания
metadata.annotations Заметки о развертывании
spec.replicas Число реплик развертывания
spec.template.metadata.labels Метки Pod
spec.template.metadata.annotations Аннотации pod
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms Привязанность узлов
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution Привязанность узлов
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution Сходство podов
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution Сходство podов
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution Защита от сходства pod
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution Защита от сходства pod
spec.template.spec.containers.resizePolicy Использование ресурсов контейнера
spec.template.spec.containers.resources.limits Использование ресурсов контейнера
spec.template.spec.containers.resources.requests Использование ресурсов контейнера
spec.template.spec.containers.stdin Отладка контейнера
spec.template.spec.containers.stdinOnce Отладка контейнера
spec.template.spec.nodeSelector Планирование Pod
spec.template.spec.nodeName Планирование Pod
spec.template.spec.tolerations Планирование Pod
spec.template.spec.topologySpreadConstraints Планирование Pod

Поля списка разрешенных настроек службы

Путь к полю Description
metadata.labels Метки службы
metadata.annotations Заметки службы
spec.type тип услуги;
spec.loadBalancerSourceRanges Параметры подсистемы балансировки нагрузки службы
spec.loadBalancerClass Параметры подсистемы балансировки нагрузки службы
spec.externalTrafficPolicy Политика трафика службы
spec.internalTrafficPolicy Политика трафика службы

Допустимые поля для настройки HorizontalPodAutoscaler (HPA)

Путь к полю Description
metadata.labels Метки HPA
metadata.annotations Аннотации HPA
spec.behavior.scaleUp.stabilizationWindowSeconds Характеристика увеличения масштабов HPA
spec.behavior.scaleUp.selectPolicy Характеристика увеличения масштабов HPA
spec.behavior.scaleUp.policies Характеристика увеличения масштабов HPA
spec.behavior.scaleDown.stabilizationWindowSeconds Поведение уменьшения масштаба HPA
spec.behavior.scaleDown.selectPolicy Поведение уменьшения масштаба HPA
spec.behavior.scaleDown.policies Поведение уменьшения масштаба HPA
spec.metrics Метрики масштабирования ресурсов HPA
spec.minReplicas Минимальное число реплик HPA. Не должно быть ниже 2.
spec.maxReplicas Максимальное число реплик HPA

Настройка полей списка разрешений PodDisruptionBudget (PDB)

Путь к полю Description
metadata.labels Метки PDB
metadata.annotations Аннотации PDB
spec.minAvailable Минимальная доступность PDB
spec.unhealthyPodEvictionPolicy Политика вытеснения PDB

Замечание

Изменение минимальной доступности и политики вытеснения может привести к потенциальным ошибкам во время операций обновления и удаления кластера или узла. Следуйте инструкциям по устранению неполадок PDB , чтобы устранить ошибки UpgradeFailed из-за PDB сбоев вытеснения.

Настройка параметров уровня GatewayClass

  1. Обновите ConfigMap уровня GatewayClass в пространстве имен aks-istio-system с помощью команды kubectl edit configmap.

    kubectl edit cm istio-gateway-class-defaults -n aks-istio-system
    
  2. При необходимости измените параметры ресурса в data разделе. Например, чтобы обновить минимальное/максимальное количество реплик в HPA и добавить метку к объекту Deployment, измените ConfigMap следующим образом:

    ...
    data:
      deployment: |
        metadata:
          labels:
            test.azureservicemesh.io/deployment-config: "updated"
      horizontalPodAutoscaler: |
        spec:
          minReplicas: 3
          maxReplicas: 6
      podDisruptionBudget: |
        spec:
          minAvailable: 1
    ...
    

    Замечание

    Разрешён только один ConfigMap для каждого GatewayClass.

  3. Теперь вы должны увидеть, что HPA, связанный с httpbin-gateway, который вы создали ранее, обновится с новыми минимальными и максимальными значениями. HPA Проверьте параметры с помощью kubectl get hpa команды.

    kubectl get hpa httpbin-gateway-istio
    

    Пример выходных данных:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   3         6         3          36m
    
  4. Убедитесь, что Deployment обновлен с новой меткой с помощью команды kubectl get deployment.

    kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'
    

    Пример выходных данных:

    updated
    

Настройка параметров для определенного шлюза

  1. Создайте ConfigMap с настройками ресурсов для шлюза с помощью следующего httpbin манифеста:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: gw-options
    data:
      horizontalPodAutoscaler: |
        spec:
          minReplicas: 2
          maxReplicas: 4
      deployment: |
        metadata:
          labels:
            test.azureservicemesh.io/deployment-config: "updated-per-gateway"
    EOF
    
  2. Обновите httpbinGateway, чтобы ссылаться на ConfigMap.

    spec:
      # ... existing spec content ...
      infrastructure:
        parametersRef:
          group: ""
          kind: ConfigMap
          name: gw-options
    
  3. Примените обновление с помощью kubectl apply команды.

    kubectl apply -f httpbin-gateway-updated.yaml
    
  4. Убедитесь, что HPA обновлен с новыми значениями min/max с помощью команды kubectl get hpa. Если вы также настроили ConfigMapGatewayClass уровня, параметрыGateway уровня должны иметь приоритет.

    kubectl get hpa httpbin-gateway-istio
    

    Пример выходных данных:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   2         4         2          4h14m
    
  5. Проверьте Deployment метки, чтобы убедиться, что test.azureservicemesh.io/deployment-config обновлено до нового значения с помощью команды kubectl get deployment.

    kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'
    

    Пример выходных данных:

    updated-per-gateway
    

Очистите ресурсы

Если ресурсы, созданные в этой статье, больше не нужны, их можно удалить, чтобы избежать каких-либо расходов.

  1. Удалите ресурсы шлюза и HTTPRoute с помощью следующих kubectl delete команд:

    kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
    kubectl delete httproute httpbin
    
  2. Если вы создали ConfigMap для настройки ресурсов шлюза, удалите его с помощью kubectl delete configmap команды.

    kubectl delete configmap gw-options
    
  3. Если вы создали SecretProviderClass и секрет, используемый для завершения TLS, удалите ресурсы с помощью следующих kubectl delete команд:

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