Aracılığıyla paylaş


Azure Kubernetes Service (AKS) için Kubernetes Gateway API'siyle Istio girişi yapılandırma (önizleme)

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Istio hizmet ağı eklentisi hem Istio'nun kendi giriş trafik yönetimi API'sini hem de giriş trafiği yönetimi için Kubernetes Gateway API'sini destekler. Istio Gateway API'sinin otomatik dağıtım modelini veya el ile dağıtım modelini kullanabilirsiniz. Bu makalede, Otomatik dağıtım modeliyle Kubernetes Gateway API'sini kullanarak Istio hizmet ağı eklentisi için giriş trafiği yönetiminin nasıl yapılandırıldığı açıklanmaktadır.

Sınırlamalar ve Dikkat Edilecek Hususlar

  • Istio hizmet mesh eklentisiyle çıkış trafiği yönetimi için Kubernetes Gateway API'sinin kullanılması yalnızca el ile dağıtım modeli için desteklenir.
  • Kaynaklar için Gateway ConfigMap özelleştirmeleri Kaynak özelleştirmesine izin ver listesinde yer almalıdır. İzin listesinde olmayan alanlara izin verilmez ve eklenti tarafından yönetilen web bağlantı kancaları aracılığıyla engellenir. Daha fazla bilgi için istio hizmet ağı eklentisi destek ilkesine bakın.

Önkoşullar

Ortam değişkenlerini belirleme

Bu makale boyunca kullanılacak aşağıdaki ortam değişkenlerini ayarlayın:

Variable Description
RESOURCE_GROUP AKS kümenizi içeren kaynak grubunun adı.
CLUSTER_NAME AKS kümenizin adı.
LOCATION AKS kümenizin dağıtıldığı Azure bölgesi.
KEY_VAULT_NAME TLS gizli dizilerini depolamak için oluşturulacak Azure Key Vault kaynağının adı. Mevcut bir kaynağınız varsa bu adı kullanın.

Örnek uygulamayı dağıtın

  • kubectl apply komutunu kullanarak default ad alanında httpbin örnek uygulamayı dağıtın.

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

Kubernetes Gateway ve HTTPRoute oluşturma

Örnek bildirim, küme dışından erişilebilen bir dış giriş yük dengeleyici hizmeti oluşturur. İç yük dengeleyici oluşturmak ve diğer yük dengeleyici ayarlarını özelleştirmek için ek açıklamalar ekleyebilirsiniz.

  • Aşağıdaki bildirimi kullanarak, default ad alanında istio ayarlanan ve HTTPRoute ile trafiği httpbin hizmetine yönlendiren bir Ağ Geçidi API yapılandırmasını dağıtın:

    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
    

    Uyarı

    Alt düzeltme yükseltmesi gerçekleştiriyorsanız ve kümenizde aynı anda iki Istio hizmet mesh eklenti düzeltmesi yüklüyse, daha yüksek olan alt düzeltmeye ait denetim düzlemi varsayılan olarak Gateways'in sahipliğini alır. Kontrol düzlemi revizyonlarından hangisinin onu sahiplendiğini kontrol etmek için istio.io/rev etiketini Gateway öğesine ekleyebilirsiniz. Düzeltme etiketini eklerseniz, geri dönmeden veya yükseltme işlemini tamamlamadan önce uygun kontrol düzlemi düzeltmesine uygun şekilde güncelleştirdiğinizden emin olun.

Kaynak oluşturmayı doğrulama

  • , Deployment, Serviceve HorizontalPodAutoscaler kaynaklarının PodDisruptionBudgetaşağıdaki kubectl get komutlar kullanılarak oluşturulduğunu doğrulayın:

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

    Örnek çıkış:

    # 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
    

Örnek uygulamaya istek gönderme

  1. curl isteğini httpbin uygulamasına göndermeyi deneyin. İlk olarak ortam değişkenini INGRESS_HOST ayarlayın:

    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. adresine bir HTTP isteği göndermeyi httpbindeneyin.

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

    Çıktıda bir HTTP 200 yanıt görmeniz gerekir.

Kubernetes Gateway API'siyle Istio giriş trafiğinin güvenliğini sağlama

Istio hizmet ağı eklentisi, Aktarım Katmanı Güvenliği (TLS) sonlandırma veya Sunucu Adı Göstergesi (SNI) geçişi ile Ağ Geçidi API tabanlı giriş trafiğinin güvenliğini sağlamak için Azure Key Vault'tan gizli anahtarların eşitlenmesini destekler. Aşağıdaki bölümlerde, Azure Key Vault'taki gizli dizileri Secrets Store CSI Sürücüsü eklentisi için Azure Key Vault sağlayıcısını kullanarak AKS kümenize senkronize eder ve TLS, giriş ağ geçidinde sonlandırılır.

İstemci/sunucu sertifikaları ve anahtarları oluşturma

  1. Örnek hizmetler için sertifikaları imzalamak için bir kök sertifika ve özel anahtar oluşturun:

    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. için httpbin.example.combir sertifika ve özel anahtar oluşturun:

    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'u ayarlayın ve sırlar oluşturun

  1. komutunu kullanarak az keyvault create Istio hizmet ağı eklentisine sertifika ve anahtar girişleri sağlamak için bir Azure Key Vault örneği oluşturun. Zaten bir Azure Key Vault örneğiniz varsa bu adımı atlayabilirsiniz.

    az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATION
    
  2. komutunu kullanarak kümenizde Gizli Dizi Deposu (CSI) Sürücüsü eklentisi için Azure Key Vault sağlayıcısınıaz aks enable-addons etkinleştirin.

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  3. Anahtar kasanız izin modeli için Azure rol tabanlı erişim denetimi (RBAC) kullanıyorsa, eklentinin kullanıcı tarafından atanan yönetilen kimliği için Key Vault Gizli Dizileri Kullanıcısı'nın Azure rolünü atamak üzere Azure rol tabanlı erişim denetimiyle Azure Key Vault anahtarlarına, sertifikalarına ve gizli dizilerine erişim sağlama başlığındaki yönergeleri izleyin. Alternatif olarak, anahtar kasanızın kasa erişim ilkesi izinleri modelini kullanması durumunda, az keyvault set-policy komutunu kullanarak, eklentinin kullanıcı tarafından atanan yönetilen kimliğini Azure Key Vault kaynağına erişim için yetkilendirin.

    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. Aşağıdaki az keyvault secret set komutlarını kullanarak sertifikalar ve anahtarlar ile Azure Key Vault'ta gizli bilgiler oluşturun.

    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 ve örnek bir pod’u dağıtın

  1. Aşağıdaki bildirimi kullanarak CSI sürücüsüne Azure Key Vault'a özgü parametreler sağlamak için SecretProviderClass'ı dağıtın. Bu örnekte test-httpbin-key ve test-httpbin-crt Azure Key Vault'taki gizli nesnelerin adlarıdır.

    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
    

    Uyarı

    Alternatif olarak, doğrudan Azure Key Vault'tan bir sertifika nesne türüne başvurmak için SecretProviderClass'ı dağıtmak için aşağıdaki bildirimi kullanın. Bu örnekte, test-httpbin-cert-pxf Azure Key Vault'taki sertifika nesnesinin adıdır.

    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. Aşağıdaki bildirimi kullanarak örnek bir pod dağıtın. Sırlar Deposu (CSI) Sürücüsü için Azure Key Vault sağlayıcısı, sırların Azure Key Vault'tan kümeye eşitlenmesini sağlamak amacıyla bir podun SecretProviderClass kaynağına başvurmasını gerektirir.

    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 gizli anahtar oluşturulmasını doğrulama

  • httpbin-credential komutunu kullanarak, SecretProviderClass kaynağında tanımlandığı şekilde default ad alanında gizli anahtarın oluşturulup oluşturulmadığını doğrulayın.

    kubectl describe secret/httpbin-credential
    

    Örnek çıkış:

    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 Ağ Geçidi Dağıtın

  1. Aşağıdaki bildirimi kullanarak httpbin-credential sırrına başvuran, TLS yapılandırması altında bir Kubernetes Ağ Geçidi oluşturun.

    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
    

    Uyarı

    Ağ geçidi tanımında, tls.certificateRefs.name In SecretProviderClass kaynağıyla secretName eşleşmelidir.

  2. Aşağıdaki bildirimi kullanarak HTTPS üzerinden httpbin servisine giriş trafiğini yönlendirmek için karşılık gelen bir HTTPRoute yapılandırın.

    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. Aşağıdaki komutları kullanarak giriş ağ geçidinin dış IP adresini ve güvenli bağlantı noktasını alın:

    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. Hizmete erişmek httpbin için bir HTTPS isteği gönderin:

    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"
    

    Çıkışta httpbin hizmetin 418 I'm a Teapot kodunu döndürdüğünü göstermelidir.

    Uyarı

    HTTPS hizmetine HTTPS giriş erişimini yapılandırmak için ağ geçidi tanımındaki TLS modunu olarak Passthroughgüncelleştirin. Bu yapılandırma, ağ geçidine TLS'yi sonlandırmadan giriş trafiğini olduğu gibi geçirmesini bildirir.

Açıklama özelleştirmeleri

spec.infrastructure.annotations altına yük dengeleyici ayarlarını yapılandırmak içinGateway. Örneğin, belirli bir alt ağa bağlı bir iç yük dengeleyici oluşturmak için aşağıdaki ek açıklamalarla bir Gateway oluşturabilirsiniz:

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 özelleştirmeleri

Istio servis ağı eklentisi, oluşturulan kaynaklar için Gateways özelleştirmeleri destekler:

  • Hizmet
  • Dağıtım
  • Yatay Pod Otomatik Ölçeklendiricisi (HPA)
  • Pod Kesintisi Bütçesi (PDB)

Bu kaynakların varsayılan ayarları ad alanında ConfigMap'te istio-gateway-class-defaults ayarlanıraks-istio-system. Bu ConfigMap'in etiketi, gateway.istio.io/defaults-for-class ile tüm istio için özelleştirmelerin etkili olması amacıyla Gateways etiketine spec.gatewayClassName: istio olarak ayarlanmalıdır. GatewayClass-seviyesinde ConfigMap, aks-istio-system etkinleştirildiğinde ad alanına varsayılan olarak yüklenir. Yönetilen Ağ Geçidi API'leri istio-gateway-class-defaults CRD'lerini yükledikten sonra ConfigMap'in dağıtılma süresi beş dakika kadar sürebilir.

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

ConfigMap'i güncelleyerek tüm Istio GatewaysGatewayClass düzeyinde bu ayarları değiştirebilir veya bunları tek tek Gateway kaynaklar için ayarlayabilirsiniz. Hem GatewayClass-level hem de Gateway-level ConfigMaps için, verilen kaynağın izin verilenler listesine alanlar eklemelisiniz. Eğer hem GatewayClass hem de tek bir Gateway için özelleştirmeler varsa, Gateway seviyesindeki yapılandırma önceliklidir.

Dağıtım özelleştirme izin listesi alanları

Alan yolu Description
metadata.labels Dağıtım etiketleri
metadata.annotations Dağıtım ek açıklamaları
spec.replicas Dağıtım replika sayısı
spec.template.metadata.labels Pod etiketleri
spec.template.metadata.annotations Pod ek açıklamaları
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms Düğüm benzitesi
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution Düğüm benzitesi
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution Pod benzimliği
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution Pod benzimliği
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution Pod benzeşimi önleme
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution Pod benzeşimi önleme
spec.template.spec.containers.resizePolicy Kapsayıcı kaynak kullanımı
spec.template.spec.containers.resources.limits Kapsayıcı kaynak kullanımı
spec.template.spec.containers.resources.requests Kapsayıcı kaynak kullanımı
spec.template.spec.containers.stdin Kapsayıcı hata ayıklama
spec.template.spec.containers.stdinOnce Kapsayıcı hata ayıklama
spec.template.spec.nodeSelector Pod zamanlama
spec.template.spec.nodeName Pod zamanlama
spec.template.spec.tolerations Pod zamanlama
spec.template.spec.topologySpreadConstraints Pod zamanlama

Hizmet özelleştirme izin listesi alanları

Alan yolu Description
metadata.labels Hizmet etiketleri
metadata.annotations Hizmet açıklama notları
spec.type Hizmet türü
spec.loadBalancerSourceRanges Hizmet yük dengeleyici ayarları
spec.loadBalancerClass Hizmet yük dengeleyici ayarları
spec.externalTrafficPolicy Hizmet trafiği ilkesi
spec.internalTrafficPolicy Hizmet trafiği ilkesi

HorizontalPodAutoscaler (HPA) özelleştirmesi izin listesi alanları

Alan yolu Description
metadata.labels HPA etiketleri
metadata.annotations HPA ek açıklamaları
spec.behavior.scaleUp.stabilizationWindowSeconds HPA ölçek genişletme davranışı
spec.behavior.scaleUp.selectPolicy HPA ölçek genişletme davranışı
spec.behavior.scaleUp.policies HPA ölçek genişletme davranışı
spec.behavior.scaleDown.stabilizationWindowSeconds HPA ölçeği azaltma davranışı
spec.behavior.scaleDown.selectPolicy HPA ölçeği azaltma davranışı
spec.behavior.scaleDown.policies HPA ölçeği azaltma davranışı
spec.metrics HPA kaynak ölçümlerini ölçeklendirme
spec.minReplicas HPA asgari replika sayısı. 2'nin altında olmamalıdır.
spec.maxReplicas HPA maksimum kopya sayısı

PodDisruptionBudget (PDB) özelleştirmesi izin verilen liste alanları

Alan yolu Description
metadata.labels PDB etiketleri
metadata.annotations PDB ek açıklamaları
spec.minAvailable PDB minimum düzeyde kullanılabilirlik
spec.unhealthyPodEvictionPolicy PDB çıkarma politikası

Uyarı

En düşük kullanılabilirlik ve çıkarma ilkesinin PDB değiştirilmesi, küme/düğüm yükseltme ve silme işlemleri sırasında olası hatalara yol açabilir. Çıkarma hatalarından kaynaklanan UpgradeFailed hatalarını gidermek için PDB izleyin.

GatewayClass düzeyi ayarlarını yapılandırma

  1. GatewayClass komutunu kubectl edit configmap kullanarak aks-istio-system adlı namespace'inde aks-istio-system-level ConfigMap'i güncelleyin.

    kubectl edit cm istio-gateway-class-defaults -n aks-istio-system
    
  2. Bölümdeki data kaynak ayarlarını gerektiği gibi düzenleyin. Örneğin, HPA min/maks çoğaltmaları güncellemek ve Deployment öğesine etiket eklemek için ConfigMap'i aşağıdaki gibi değiştirebilirsiniz:

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

    Uyarı

    GatewayClass için yalnızca bir tane ConfigMap'e izin verilir.

  3. Artık, daha önce oluşturduğunuz httpbin-gateway için HPA’in yeni min/maks değerlerle güncellendiğini görmelisiniz. HPA komutunu kullanarak kubectl get hpa ayarları doğrulayın.

    kubectl get hpa httpbin-gateway-istio
    

    Örnek çıkış:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   3         6         3          36m
    
  4. Deployment komutunu kullanarak kubectl get deployment yeni etiketle güncelleştirildiğinden emin olun.

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

    Örnek çıkış:

    updated
    

Belirli bir ağ geçidi için ayarları yapılandırma

  1. Aşağıdaki bildirimi kullanarak Ağ Geçidi için httpbin kaynak özelleştirmeleri içeren bir ConfigMap oluşturun:

    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. ConfigMap'i referans almak için httpbinGateway güncelleyin :

    spec:
      # ... existing spec content ...
      infrastructure:
        parametersRef:
          group: ""
          kind: ConfigMap
          name: gw-options
    
  3. komutunu kullanarak kubectl apply güncelleştirmeyi uygulayın.

    kubectl apply -f httpbin-gateway-updated.yaml
    
  4. HPA değerinin yeni min/maks değerlerle güncellenmiş olduğundan kubectl get hpa komutunu kullanarak emin olun. Eğer GatewayClass seviyesi ConfigMap'i de yapılandırdıysanız, Gateway seviyesi ayarları öncelikli olmalıdır.

    kubectl get hpa httpbin-gateway-istio
    

    Örnek çıkış:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   2         4         2          4h14m
    
  5. Deployment komutunu kullanarak test.azureservicemesh.io/deployment-config yeni değere kubectl get deployment güncelleştirildiğinden emin olmak için etiketleri inceleyin.

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

    Örnek çıkış:

    updated-per-gateway
    

Kaynakları temizle

Bu makalede oluşturulan kaynaklara artık ihtiyacınız yoksa, ücret ödememek için bunları silebilirsiniz.

  1. Aşağıdaki kubectl delete komutları kullanarak Ağ Geçidi ve HTTPRoute kaynaklarını silin:

    kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
    kubectl delete httproute httpbin
    
  2. Komutunu kullanarak kubectl delete configmap, Ağ Geçidi kaynaklarınızı özelleştirmek için oluşturduğunuz ConfigMap'i silin.

    kubectl delete configmap gw-options
    
  3. TLS sonlandırması için kullanılacak bir SecretProviderClass ve gizli dizi oluşturduysanız aşağıdaki kubectl delete komutları kullanarak kaynakları silin:

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