Delen via


Istio ingress configureren met de Kubernetes Gateway API voor Azure Kubernetes Service (AKS) (preview)

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

De invoegtoepassing istio-service-mesh ondersteunt zowel de eigen API voor inkomend verkeerbeheer van Istio als de Kubernetes Gateway-API voor inkomend verkeerbeheer. U kunt het geautomatiseerde implementatiemodel van de Istio Gateway-API of het handmatige implementatiemodel gebruiken. In dit artikel wordt beschreven hoe u inkomend verkeerbeheer configureert voor de invoegtoepassing Istio-service-mesh met behulp van de Kubernetes Gateway-API met het geautomatiseerde implementatiemodel.

Beperkingen en overwegingen

  • De invoegtoepassing Istio-service-mesh en de implementatie van de gateway-API voor toepassingsroutering kunnen niet tegelijkertijd worden ingeschakeld. U moet er eerst een uitschakelen en de andere inschakelen in een afzonderlijke bewerking.
  • Het gebruik van de Kubernetes Gateway-API voor uitgaand verkeerbeheer met de Istio-invoegtoepassing wordt alleen ondersteund voor het handmatige implementatiemodel.
  • ConfigMap-aanpassingen voor Gateway resources moeten binnen de toegestane lijst voor resourceaanpassing vallen. Velden die niet op de acceptatielijst staan, worden geweigerd en geblokkeerd via door uitbreidingsmodule beheerde webhooks. Zie het ondersteuningsbeleid voor de Istio-invoegtoepassing voor meer informatie over allowed, blockeden supported functies.
  • Het configureren van HTTPS-toegang tot HTTPS-services, d.w.z. SNI-passthrough (Server Name Indication), via de TLSRoute resource wordt momenteel niet ondersteund.

Vereiste voorwaarden

  • Schakel de Managed Gateway-API in op uw AKS-cluster.
  • Installeer revision asm-1-26 of hoger van de Istio service-mesh-invoegtoepassing. Volg de installatiehandleiding als u de invoegtoepassing Istio service mesh nog niet hebt geïnstalleerd, of als u een lagere secundaire revisie gebruikt.

Omgevingsvariabelen instellen

Stel de volgende omgevingsvariabelen in voor gebruik in dit artikel:

Variable Description
RESOURCE_GROUP De naam van de resourcegroep die uw AKS-cluster bevat.
CLUSTER_NAME De naam van uw AKS-cluster.
LOCATION De Azure-regio waar uw AKS-cluster is geïmplementeerd.
KEY_VAULT_NAME De naam van de Azure Key Vault-resource die moet worden gemaakt voor het opslaan van TLS-geheimen. Als u een bestaande resource hebt, gebruikt u die naam.

Voorbeeldtoepassing implementeren

  • Implementeer eerst de voorbeeldtoepassing httpbin in de default naamruimte met behulp van de kubectl apply opdracht.

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

Kubernetes Gateway en HTTPRoute maken

In het voorbeeldmanifest wordt een externe load balancer-service voor inkomend verkeer gemaakt die toegankelijk is van buiten het cluster. U kunt aantekeningen toevoegen om een interne load balancer te maken en andere load balancer-instellingen aan te passen.

  • Implementeer een gateway-API-configuratie in de default naamruimte met de gatewayClassName set naar istio en een HTTPRoute die verkeer naar de httpbin service routeert met behulp van het volgende manifest:

    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
    

    Opmerking

    Standaard zal het Istio-controlevlak de GatewayClass naam istio toevoegen aan de naam van de resources die het voorziet voor de Gateway. U kunt uw Gateway-resource annoteren met gateway.istio.io/name-override om de naam van de geconfigureerde bronnen te overschrijven. De resourcenamen moeten kleiner zijn dan 63 tekens en moeten een geldige DNS-naam zijn.

    Opmerking

    Als u een kleine revisie-upgrade uitvoert en er twee revisies van de Istio-service-mesh-invoegtoepassing op uw cluster zijn geïnstalleerd, neemt het control plane voor de hogere kleine revisie standaard de verantwoordelijkheid voor de Gateways. U kunt het istio.io/rev label toevoegen aan Gateway om te bepalen welke revisie van het besturingsvlak hiervan eigenaar is. Als u het revisielabel toevoegt, zorg er dan voor dat u deze bijwerkt naar de juiste versie van het controlevlak voordat u de upgradebewerking terugdraait of voltooit.

De creatie van bronnen verifiëren

  • Controleer of de resources Deployment, Service, HorizontalPodAutoscaler en PodDisruptionBudget zijn gemaakt met behulp van de volgende kubectl get commando's.

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

    Voorbeelduitvoer:

    # 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
    

Aanvraag verzenden naar voorbeeldtoepassing

  1. Probeer een curl aanvraag naar de httpbin toepassing te verzenden. Stel eerst de INGRESS_HOST omgevingsvariabele in:

    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. Probeer een HTTP-aanvraag naar httpbin.

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

    In de uitvoer ziet u een HTTP 200 antwoord.

Binnenkomend Verkeer van Istio beveiligen met de Kubernetes Gateway-API

De invoegtoepassing istio-service-mesh biedt ondersteuning voor het synchroniseren van geheimen uit Azure Key Vault voor het beveiligen van inkomend verkeer op basis van gateway-API met TLS-beëindiging (Transport Layer Security). In de volgende secties synchroniseert u geheimen van Azure Key Vault naar uw AKS-cluster met behulp van de Azure Key Vault-provider voor de CSI-stuurprogramma-invoegtoepassing (Secrets Store Container Storage Interface) en beëindigt u TLS bij de ingangsgateway.

Client-/servercertificaten en -sleutels maken

  1. Maak een basiscertificaat en een persoonlijke sleutel voor het ondertekenen van de certificaten voor voorbeeldservices:

    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. Genereer een certificaat en een persoonlijke sleutel voor 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 instellen en geheimen aanmaken

  1. Maak een Azure Key Vault-exemplaar om het certificaat en de sleutelinvoer op te geven aan de Mesh-invoegtoepassing van de Istio-service met behulp van de az keyvault create opdracht. Als u al een Azure Key Vault-exemplaar hebt, kunt u deze stap overslaan.

    az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATION
    
  2. Schakel de Azure Key Vault-provider in voor de invoegtoepassing Secrets Store (CSI) op uw cluster met behulp van de az aks enable-addons opdracht.

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  3. Als uw sleutelkluis gebruikmaakt van op rollen gebaseerd toegangsbeheer van Azure (RBAC) voor het machtigingsmodel, volgt u de instructies in Toegang bieden tot Azure Key Vault-sleutels, -certificaten en -geheimen met op rollen gebaseerd toegangsbeheer van Azure om een Azure-rol van Key Vault-geheimengebruiker toe te wijzen voor de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing. Als uw sleutelkluis gebruikmaakt van het machtigingsmodel voor kluistoegangsbeleid, kunt u ook de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing autoriseren voor toegang tot Azure Key Vault-resource met behulp van toegangsbeleid met behulp van de az keyvault set-policy opdracht.

    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. Maak geheimen in Azure Key Vault met behulp van de certificaten en sleutels met behulp van de volgende az keyvault secret set opdrachten:

    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 en voorbeeldpod implementeren

  1. Implementeer de SecretProviderClass om specifieke parameters voor Azure Key Vault op te geven voor het CSI-stuurprogramma met behulp van het volgende manifest. In dit voorbeeld zijn test-httpbin-key en test-httpbin-crt de namen van de geheime objecten in 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
    

    Opmerking

    Als u ook rechtstreeks vanuit Azure Key Vault wilt verwijzen naar een certificaatobjecttype, gebruikt u het volgende manifest om SecretProviderClass te implementeren. In dit voorbeeld test-httpbin-cert-pfx is dit de naam van het certificaatobject in 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. Implementeer een voorbeeldpod met behulp van het volgende manifest. Voor de Azure Key Vault-provider voor de CSI-stuurprogramma-invoegtoepassing (Secrets Store) is een pod vereist om te verwijzen naar de SecretProviderClass-resource om ervoor te zorgen dat geheimen worden gesynchroniseerd vanuit Azure Key Vault naar het cluster.

    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
    

Het maken van TLS-geheim controleren

  • Controleer of de httpbin-credential secret is aangemaakt in de default namespace zoals gedefinieerd in de SecretProviderClass-resource met behulp van de kubectl describe secret opdracht.

    kubectl describe secret/httpbin-credential
    

    Voorbeelduitvoer:

    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-gateway implementeren

  1. Maak een Kubernetes-gateway die verwijst naar het httpbin-credential geheim onder de TLS-configuratie met behulp van het volgende manifest:

    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
    

    Opmerking

    In de gateway-definitie moet tls.certificateRefs.name overeenkomen met secretName in de SecretProviderClass-resource.

  2. Creëer een overeenkomstige HTTPRoute om de routering van inkomend verkeer naar de httpbin-service via HTTPS te configureren met het volgende manifest:

    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. Haal het externe IP-adres van de ingangsgateway en de beveiligde poort op met behulp van de volgende opdrachten:

    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. Een HTTPS-aanvraag verzenden om toegang te krijgen tot de httpbin service:

    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"
    

    In de uitvoer moet de httpbin service de 418 I'm a Teapot code retourneren.

    Opmerking

    Werk de TLS-modus in de gatewaydefinitie bij naar Passthrough om toegang voor inkomend HTTPS-verkeer tot een HTTPS-service te configureren. Met deze configuratie wordt de gateway geïnstrueerd om het inkomend verkeer door te geven zoals dat wel is, zonder TLS te beëindigen.

Aanpassingen aan aantekeningen

U kunt aantekeningen toevoegen onder spec.infrastructure.annotations voor het configureren van load balancer-instellingen voor de Gateway. Als u bijvoorbeeld een interne load balancer wilt maken die is gekoppeld aan een specifiek subnet, kunt u een Gateway met de volgende aantekeningen maken:

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-aanpassingen

De Istio-service mesh-invoegtoepassing ondersteunt het aanpassen van de gegenereerde resources voor de Gateways, waaronder:

  • Dienst
  • Uitrol
  • Horizontale Pod Autoscaler (HPA)
  • Budget voor podonderbreking (PDB)

De standaardinstellingen voor deze resources worden ingesteld in de istio-gateway-class-defaults ConfigMap in de aks-istio-system naamruimte, die wordt ingericht door AKS wanneer de MANAGED Gateway-API-CRD's zijn ingeschakeld, samen met de Istio-invoegtoepassing. Voor deze ConfigMap moet het gateway.istio.io/defaults-for-class label zijn ingesteld op istio om de aanpassingen van kracht te laten worden voor alle Gateways met spec.gatewayClassName: istio. De ConfigMap op GatewayClass-niveau wordt standaard geïnstalleerd in de aks-istio-system namespace wanneer de Managed Gateway-API installatie is ingeschakeld. Het kan vijf minuten duren voordat de istio-gateway-class-defaults ConfigMap is geïmplementeerd na de installatie van de BEHEERDE GATEWAY-API-CRD's.

Opmerking

De istio-gateway-class-defaults ConfigMap wordt ingericht en gesynchroniseerd door AKS wanneer de Managed Gateway API CRD's en de Istio add-on samen zijn ingeschakeld. Als u de istio-gateway-class-defaults ConfigMap eerder zelf in de aks-istio-system naamruimte hebt gemaakt, moet u het zelfbeheerde ConfigMap-exemplaar verwijderen voordat u de MANAGED Gateway-API-CRD's inschakelt om conflicten met afstemming van de door AKS beheerde ConfigMap te voorkomen.

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

U kunt deze instellingen voor alle Istio Gateways op een GatewayClass niveau wijzigen door de istio-gateway-class-defaults ConfigMap bij te werken of u kunt deze instellen voor afzonderlijke Gateway resources. Voor zowel GatewayClass-level als Gateway-level ConfigMapsmoet u velden toevoegen aan de acceptatielijst voor de opgegeven resource. Als er aanpassingen zijn zowel voor de GatewayClass als een individuele Gateway, heeft de Gateway-niveauconfiguratie voorrang.

Lijstvelden voor acceptatielijst voor implementatieaanpassing

Veldpad Description
metadata.labels Implementatielabels
metadata.annotations Aantekeningen bij de implementatie
spec.replicas Aantal implementatiereplica's
spec.template.metadata.labels Podlabels
spec.template.metadata.annotations Podaantekeningen
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms Knooppuntaffiniteit
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution Knooppuntaffiniteit
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution Podaffiniteit
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution Podaffiniteit
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution Antiaffiniteit van pods
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution Antiaffiniteit van pods
spec.template.spec.containers.resizePolicy Gebruik van containerresources
spec.template.spec.containers.resources.limits Gebruik van containerresources
spec.template.spec.containers.resources.requests Gebruik van containerresources
spec.template.spec.containers.stdin Containeropsporing
spec.template.spec.containers.stdinOnce Containeropsporing
spec.template.spec.nodeSelector Podplanning
spec.template.spec.nodeName Podplanning
spec.template.spec.tolerations Podplanning
spec.template.spec.topologySpreadConstraints Podplanning

Lijstvelden toestaan voor serviceaanpassing

Veldpad Description
metadata.labels Servicelabels
metadata.annotations Serviceaantekeningen
spec.type Service-type
spec.loadBalancerSourceRanges Instellingen voor service load balancer
spec.loadBalancerClass Instellingen voor service load balancer
spec.externalTrafficPolicy Beleid voor serviceverkeer
spec.internalTrafficPolicy Beleid voor serviceverkeer

HorizontalPodAutoscaler (HPA) aanpassingen toegestane veldenlijst

Veldpad Description
metadata.labels HPA-labels
metadata.annotations HPA-aantekeningen
spec.behavior.scaleUp.stabilizationWindowSeconds HPA-opschalingsgedrag
spec.behavior.scaleUp.selectPolicy HPA-opschalingsgedrag
spec.behavior.scaleUp.policies HPA-opschalingsgedrag
spec.behavior.scaleDown.stabilizationWindowSeconds Gedrag van HPA bij het verkleinen van de schaal
spec.behavior.scaleDown.selectPolicy Gedrag van HPA bij het verkleinen van de schaal
spec.behavior.scaleDown.policies Gedrag van HPA bij het verkleinen van de schaal
spec.metrics HPA-resources schalen op basis van metrische gegevens
spec.minReplicas Minimum aantal HPA-replica's. Mag niet lager zijn dan 2.
spec.maxReplicas Maximum aantal HPA-replica's

PodDisruptionBudget (PDB) aanpassingslijstvelden toestaan

Veldpad Description
metadata.labels PDB-labels
metadata.annotations PDB-aantekeningen
spec.minAvailable Minimale beschikbaarheid van PDB
spec.unhealthyPodEvictionPolicy Verwijderingsbeleid voor PDB

Opmerking

Het wijzigen van het PDB minimale beschikbaarheids- en verwijderingsbeleid kan leiden tot mogelijke fouten tijdens het upgraden en verwijderen van clusters/knooppunten. Volg de handleiding voor het oplossen van PDB-problemen om UpgradeFailed-fouten als gevolg van PDB evictie-fouten op te lossen.

Instellingen op GatewayClass-niveau configureren

  1. Werk de GatewayClassconfiguratiemap op -niveau bij in de aks-istio-system naamruimte met behulp van de kubectl edit configmap opdracht:

    kubectl edit cm istio-gateway-class-defaults -n aks-istio-system
    
  2. Bewerk de resource-instellingen in de data sectie indien nodig. Als u bijvoorbeeld de HPA min/max replica's wilt bijwerken en een label wilt toevoegen aan de Deploymentreplica, wijzigt u de ConfigMap als volgt:

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

    Opmerking

    Er is slechts één ConfigMap per GatewayClass toegestaan.

  3. Nu zou u de HPA voor httpbin-gateway die u eerder hebt gemaakt, bijgewerkt moeten zien worden met de nieuwe min/max-waarden. Controleer de HPA instellingen met behulp van de kubectl get hpa opdracht.

    kubectl get hpa httpbin-gateway-istio
    

    Voorbeelduitvoer:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   3         6         3          36m
    
  4. Controleer of het Deployment is bijgewerkt met het nieuwe label met behulp van de kubectl get deployment opdracht.

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

    Voorbeelduitvoer:

    updated
    

Instellingen configureren voor een specifieke gateway

  1. Maak een ConfigMap met resourceaanpassingen voor de httpbin gateway met behulp van het volgende manifest:

    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. Werk httpbinGateway bij zodat deze verwijst naar de ConfigMap.

    spec:
      # ... existing spec content ...
      infrastructure:
        parametersRef:
          group: ""
          kind: ConfigMap
          name: gw-options
    
  3. Pas de update toe met behulp van de kubectl apply opdracht.

    kubectl apply -f httpbin-gateway-updated.yaml
    
  4. Controleer of de HPA waarde is bijgewerkt met de nieuwe min/max-waarden met behulp van de kubectl get hpa opdracht. Als u ook de GatewayClass-niveau configuratiemap hebt geconfigureerd, moeten de Gateway-niveau instellingen voorrang hebben.

    kubectl get hpa httpbin-gateway-istio
    

    Voorbeelduitvoer:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   2         4         2          4h14m
    
  5. Controleer de Deployment labels om ervoor te zorgen dat de test.azureservicemesh.io/deployment-config waarde wordt bijgewerkt naar de nieuwe waarde met behulp van de kubectl get deployment opdracht.

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

    Voorbeelduitvoer:

    updated-per-gateway
    

De hulpbronnen opschonen

Als u de resources die in dit artikel zijn gemaakt niet meer nodig hebt, kunt u ze verwijderen om te voorkomen dat er kosten in rekening worden gebracht.

  1. Verwijder de gateway- en HTTPRoute-resources met behulp van de volgende kubectl delete opdrachten:

    kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
    kubectl delete httproute httpbin
    
  2. Als u een ConfigMap hebt gemaakt om uw gateway-resources aan te passen, verwijdert u deze met behulp van de kubectl delete configmap opdracht.

    kubectl delete configmap gw-options
    
  3. Als u een SecretProviderClass en een geheim voor TLS-beëindiging hebt gemaakt, verwijdert u de resources met behulp van de volgende kubectl delete opdrachten:

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