Udostępnij przez


Konfigurowanie wejścia Istio z użyciem API Gateway Kubernetes dla usługi Azure Kubernetes Service (AKS) (wersja zapoznawcza)

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Dodatek siatki serwisowej Istio obsługuje zarówno własny interfejs API zarządzania ruchem przychodzącym Istio, jak i interfejs API Kubernetes Gateway na potrzeby zarządzania ruchem przychodzącym. Możesz użyć zautomatyzowanego modelu wdrażania interfejsu API usługi Istio Gateway lub modelu wdrażania ręcznego. W tym artykule opisano sposób konfigurowania zarządzania ruchem wejściowym dla dodatku siatki usług Istio za pomocą interfejsu API bramy Kubernetes i zautomatyzowanego modelu wdrażania.

Ograniczenia i zagadnienia

Wymagania wstępne

Ustawianie zmiennych środowiskowych

Ustaw następujące zmienne środowiskowe do użycia w tym artykule:

Variable Description
RESOURCE_GROUP Nazwa grupy zasobów zawierającej klaster usługi AKS.
CLUSTER_NAME Nazwa Twojego klastra usługi AKS.
LOCATION Region świadczenia usługi Azure, w którym wdrożono klaster usługi AKS.
KEY_VAULT_NAME Nazwa zasobu usługi Azure Key Vault, który ma zostać utworzony do przechowywania wpisów tajnych protokołu TLS. Jeśli masz istniejący zasób, użyj tej nazwy.

Wdrażanie przykładowej aplikacji

  • Wdróż przykładową aplikację httpbin w przestrzeni nazw default przy użyciu polecenia kubectl apply.

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

Tworzenie bramy Kubernetes i usługi HTTPRoute

Przykładowy manifest tworzy zewnętrzną usługę modułu równoważenia obciążenia ruchu przychodzącego, która jest dostępna spoza klastra. Możesz dodać adnotacje , aby utworzyć wewnętrzny moduł równoważenia obciążenia i dostosować inne ustawienia modułu równoważenia obciążenia.

  • Wdróż konfigurację Gateway API w przestrzeni nazw default z gatewayClassName ustawioną na istio i elementem HTTPRoute, który kieruje ruch do usługi httpbin przy użyciu następującego manifestu:

    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
    

    Uwaga / Notatka

    Jeśli przeprowadzasz uaktualnienie drobnej wersji i masz dwie wersje dodatku usługi Istio service mesh zainstalowane jednocześnie w klastrze, płaszczyzna sterowania dla wyższej drobnej wersji domyślnie przejmuje kontrolę nad Gateways. Możesz dodać etykietę istio.io/rev do Gateway, aby kontrolować, która wersja płaszczyzny kontrolnej jest jej właścicielem. Jeśli dodasz etykietę poprawki, upewnij się, że zaktualizujesz ją odpowiednio do odpowiedniej poprawki płaszczyzny sterowania przed przywróceniem lub ukończeniem operacji uaktualniania.

Weryfikowanie tworzenia zasobów

  • DeploymentSprawdź, czy zasoby , Service, HorizontalPodAutoscaleri PodDisruptionBudget zostały utworzone przy użyciu następujących kubectl get poleceń:

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

    Przykładowy wynik:

    # 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
    

Wysyłanie żądania do przykładowej aplikacji

  1. Spróbuj wysłać curl żądanie do httpbin aplikacji. Najpierw ustaw zmienną środowiskową 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. Spróbuj wysłać żądanie HTTP do httpbin.

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

    W danych wyjściowych powinna zostać wyświetlona odpowiedź HTTP 200.

Zabezpiecz ruch przychodzący Istio za pomocą interfejsu API gateway Kubernetes.

Dodatek Istio service mesh obsługuje synchronizowanie wpisów tajnych z Azure Key Vault w celu zabezpieczania ruchu wejściowego opartego na API bramy poprzez zakończenie protokołu Transport Layer Security (TLS) lub przekazywanie wskazania nazwy serwera (SNI). W poniższych sekcjach synchronizujesz tajne dane z Azure Key Vault z klastrem AKS, używając dostawcy Azure Key Vault dla dodatku sterownika CSI Secrets Store i kończysz szyfrowanie TLS w bramie wejściowej.

Tworzenie certyfikatów i kluczy klienta/serwera

  1. Utwórz certyfikat główny i klucz prywatny na potrzeby podpisywania certyfikatów dla przykładowych usług:

    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. Wygeneruj certyfikat i klucz prywatny dla elementu 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
    

Skonfiguruj Azure Key Vault i utwórz sekrety

  1. Utwórz instancję Azure Key Vault, aby dostarczyć dane wejściowe certyfikatu i klucza do dodatku siatki usług Istio przy użyciu polecenia az keyvault create. Jeśli masz już instancję Azure Key Vault, możesz pominąć ten krok.

    az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATION
    
  2. Włącz dostawcę usługi Azure Key Vault dla dodatku sterownika magazynu wpisów tajnych (CSI) w klastrze przy użyciu az aks enable-addons polecenia .

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  3. Jeśli magazyn kluczy używa kontroli dostępu opartej na rolach platformy Azure (RBAC) dla modelu uprawnień, postępuj zgodnie z instrukcjami podanymi w temacie Zapewnianie dostępu do kluczy, certyfikatów i sekretów usługi Azure z kontrolą dostępu opartą na rolach platformy Azure, aby przypisać rolę Użytkownik tajemnic Key Vault dla tożsamości zarządzanej przypisanej przez użytkownika w dodatku. Alternatywnie, jeśli Twój Magazyn Kluczy używa modelu uprawnień opartego na zasadach dostępu, autoryzuj zarządzaną tożsamość przypisaną użytkownikowi dodatku, aby uzyskać dostęp do zasobu Azure Key Vault, używając zasad dostępu przy pomocy polecenia 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. Utwórz wpisy tajne w usłudze Azure Key Vault przy użyciu certyfikatów i kluczy, stosując następujące polecenia 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
    

Rozmieszczenie SecretProviderClass i przykładowego podu

  1. Wdróż klasę SecretProviderClass, aby udostępnić określone parametry usługi Azure Key Vault do sterownika CSI przy użyciu następującego manifestu. W tym przykładzie test-httpbin-key i test-httpbin-crt są nazwami obiektów tajnych w 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
    

    Uwaga / Notatka

    Alternatywnie, aby odwołać się do typu obiektu certyfikatu bezpośrednio z usługi Azure Key Vault, użyj następującego manifestu w celu wdrożenia klasy SecretProviderClass. W tym przykładzie test-httpbin-cert-pxf jest nazwą obiektu certyfikatu w usłudze 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. Wdróż przykładowy pod przy użyciu następującego manifestu. Dodatek dostawcy usługi Azure Key Vault dla sterownika Secrets Store (CSI) wymaga, aby zasobnik odnosił się do zasobu SecretProviderClass, aby zapewnić synchronizację tajemnic z Azure Key Vault do klastra.

    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
    

Weryfikacja utworzenia sekretu TLS

  • Sprawdźhttpbin-credential, czy wpis tajny został utworzony w przestrzeni nazw default zgodnie z definicją w zasobie klasy SecretProviderClass przy użyciu polecenia kubectl describe secret.

    kubectl describe secret/httpbin-credential
    

    Przykładowy wynik:

    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
    

Wdrażanie bramy TLS

  1. Utwórz bramę Kubernetes, która odwołuje się do wpisu tajnego httpbin-credential w ramach konfiguracji protokołu TLS przy użyciu następującego manifestu:

    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
    

    Uwaga / Notatka

    W definicji bramy tls.certificateRefs.name musi odpowiadać zasobowi secretName w SecretProviderClass.

  2. Utwórz odpowiedni HTTPRoute element, aby skonfigurować routing ruchu przychodzącego do httpbin usługi za pośrednictwem protokołu HTTPS przy użyciu następującego manifestu:

    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. Pobierz zewnętrzny adres IP bramy wejściowej i zabezpieczony port przy użyciu następujących poleceń:

    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. Wyślij żądanie HTTPS, aby uzyskać dostęp do httpbin usługi:

    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"
    

    Dane wyjściowe powinny pokazać, że httpbin usługa zwróci kod 418 "I'm a Teapot".

    Uwaga / Notatka

    Aby skonfigurować dostęp przychodzący HTTPS do usługi HTTPS, zaktualizuj tryb TLS w definicji bramy na Passthrough. Ta konfiguracja powoduje, że brama przekaże ruch przychodzący , tak jak to jest, bez przerywania protokołu TLS.

Dostosowywanie adnotacji

Możesz dodać adnotacje w obszarze spec.infrastructure.annotations , aby skonfigurować ustawienia modułu równoważenia obciążenia dla elementu Gateway. Na przykład aby utworzyć wewnętrzny moduł równoważenia obciążenia dołączony do określonej podsieci, można utworzyć element Gateway z następującymi adnotacjami:

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"

Dostosowania obiektu ConfigMap

Dodatek do sieci serwisowej Istio obsługuje dostosowania zasobów generowanych dla Gateways, w tym:

  • Usługa
  • Wdrożenie
  • Automatyczny poziomy skalowalnik zasobników (HPA)
  • Budżet na zakłócenia zasobnika (PDB)

Domyślne ustawienia tych zasobów są ustawiane w istio-gateway-class-defaults ConfigMap w aks-istio-system przestrzeni nazw. Ten obiekt ConfigMap musi mieć ustawioną etykietę gateway.istio.io/defaults-for-class na istio , aby dostosowania zaczęły obowiązywać dla wszystkich Gateways elementów z parametrem spec.gatewayClassName: istio. Obiekt ConfigMap na poziomie GatewayClass jest instalowany domyślnie w przestrzeni nazw aks-istio-system po włączeniu instalacji interfejsu API zarządzanej bramy. Wdrożenie obiektu istio-gateway-class-defaults ConfigMap po zainstalowaniu definicji zasobów niestandardowych (CRD) interfejsu API bramy zarządzanej może potrwać do pięciu minut.

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

Możesz zmodyfikować te ustawienia dla wszystkich Istio Gateways na poziomie GatewayClass, aktualizując istio-gateway-class-defaults ConfigMap, lub ustawiając je dla poszczególnych Gateway zasobów. W przypadku poziomów GatewayClass i GatewayConfigMaps należy dodać pola do listy dozwolonych dla danego zasobu. Jeśli istnieją dostosowania zarówno dla elementu GatewayClass, jak i pojedynczego Gateway, konfiguracja na poziomie Gateway ma pierwszeństwo.

Dostosowywanie wdrożenia — pola listy dozwolonych

Ścieżka pola Description
metadata.labels Etykiety wdrożenia
metadata.annotations Adnotacje wdrożenia
spec.replicas Liczba replik wdrożenia
spec.template.metadata.labels Etykiety zasobników
spec.template.metadata.annotations Adnotacje podów
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms Koligacja węzła
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution Koligacja węzła
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution Afinitet zasobnika
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution Afinitet zasobnika
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution Anty-koligacja zasobnika
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution Anty-koligacja zasobnika
spec.template.spec.containers.resizePolicy Wykorzystanie zasobów kontenera
spec.template.spec.containers.resources.limits Wykorzystanie zasobów kontenera
spec.template.spec.containers.resources.requests Wykorzystanie zasobów kontenera
spec.template.spec.containers.stdin Debugowanie kontenera
spec.template.spec.containers.stdinOnce Debugowanie kontenera
spec.template.spec.nodeSelector Planowanie podów
spec.template.spec.nodeName Planowanie podów
spec.template.spec.tolerations Planowanie podów
spec.template.spec.topologySpreadConstraints Planowanie podów

Dostosowywanie usługi — pola listy dozwolonych

Ścieżka pola Description
metadata.labels Etykiety usług
metadata.annotations Adnotacje usługi
spec.type Typ usługi
spec.loadBalancerSourceRanges Ustawienia modułu równoważenia obciążenia usługi
spec.loadBalancerClass Ustawienia modułu równoważenia obciążenia usługi
spec.externalTrafficPolicy Zasady dotyczące ruchu usług
spec.internalTrafficPolicy Zasady dotyczące ruchu usług

Lista pól dozwolonych dostosowań dla HorizontalPodAutoscaler (HPA)

Ścieżka pola Description
metadata.labels Etykiety HPA
metadata.annotations Adnotacje HPA
spec.behavior.scaleUp.stabilizationWindowSeconds Zachowanie skalowania w górę dla HPA
spec.behavior.scaleUp.selectPolicy Zachowanie skalowania w górę dla HPA
spec.behavior.scaleUp.policies Zachowanie skalowania w górę dla HPA
spec.behavior.scaleDown.stabilizationWindowSeconds Zachowanie skalowania w dół HPA
spec.behavior.scaleDown.selectPolicy Zachowanie skalowania w dół HPA
spec.behavior.scaleDown.policies Zachowanie skalowania w dół HPA
spec.metrics Metryki skalowania zasobów HPA
spec.minReplicas Minimalna liczba replik HPA. Nie może być niższy niż 2.
spec.maxReplicas Maksymalna liczba replik HPA

Pola listy dozwolonych dostosowań PodDisruptionBudget (PDB)

Ścieżka pola Description
metadata.labels Etykiety plików PDB
metadata.annotations Adnotacje PDB
spec.minAvailable Minimalna dostępność pliku PDB
spec.unhealthyPodEvictionPolicy Zasady eksmisji pdB

Uwaga / Notatka

Modyfikowanie PDB minimalnej dostępności i zasad eksmisji może prowadzić do potencjalnych błędów podczas operacji uaktualniania i usuwania klastra/węzła. Postępuj zgodnie z przewodnikiem rozwiązywania problemów z plikiem PDB, aby rozwiązać problemy związane z błędami UpgradeFailed spowodowanymi PDB błędami usunięcia.

Konfigurowanie ustawień poziomu GatewayClass

  1. Zaktualizuj ConfigMap na poziomie GatewayClass w przestrzeni nazw aks-istio-system używając polecenia kubectl edit configmap:

    kubectl edit cm istio-gateway-class-defaults -n aks-istio-system
    
  2. Edytuj ustawienia zasobów w sekcji data zgodnie z potrzebami. Aby zaktualizować na przykład repliki min/max HPA i dodać etykietę do elementu Deployment, zmodyfikuj obiekt ConfigMap w następujący sposób:

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

    Uwaga / Notatka

    Dozwolony jest tylko jeden obiekt ConfigMap na jeden GatewayClass.

  3. Teraz powinna zostać zaktualizowana HPA dla httpbin-gateway, którą utworzyłeś wcześniej, zgodnie z nowymi wartościami minimalnymi/maksymalnymi. HPA Sprawdź ustawienia przy użyciu kubectl get hpa polecenia .

    kubectl get hpa httpbin-gateway-istio
    

    Przykładowy wynik:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   3         6         3          36m
    
  4. Sprawdź, czy Deployment został zaktualizowany do nowej etykiety za pomocą polecenia kubectl get deployment.

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

    Przykładowy wynik:

    updated
    

Konfigurowanie ustawień dla określonej bramy

  1. Utwórz ConfigMap z dostosowaniami zasobów dla bramy httpbin przy użyciu następującego manifestu.

    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. Zaktualizuj element httpbinGateway , aby odwoływać się do obiektu ConfigMap:

    spec:
      # ... existing spec content ...
      infrastructure:
        parametersRef:
          group: ""
          kind: ConfigMap
          name: gw-options
    
  3. Zastosuj aktualizację przy użyciu kubectl apply polecenia .

    kubectl apply -f httpbin-gateway-updated.yaml
    
  4. Sprawdź, czy parametr HPA został zaktualizowany przy użyciu nowych wartości minimalnych/maksymalnych kubectl get hpa przy użyciu polecenia . Jeśli również skonfigurowano GatewayClass -level ConfigMap, ustawienia Gateway -level powinny mieć pierwszeństwo.

    kubectl get hpa httpbin-gateway-istio
    

    Przykładowy wynik:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   2         4         2          4h14m
    
  5. Sprawdź etykiety Deployment, aby upewnić się, że test.azureservicemesh.io/deployment-config jest aktualizowany do nowej wartości przy użyciu polecenia kubectl get deployment.

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

    Przykładowy wynik:

    updated-per-gateway
    

Uprzątnij zasoby

Jeśli nie potrzebujesz już zasobów utworzonych w tym artykule, możesz je usunąć, aby uniknąć naliczania opłat.

  1. Usuń zasoby Gateway i HTTPRoute używając następujących kubectl delete poleceń.

    kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
    kubectl delete httproute httpbin
    
  2. Jeśli utworzono obiekt ConfigMap w celu dostosowania zasobów bramy, usuń go przy użyciu kubectl delete configmap polecenia .

    kubectl delete configmap gw-options
    
  3. Jeśli utworzono klasę SecretProviderClass oraz sekret na potrzeby zakończenia protokołu TLS, usuń zasoby przy użyciu następujących kubectl delete poleceń:

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