Configure Istio ingress with the Kubernetes Gateway API for خدمة Azure Kubernetes ‏(AKS)

تدعم إضافة شبكة الخدمة Istio كل من واجهة برمجة تطبيقات إدارة حركة المرور الخاصة ب Istio وواجهة Kubernetes Gateway لإدارة حركة الدخول. يمكنك استخدام نموذج النشر الآلي لواجهة برمجة تطبيقات Istio Gateway أو نموذج النشر اليدوي. تشرح هذه المقالة كيفية تكوين إدارة حركة المرور الداخلة لإضافة شبكة خدمة Istio باستخدام واجهة برمجة تطبيقات بوابة Kubernetes باستخدام نموذج النشر الآلي.

تحديد الخدمة واعتباراتها

المتطلبات الأساسية

تعيين متغيرات البيئة

قم بتعيين المتغيرات البيئية التالية لاستخدامها طوال هذا المقال:

Variable الوصف
RESOURCE_GROUP اسم مجموعة الموارد التي تحتوي على عنقود AKS الخاص بك.
CLUSTER_NAME اسم نظام مجموعة AKS الخاص بك.
LOCATION منطقة Azure حيث يتم نشر عنقود AKS الخاص بك.
KEY_VAULT_NAME اسم مورد Azure Key Vault الذي سيتم إنشاؤه لتخزين أسرار TLS. إذا كان لديك مورد موجود، استخدم هذا الاسم.

نشر تطبيق العينة

  • أولا، نشر تطبيق العينة httpbin في default مساحة الأسماء باستخدام kubectl apply الأمر.

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

إنشاء بوابة Kubernetes وHTTPRoute

ينشئ المثال خدمة موازن تحميل خارجية يمكن الوصول إليها من خارج العنقود. يمكنك إضافة تعليقات توضيحية لإنشاء موازن تحميل داخلي وتخصيص إعدادات موازن التحميل الأخرى.

  • قم بنشر تكوين واجهة برمجة تطبيقات البوابة في مساحة default الأسماء مع gatewayClassName تعيين إلى istio و HTTPRoute و يوجه حركة المرور إلى httpbin الخدمة باستخدام البيان التالي:

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

    ملاحظة

    بشكل افتراضي، سيقوم مستوى التحكم في Istio بإضافة GatewayClass الاسم istio إلى اسم الموارد التي يوفرها ل .Gateway يمكنك إضافة تعليقات على موردك Gateway لتجاوز gateway.istio.io/name-override اسم الموارد المخصصة. يجب أن تكون أسماء الموارد أقل من 63 الأحرف ويجب أن تكون أسماء DNS صالحة.

    ملاحظة

    إذا كنت تقوم بترقية بسيطة ولديك نسختان إضافيتان من شبكة خدمة Istio مثبتتان على العدادة في نفس الوقت، فإن مستوى التحكم للنسخة الأعلى الثانوية يأخذ النسخة Gateways الافتراضية من التعديل. يمكنك إضافة التسمية istio.io/rev إلى الملف Gateway للتحكم في مراجعة مستوى التحكم التي تمتلكها. إذا قمت بإضافة تسمية المراجعة، فتأكد من تحديثها وفقا لمراجعة مستوى التحكم المناسبة قبل التراجع عن عملية الترقية أو إكمالها.

تحقق من إنشاء الموارد

  • تحقق من إنشاء ، DeploymentService، ، HorizontalPodAutoscalerوالموارد PodDisruptionBudget باستخدام الأوامر التاليةkubectl get:

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

    مثال على الإخراج:

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

إرسال طلب إلى نموذج الطلب

  1. حاول إرسال طلب curl إلى httpbin التطبيق. أولا، قم بتعيين INGRESS_HOST متغير البيئة:

    kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
    export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -ojsonpath='{.status.addresses[0].value}')
    
  2. حاول إرسال طلب HTTP إلى httpbin.

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

    في المخرج، يجب أن ترى HTTP 200 ردا.

Secure Istio inress traffic باستخدام واجهة Kubernetes Gateway API

تدعم إضافة شبكة خدمة Istio مزامنة الأسرار من Azure Key Vault لتأمين حركة المرور المعتمدة على واجهة برمجة تطبيقات البوابة مع Transport Layer Security (TLS) إنهاء الخاتمة. في الأقسام التالية، تقوم بمزامنة الأسرار من Azure Key Vault إلى عنقود AKS الخاص بك باستخدام مزود Azure Key Vault لإضافة برنامج تشغيل واجهة تخزين الحاويات (CSI) للأسرار وتنهي TLS عند بوابة الدخول.

إنشاء شهادات ومفاتيح العميل/الخادم

  1. إنشاء شهادة جذر ومفتاح خاص لتوقيع الشهادات لنماذج الخدمات:

    mkdir httpbin_certs
    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=example Inc./CN=example.com' -keyout httpbin_certs/example.com.key -out httpbin_certs/example.com.crt
    
  2. إنشاء شهادة ومفتاح خاص ل httpbin.example.com:

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

Set up Azure Key Vault وإنشاء الأسرار

  1. أنشئ مثيل Azure Key Vault لتوفير الشهادة ومدخلات المفاتيح إلى إضافة شبكة خدمة Istio باستخدام أمر az keyvault create. إذا كان لديك بالفعل نسخة Azure Key Vault، يمكنك تخطي هذه الخطوة.

    az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATION
    
  2. فعل مزود Azure Key Vault لإضافة برنامج تشغيل Secrets Store (CSI) ><على مجموعتك باستخدام أمر .

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  3. إذا كان key vault يستخدم Azure التحكم في الوصول القائم على الأدوار (RBAC) لنموذج الأذونات، اتبع التعليمات في توفير الوصول إلى مفاتيح Azure Key Vault والشهادات والأسرار مع Azure التحكم في الوصول القائم على الدور لتعيين دور Azure ل Key Vault Secrets User للهوية المدارة المعينة من قبل الإضافة الإضافية. بدلا من ذلك، إذا كان خزنة المفاتيح الخاصة بك تستخدم نموذج سياسة صلاحيات الوصول إلى القزنة، قم بتفويض الهوية المدارة المعينة من قبل المستخدم للإضافة للوصول إلى Azure Key Vault المورد باستخدام سياسة الوصول باستخدام أمر az keyvault set-policy.

    OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId' -o tsv | tr -d '\r')
    CLIENT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.clientId')
    TENANT_ID=$(az keyvault show --resource-group $RESOURCE_GROUP --name $KEY_VAULT_NAME --query 'properties.tenantId')
    
    az keyvault set-policy --name $KEY_VAULT_NAME --object-id $OBJECT_ID --secret-permissions get list
    
  4. إنشاء الأسرار في Azure Key Vault باستخدام الشهادات والمفاتيح باستخدام أوامر az keyvault secret set التالية:

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

نشر SecretProviderClass ووحدة عينات

  1. نشر SecretProviderClass لتوفير معلمات خاصة ب Azure Key Vault لتعريف CSI باستخدام البيان التالي. في هذا المثال، test-httpbin-key و test-httpbin-crt هما أسماء الكائنات السرية في Azure Key Vault.

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

    ملاحظة

    بدلا من ذلك، للإشارة إلى نوع كائن شهادة مباشرة من Azure Key Vault، استخدم البيان التالي لنشر SecretProviderClass. في هذا المثال، test-httpbin-cert-pfx هو اسم كائن الشهادة في 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. نشر وحدة عينة باستخدام البيان التالي. يتطلب مزود Azure Key Vault لبرنامج تشغيل Secrets Store (CSI) إضافة وحدة للإشارة إلى مورد SecretProviderClass لضمان مزامنة الأسرار من Azure Key Vault إلى العنقود.

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

تحقق من إنشاء سر TLS

  • تحقق من إنشاء السر httpbin-credential في مساحة الأسماء default كما هو معرف في مورد SecretProviderClass باستخدام kubectl describe secret الأمر.

    kubectl describe secret/httpbin-credential
    

    مثال على الإخراج:

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

نشر بوابة TLS

  1. أنشئ بوابة Kubernetes تشير إلى السر httpbin-credential تحت تكوين TLS باستخدام البيان التالي:

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

    ملاحظة

    في تعريف البوابة، tls.certificateRefs.name يجب أن يتطابق مع secretName مورد SecretProviderClass الموجود.

  2. إنشاء ملف مقابل HTTPRoute لتكوين توجيه حركة المرور الداخلة إلى httpbin الخدمة عبر HTTPS باستخدام البيان التالي:

    cat <<EOF | kubectl apply -f -
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: httpbin
    spec:
      parentRefs:
      - name: httpbin-gateway
      hostnames: ["httpbin.example.com"]
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /status
        - path:
            type: PathPrefix
            value: /delay
        backendRefs:
        - name: httpbin
          port: 8000
    EOF
    
  3. احصل على عنوان IP خارجي لبوابة الدخول ومنفذ آمن باستخدام الأوامر التالية:

    kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
    export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -o jsonpath='{.status.addresses[0].value}')
    export SECURE_INGRESS_PORT=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -o jsonpath='{.spec.listeners[?(@.name=="https")].port}')
    
  4. أرسل طلب HTTPS للوصول إلى الخدمة httpbin :

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

    يجب أن يظهر الناتج أن httpbin الخدمة تعيد رمز 418 I'm Teapot .

    ملاحظة

    لتكوين وصول HTTPS إلى خدمة HTTPS، قم بتحديث وضع TLS في تعريف البوابة إلى Passthrough. يوجه هذا التكوين البوابة لتمرير حركة المرور الداخلة كما هي، دون إنهاء TLS.

تخصيصات التعليقات التوضيحية

يمكنك إضافة تعليقات توضيحية ضمن spec.infrastructure.annotationsلتكوين إعدادات موازن التحميل ل .Gateway على سبيل المثال، لإنشاء موازن تحميل داخلي متصل بشبكة فرعية محددة، يمكنك إنشاء ملف Gateway يحتوي على التعليقات التالية:

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

تخصيصات ConfigMap

تدعم إضافة شبكة خدمة Istio تخصيص الموارد التي تم إنشاؤها ل Gateways، بما في ذلك:

  • الخدمة
  • التوزيع
  • أداة التحجيم التلقائي للجراب الأفقية (HPA)
  • ميزانية تعطيل الكبسولات (PDB)

يتم تعيين الإعدادات الافتراضية لهذه الموارد في istio-gateway-class-defaults خريطة الإعدادات في مساحة الاسم aks-istio-system ، والتي يتم توفيرها بواسطة AKS عند تفعيل CRDs API لواجهة برمجة التطبيقات Managed Gateway مع إضافة Istio. يجب أن يحتوي ConfigMap هذا على gateway.istio.io/defaults-for-class التسمية المعينة إلى istio حتى تصبح التخصيصات سارية المفعول للجميع Gateways باستخدام spec.gatewayClassName: istio. GatewayClassيتم تثبيت ConfigMap على المستوى افتراضيا في مساحة الاسم aks-istio-system عند تمكين تثبيت واجهة برمجة تطبيقات البوابة المدارة. قد يستغرق نشر ConfigMap حتى خمس دقائق istio-gateway-class-defaults بعد تثبيت CRDs API Managed Gateway.

ملاحظة

istio-gateway-class-defaults يتم توفير خريطة التهيئة وتوفيقها بواسطة AKS عندما يتم تفعيل CRDs API وإضافة Istio معا. إذا كنت قد أنشأت istio-gateway-class-defaults ConfigMap سابقا في مساحة الأسماء aks-istio-system بنفسك، يجب عليك حذف نسخة ConfigMap المدارة ذاتيا قبل تفعيل CRDs API لبوابة الإدارة لتجنب التعارض مع تسوية ConfigMap المدارة بواسطة 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
...

يمكنك تعديل هذه الإعدادات لكل Istio Gateways على مستوى معين GatewayClass عن طريق تحديث istio-gateway-class-defaults ConfigMap، أو يمكنك تعيينها للموارد الفردية Gateway . لكل من GatewayClassالمستوى -و Gateway-level ConfigMaps، يجب إضافة حقول إلى قائمة السماح للمورد المعطا. إذا كانت هناك تخصيصات لكل من الفرد GatewayClass والفرد Gateway، Gatewayفإن تكوين -level له الأسبقية.

حقول قوائم السماح لتخصيص النشر

مسار الحقل الوصف
metadata.labels تسميات التوزيع
metadata.annotations التعليقات التوضيحية للنشر
spec.minReadySeconds فحص جاهزية الانتشار
spec.replicas عدد النسخ المتماثلة للنشر
spec.template.metadata.labels ملصقات الكبسولات
spec.template.metadata.annotations التعليقات التوضيحية للجراب
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms تقارب العقدة
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution تقارب العقدة
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution تقارب الكبسولة
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution تقارب الكبسولة
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution جراب مضاد للتقارب
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution جراب مضاد للتقارب
spec.template.spec.containers.resizePolicy استخدام موارد الحاوية
spec.template.spec.containers.resources.limits استخدام موارد الحاوية
spec.template.spec.containers.resources.requests استخدام موارد الحاوية
spec.template.spec.containers.stdin تصحيح أخطاء الحاوية
spec.template.spec.containers.stdinOnce تصحيح أخطاء الحاوية
spec.template.spec.nodeSelector جدولة الجراب
spec.template.spec.nodeName جدولة الجراب
spec.template.spec.tolerations جدولة الجراب
spec.template.spec.topologySpreadConstraints جدولة الجراب
spec.template.spec.terminationGracePeriodSeconds دورة حياة الكبسولة

حقول قائمة السماح لتخصيص الخدمة

مسار الحقل الوصف
metadata.labels ملصقات الخدمة
metadata.annotations التعليقات التوضيحية للخدمة
spec.type نوع الخدمة
spec.loadBalancerSourceRanges إعدادات موازن تحميل الخدمة
spec.loadBalancerClass إعدادات موازن تحميل الخدمة
spec.externalTrafficPolicy سياسة حركة مرور الخدمة
spec.internalTrafficPolicy سياسة حركة مرور الخدمة
spec.healthCheckNodePort إعدادات فحص الصحة الخدمية

حقول قائمة السماح لتخصيص HorizontalPodAutoscaler (HPA)

مسار الحقل الوصف
metadata.labels ملصقات HPA
metadata.annotations التعليقات التوضيحية HPA
spec.behavior.scaleUp.stabilizationWindowSeconds سلوك توسيع HPA
spec.behavior.scaleUp.selectPolicy سلوك توسيع HPA
spec.behavior.scaleUp.policies سلوك توسيع HPA
spec.behavior.scaleDown.stabilizationWindowSeconds سلوك تقليص HPA
spec.behavior.scaleDown.selectPolicy سلوك تقليص HPA
spec.behavior.scaleDown.policies سلوك تقليص HPA
spec.metrics مقاييس موارد تحجيم HPA
spec.minReplicas الحد الأدنى لعدد النسخ المتماثلة HPA. يجب ألا يقل عن 2.
spec.maxReplicas الحد الأقصى لعدد النسخ المتماثلة HPA

حقول قائمة السموح الخاصة بتخصيص PodDisruptionBudget (PDB)

مسار الحقل الوصف
metadata.labels ملصقات PDB
metadata.annotations التعليقات التوضيحية PDB
spec.minAvailable الحد الأدنى من توفر PDB
spec.unhealthyPodEvictionPolicy سياسة الإخلاء PDB

ملاحظة

يمكن أن يؤدي تعديل الحد الأدنى من PDB التوفر وسياسة الإخلاء إلى أخطاء محتملة أثناء عمليات ترقية وحذف نظام المجموعة/العقدة. اتبع دليل استكشاف أخطاء PDB لمعالجة أخطاء UpgradeFailed الناتجة عن PDB فشل الإخلاء.

تكوين الإعدادات على مستوى GatewayClass

  1. قم بتحديث GatewayClassخريطة التهيئة على مستوى -في aks-istio-system مساحة الأسماء باستخدام kubectl edit configmap الأمر:

    kubectl edit cm istio-gateway-class-defaults -n aks-istio-system
    
  2. قم بتعديل إعدادات الموارد في القسم data حسب الحاجة. على سبيل المثال، لتحديث نسخ HPA للحد الأدنى/الأقصى وإضافة تسمية إلى ، Deploymentقم بتعديل ConfigMap كما يلي:

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

    ملاحظة

    يسمح ب ConfigMap واحد فقط لكل GatewayClass

  3. الآن، يجب أن ترى القيم HPA التي httpbin-gateway أنشأتها سابقا يتم تحديثها بقيم الحد الأدنى والحد الأقصى الجديدة. تحقق من الإعدادات HPA باستخدام kubectl get hpa الأمر.

    kubectl get hpa httpbin-gateway-istio
    

    مثال على الإخراج:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   3         6         3          36m
    
  4. تحقق من Deployment تحديث العلامة الجديدة باستخدام kubectl get deployment الأمر.

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

    مثال على الإخراج:

    updated
    

تكوين الإعدادات لبوابة معينة

  1. أنشئ خريطة إعداد مع تخصيص الموارد للبوابة httpbin باستخدام البيان التالي:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: gw-options
    data:
      horizontalPodAutoscaler: |
        spec:
          minReplicas: 2
          maxReplicas: 4
      deployment: |
        metadata:
          labels:
            test.azureservicemesh.io/deployment-config: "updated-per-gateway"
    EOF
    
  2. قم بتحديث الملف httpbinGateway للرجوع إلى ConfigMap:

    spec:
      # ... existing spec content ...
      infrastructure:
        parametersRef:
          group: ""
          kind: ConfigMap
          name: gw-options
    
  3. طبق التحديث باستخدام kubectl apply الأمر.

    kubectl apply -f httpbin-gateway-updated.yaml
    
  4. تحقق من HPA تحديث القيم الجديدة للقيم الصغرى والقصوى باستخدام الأمر kubectl get hpa . إذا قمت أيضا بتكوين GatewayClassخريطة التهيئة على مستوى -، Gatewayيجب أن تكون إعدادات -level هي الأولوية.

    kubectl get hpa httpbin-gateway-istio
    

    مثال على الإخراج:

    NAME                    REFERENCE                          TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
    httpbin-gateway-istio   Deployment/httpbin-gateway-istio   cpu: 3%/80%   2         4         2          4h14m
    
  5. افحص الملصقات Deployment للتأكد من test.azureservicemesh.io/deployment-config أنها محدثة إلى القيمة الجديدة باستخدام kubectl get deployment الأمر.

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

    مثال على الإخراج:

    updated-per-gateway
    

تمكين سجلات الوصول لوحدات البوابة

Telemetry يتم تثبيت CRDs تلقائيا مع إضافة Istio. يمكنك استخدام ال لتكوين Telemetry API تسجيل الوصول للكبسولات Gateway .

أنشئ المورد في aks-istio-system مساحة الأسماء لتمكين سجلات الوصول لجميع Gateway الكبسولات في الشبكة، أو في مساحة أسماء محددة لتمكين سجلات الوصول فقط للكبسولات Gateway في تلك الفضاء.

المثال التالي يوضح موردا Telemetry يتيح Gateway تسجيل الوصول:

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

ملاحظة

يتيح البيان أعلاه تسجيل الوصول عبر الشبكة بأكملها، سواء للكبسولات Gateway أو للوكلاء الجانبيين الذين يحقنها إستيو. استخدم المحددات لاستهداف الكبسولات المحددة. راجع وثائق إضافة Istio لمزيد من التفاصيل حول كيفية تكوين تسجيل الوصول باستخدام .Telemetry API

تنظيف الموارد

إذا لم تعد بحاجة إلى الموارد التي تم إنشاؤها في هذا المقال، يمكنك حذفها لتجنب تحمل أي رسوم.

  1. احذف موارد Gateway وHTTPRoute باستخدام الأوامر التالية kubectl delete :

    kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
    kubectl delete httproute httpbin
    
  2. إذا أنشأت خريطة إعداد لتخصيص موارد البوابة، قم بحذفها باستخدام kubectl delete configmap الأمر.

    kubectl delete configmap gw-options
    
  3. إذا أنشأت SecretProviderClass وسرا لاستخدامه لإنهاء TLS، احذف الموارد باستخدام الأوامر التالية kubectl delete :

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