Konfigurace příchozí brány Istio pomocí Kubernetes Gateway API pro Azure Kubernetes Service (AKS) (náhled)

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "jak jsou" a "podle aktuální dostupnosti" a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Doplněk Istio Service Mesh podporuje jak rozhraní API pro správu příchozího přenosu dat Istio , tak rozhraní API brány Kubernetes pro správu příchozího přenosu dat. Můžete použít model automatizovaného nasazení rozhraní API služby Istio Gateway nebo model ručního nasazení. Tento článek popisuje, jak nakonfigurovat správu příchozího provozu pro doplněk Istio Service Mesh pomocí rozhraní API brány Kubernetes s modelem automatizovaného nasazení.

Omezení a úvahy

  • Doplněk síťové architektury Istio a implementace rozhraní API pro směrování aplikací není možné povolit současně. Nejprve je nutné jednu zakázat a povolit druhou v samostatné operaci.
  • Použití rozhraní API brány Kubernetes pro správu odchozího provozu pomocí doplňku Istio je podporováno pouze pro model ručního nasazení.
  • Přizpůsobení ConfigMap pro Gateway zdroje musí být zahrnuta v seznamu povolených přizpůsobení zdrojů. Pole, která nejsou v povoleném seznamu, jsou zakázaná a blokovaná prostřednictvím webhooků spravovaných doplňkem. Další informace o funkcích , allowed a blocked naleznete v supported.
  • Konfigurace příchozího přístupu HTTPS ke službám HTTPS – tj. průchozí režim pro Server Name Indication (SNI) prostřednictvím TLSRoute prostředku se v současné době nepodporuje.

Požadavky

Nastavení proměnných prostředí

V tomto článku nastavte následující proměnné prostředí:

Variable Description
RESOURCE_GROUP Název skupiny prostředků, která obsahuje váš AKS cluster.
CLUSTER_NAME Název clusteru AKS
LOCATION Oblast Azure, ve které je cluster AKS nasazený.
KEY_VAULT_NAME Název prostředku Azure Key Vault, který se má vytvořit pro ukládání tajných kódů TLS. Pokud máte existující prostředek, použijte tento název.

Nasazení ukázkové aplikace

  • Nejprve nasaďte ukázkovou aplikaci httpbin v oboru názvů default pomocí příkazu kubectl apply.

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

Vytvořit Kubernetes Gateway a HTTPRoute

Ukázkový manifest vytvoří externí službu pro vyrovnávání zatížení příchozího provozu, která je přístupná mimo cluster. Přidáním poznámek můžete vytvořit interní nástroj pro vyrovnávání zatížení a přizpůsobit další nastavení nástroje pro vyrovnávání zatížení.

  • Nasaďte konfiguraci API brány v rámci oboru názvů default s gatewayClassName nastaveným na istio a HTTPRoute pro směrování provozu ke službě httpbin použitím následujícího 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: httpbin
    spec:
      parentRefs:
      - name: httpbin-gateway
      hostnames: ["httpbin.example.com"]
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /get
        backendRefs:
        - name: httpbin
          port: 8000
    EOF
    

    Poznámka:

    Ve výchozím nastavení řídicí rovina Istio připojí název GatewayClass k názvu prostředků, které zřizuje pro istio. K vašemu prostředku Gateway můžete připojit poznámky gateway.istio.io/name-override, abyste přepsali název zřízených prostředků. Názvy prostředků musí být menší než 63 znaky a musí to být platný název DNS.

    Poznámka:

    Pokud provádíte menší upgrade revizí a současně máte v clusteru nainstalované dvě revize sítě služeb Istio, řídicí rovina pro vyšší menší revizi ve výchozím nastavení převezme vlastnictví Gateways . Můžete přidat popisek istio.io/rev k Gateway, aby bylo jasné, kterou revizi řídicí roviny vlastní. Pokud přidáte popisek revize, před vrácením zpět nebo dokončením operace upgradu ho aktualizujte odpovídajícím způsobem na příslušnou revizi řídicí roviny.

Ověření vytváření prostředků

  • Ověřte, že Deployment, Service, HorizontalPodAutoscaler a PodDisruptionBudget zdroje byly vytvořeny pomocí následujících příkazů 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
    

    Příklad výstupu:

    # 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
    

Odeslání požadavku do ukázkové aplikace

  1. Zkuste odeslat curl žádost do httpbin aplikace. Nejprve nastavte proměnnou INGRESS_HOST prostředí:

    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. Zkuste odeslat požadavek HTTP na httpbinadresu .

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

    Ve výstupu by se měla zobrazit HTTP 200 odpověď.

Zabezpečte příchozí provoz Istio pomocí rozhraní API brány Kubernetes

Doplněk Istio Service Mesh podporuje synchronizaci tajných kódů z Azure Key Vault pro zabezpečení příchozího přenosu dat založeného na rozhraní API brány s ukončením protokolu TLS (Transport Layer Security. V následujících částech synchronizujete tajné kódy z Azure Key Vault do clusteru AKS pomocí zprostředkovatele Azure Key Vault pro doplněk Ovladače úložiště kontejnerů úložiště tajných klíčů (CSI) a ukončete protokol TLS v bráně příchozího přenosu dat.

Vytvoření certifikátů a klíčů klienta/serveru

  1. Vytvořte kořenový certifikát a privátní klíč pro podepisování certifikátů pro ukázkové služby:

    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. Vygenerujte certifikát a privátní klíč pro 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
    

Nastavení Azure Key Vault a vytvoření tajných kódů

  1. Pomocí příkazu az keyvault create vytvořte instanci Azure Key Vault pro zadání vstupu certifikátu a klíče do doplňku Istio service mesh. Pokud už máte instanci Azure Key Vault, můžete tento krok přeskočit.

    az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATION
    
  2. Povolte zprostředkovatele Azure Key Vault pro doplněk Ovladače úložiště tajných dat (CSI) ve vašem clusteru pomocí příkazu az aks enable-addons.

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  3. Pokud váš Key Vault pro model oprávnění používá Azure řízení přístupu na základě role (RBAC), postupujte podle pokynů v Provide access to Azure Key Vault keys, certificates, and secrets with Azure role-based access control a přiřaďte Azure roli Uživatel tajemství Key Vault pro spravovanou identitu uživatelsky přiřazeného doplňku. Pokud váš klíčový trezor používá model oprávnění zásad přístupu, autorizujte uživatelem přiřazenou spravovanou identitu doplňku k přístupu k prostředku Azure Key Vault pomocí zásady přístupu příkazem 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. Pomocí certifikátů a klíčů vytvořte tajné kódy v Azure Key Vault pomocí následujících příkazů 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
    

Nasazení třídy SecretProviderClass a ukázkového podu

  1. Nasaďte SecretProviderClass pro poskytnutí Azure Key Vault konkrétních parametrů pro ovladač CSI pomocí následujícího manifestu. V tomto příkladu jsou test-httpbin-key a test-httpbin-crt názvy tajných objektů v 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
    

    Poznámka:

    Pokud chcete odkazovat na typ objektu certifikátu přímo z Azure Key Vault, použijte k nasazení SecretProviderClass následující manifest. V tomto příkladu je test-httpbin-cert-pfx název objektu certifikátu v 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. Nasaďte ukázkový pod s využitím následujícího manifestu. Zprostředkovatel Azure Key Vault pro doplněk ovladače úložiště tajemství (CSI) vyžaduje pod, který odkazuje na prostředek SecretProviderClass, aby zajistil synchronizaci tajemství z Azure Key Vault do clusteru.

    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
    

Ověření vytvoření tajného klíče TLS

  • Ověřte, že byl vytvořen tajný klíč httpbin-credential v oboru názvů default, jak je definováno v prostředku SecretProviderClass, pomocí příkazu kubectl describe secret.

    kubectl describe secret/httpbin-credential
    

    Příklad výstupu:

    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
    

Nasazení brány TLS

  1. Pomocí následujícího manifestu vytvořte bránu Kubernetes, která odkazuje na httpbin-credential tajný klíč v konfiguraci protokolu 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
    

    Poznámka:

    V definici tls.certificateRefs.name brány musí odpovídat secretName prostředku SecretProviderClass.

  2. Pomocí následujícího manifestu vytvořte odpovídající HTTPRoute konfiguraci směrování příchozího přenosu dat do httpbin služby přes PROTOKOL 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. Pomocí následujících příkazů získejte externí IP adresu brány příchozího přenosu dat a zabezpečený port:

    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. Odešlete požadavek HTTPS pro přístup ke službě 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"
    

    Výstup by měl ukázat, že služba httpbin vrací kód 418 I'm a Teapot.

    Poznámka:

    Pokud chcete nakonfigurovat přístup příchozího přenosu dat HTTPS ke službě HTTPS, aktualizujte režim TLS v definici brány na Passthrough. Tato konfigurace dává bráně pokyn, aby předávala příchozí provoz tak, jak je, aniž by ukončoval protokol TLS.

Přizpůsobení poznámek

Můžete přidat poznámky pod spec.infrastructure.annotationskonfigurovat nastavení nástroje pro vyrovnávání zatížení pro nástroj Gateway. Pokud například chcete vytvořit interní nástroj pro vyrovnávání zatížení připojený ke konkrétní podsíti, můžete vytvořit Gateway následující poznámky:

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"

Přizpůsobení objektu ConfigMap

Doplněk Istio Service Mesh podporuje přizpůsobení prostředků generovaných pro službu Gateways, včetně:

  • Service
  • Nasazení
  • Horizontální automatické škálování podů (HPA)
  • Rozpočet přerušení podů (PDB)

Výchozí nastavení pro tyto prostředky jsou nastavena v objektu istio-gateway-class-defaults ConfigMap v aks-istio-system oboru názvů, který je vytvořen službou AKS, když jsou povoleny spravované CRD API brány společně s Istio doplňkem. Tento objekt ConfigMap musí mít popisek gateway.istio.io/defaults-for-class nastaven na istio, aby se přizpůsobení projevila pro všechny Gateways s spec.gatewayClassName: istio. Objekt ConfigMap příslušné úrovně je standardně nainstalován v namespace, pokud je povolena spravovaná instalace Gateway API. Nasazení objektu istio-gateway-class-defaults ConfigMap může po instalaci CRD API spravované brány trvat až pět minut.

Poznámka:

Objekt istio-gateway-class-defaults ConfigMap je provisionován a synchronizován službou AKS, když jsou společně povoleny CRD API spravované brány a doplněk Istio. Pokud jste dříve vytvořili objekt ConfigMap v oboru názvů istio-gateway-class-defaults sami, musíte před povolením identifikátorů Gateway API CRD spravovaných službou odstranit vlastní instanci ConfigMap, abyste zabránili konfliktům s vyrovnáním ConfigMap spravovaného službou AKS.

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

Tato nastavení můžete upravit pro všechny Istio Gateways na GatewayClass úrovni aktualizací istio-gateway-class-defaults ConfigMap, nebo je můžete nastavit pro jednotlivé Gateway prostředky. GatewayClass-level i Gateway-level ConfigMaps, je nutné přidat pole do seznamu povolených položek pro daný prostředek. Pokud existují přizpůsobení jak pro GatewayClass, tak pro konkrétní Gateway, má přednost konfigurace na úrovni Gateway.

Pole seznamu povolených přizpůsobení nasazení

Cesta k poli Description
metadata.labels Štítky nasazení
metadata.annotations Poznámky k nasazení
spec.replicas Počet nasazení replik
spec.template.metadata.labels Popisky podů
spec.template.metadata.annotations Poznámky podů
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms Afinitní vazba uzlů
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution Afinitní vazba uzlů
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution Spřažení podů
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution Spřažení podů
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution Anti-afinitní rozložení podů
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution Anti-afinitní rozložení podů
spec.template.spec.containers.resizePolicy Využití prostředků kontejneru
spec.template.spec.containers.resources.limits Využití prostředků kontejneru
spec.template.spec.containers.resources.requests Využití prostředků kontejneru
spec.template.spec.containers.stdin Ladění kontejneru
spec.template.spec.containers.stdinOnce Ladění kontejneru
spec.template.spec.nodeSelector Plánování podů
spec.template.spec.nodeName Plánování podů
spec.template.spec.tolerations Plánování podů
spec.template.spec.topologySpreadConstraints Plánování podů

Pole pro přizpůsobení služby seznamu povolení

Cesta k poli Description
metadata.labels Popisky služeb
metadata.annotations Poznámky ke službám
spec.type Typ služby
spec.loadBalancerSourceRanges Nastavení nástroje pro vyrovnávání zatížení služby
spec.loadBalancerClass Nastavení nástroje pro vyrovnávání zatížení služby
spec.externalTrafficPolicy Zásady provozu služby
spec.internalTrafficPolicy Zásady provozu služby

Pole seznamu povolených pro přizpůsobení HorizontalPodAutoscaler (HPA)

Cesta k poli Description
metadata.labels Popisky HPA
metadata.annotations Poznámky HPA
spec.behavior.scaleUp.stabilizationWindowSeconds Chování navyšování kapacity HPA
spec.behavior.scaleUp.selectPolicy Chování navyšování kapacity HPA
spec.behavior.scaleUp.policies Chování navyšování kapacity HPA
spec.behavior.scaleDown.stabilizationWindowSeconds Chování zmenšení kapacity HPA
spec.behavior.scaleDown.selectPolicy Chování zmenšení kapacity HPA
spec.behavior.scaleDown.policies Chování zmenšení kapacity HPA
spec.metrics Metriky škálování prostředků HPA
spec.minReplicas Minimální počet replik HPA Nesmí být nižší než 2.
spec.maxReplicas Maximální počet replik HPA

Seznam povolených polí pro přizpůsobení PodDisruptionBudget (PDB)

Cesta k poli Description
metadata.labels Popisky PDB
metadata.annotations Poznámky PDB
spec.minAvailable Minimální dostupnost PDB
spec.unhealthyPodEvictionPolicy Zásady vyřazení PDB

Poznámka:

Úprava minimální PDB dostupnosti a zásad vyřazení může vést k potenciálním chybám při operacích upgradu clusteru nebo uzlu a odstranění. Při odstraňování chyb UpgradeFailed kvůli selhání evikce postupujte podle PDB.

Konfigurace nastavení na úrovni GatewayClass

  1. Aktualizujte objekt ConfigMap na úrovni GatewayClass v prostoru názvů aks-istio-system pomocí příkazu kubectl edit configmap.

    kubectl edit cm istio-gateway-class-defaults -n aks-istio-system
    
  2. Podle potřeby upravte nastavení prostředků v oddílu data . Pokud chcete například aktualizovat repliky HPA min/max a přidat popisek do Deployment ConfigMap, proveďte úpravy následujícím způsobem:

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

    Poznámka:

    Je povolena pouze jedna ConfigMap pro GatewayClass.

  3. Teď byste měli vidět, že se HPA pro httpbin-gateway, který jste vytvořili dříve, aktualizuje s novými minimálními a maximálními hodnotami. Ověřte nastavení HPA pomocí příkazu kubectl get hpa.

    kubectl get hpa httpbin-gateway-istio
    

    Příklad výstupu:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   3         6         3          36m
    
  4. Pomocí příkazu ověřte, že Deployment je aktualizovaný s novým popiskem kubectl get deployment .

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

    Příklad výstupu:

    updated
    

Konfigurace nastavení pro konkrétní bránu

  1. Pomocí následujícího manifestu vytvořte objekt ConfigMap s vlastními nastaveními prostředků pro bránu 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. httpbin Gateway Aktualizujte odkaz na objekt ConfigMap:

    spec:
      # ... existing spec content ...
      infrastructure:
        parametersRef:
          group: ""
          kind: ConfigMap
          name: gw-options
    
  3. Použijte aktualizaci pomocí kubectl apply příkazu.

    kubectl apply -f httpbin-gateway-updated.yaml
    
  4. Pomocí příkazu ověřte, že HPA se aktualizuje s použitím nových minimálních a maximálních hodnot kubectl get hpa . Pokud jste také nakonfigurovali GatewayClass-úrovňový objekt ConfigMap, nastavení na úrovni Gateway by měly mít přednost.

    kubectl get hpa httpbin-gateway-istio
    

    Příklad výstupu:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   2         4         2          4h14m
    
  5. Deployment Zkontrolujte popisky a ujistěte se, že pomocí příkazu test.azureservicemesh.io/deployment-config je kubectl get deployment aktualizováno na novou hodnotu.

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

    Příklad výstupu:

    updated-per-gateway
    

Povolení protokolů přístupu pro pody brány

Telemetry CRD jsou instalovány automaticky s doplňkem Istio. Můžete použít Telemetry API ke konfiguraci protokolování přístupu pro Gateway pody.

Vytvořte prostředek v aks-istio-system oboru názvů, abyste povolili přístupové protokoly pro všechny Gateway pody v síti nebo v konkrétním oboru názvů, abyste povolili přístupové protokoly pouze pro Gateway pody v daném oboru názvů.

Následující příklad ukazuje Telemetry prostředek, který umožňuje Gateway protokolování přístupu:

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: aks-istio-system
spec:
  accessLogging:
  - providers:
    - name: envoy

Poznámka:

Výše uvedený manifest umožňuje protokolování přístupu napříč celou mesh sítí, a to jak pro pody, tak i pro sidecar proxy servery injektované Istiem. Pomocí selektorů můžete cílit na konkrétní pody. Další podrobnosti o konfiguraci protokolování přístupu pomocí Telemetry API najdete v dokumentaci k doplňku Istio.

Vyčistěte zdroje

Pokud už prostředky vytvořené v tomto článku nepotřebujete, můžete je odstranit, abyste se vyhnuli poplatkům.

  1. Pomocí následujících kubectl delete příkazů odstraňte tyto zdroje Gateway a HTTPRoute:

    kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
    kubectl delete httproute httpbin
    
  2. Pokud jste vytvořili objekt ConfigMap pro přizpůsobení prostředků brány, odstraňte ho kubectl delete configmap pomocí příkazu.

    kubectl delete configmap gw-options
    
  3. Pokud jste vytvořili SecretProviderClass a tajný klíč, který se má použít pro ukončení protokolu TLS, odstraňte prostředky pomocí následujících kubectl delete příkazů:

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