إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تدعم إضافة شبكة الخدمة Istio كل من واجهة برمجة تطبيقات إدارة حركة المرور الخاصة ب Istio وواجهة Kubernetes Gateway لإدارة حركة الدخول. يمكنك استخدام نموذج النشر الآلي لواجهة برمجة تطبيقات Istio Gateway أو نموذج النشر اليدوي. تشرح هذه المقالة كيفية تكوين إدارة حركة المرور الداخلة لإضافة شبكة خدمة Istio باستخدام واجهة برمجة تطبيقات بوابة Kubernetes باستخدام نموذج النشر الآلي.
تحديد الخدمة واعتباراتها
- لا يمكن تفعيل إضافة شبكة خدمة Istio وتنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات في نفس الوقت. يجب عليك تعطيل أحدهما أولا وتفعيل الآخر في عملية منفصلة.
- يتم دعم استخدام واجهة برمجة تطبيقات بوابة Kubernetes لإدارة نسبة استخدام الشبكة للخروج مع الوظيفة الإضافية Istio فقط لنموذج النشر اليدوي.
- يجب أن تندرج تخصيصات ConfigMap للموارد
Gatewayضمن قائمة تصاريح تخصيص الموارد. الحقول غير المدرجة في قائمة السماح تحظر ويتم حظرها عبر webhooks المدارة الإضافية. راجع سياسة دعم الإضافات في Istio لمزيد من المعلومات حولallowed،blocked، والميزاتsupported. - إعداد الوصول إلى خدمات HTTPS - أي إشارة اسم الخادم (SNI) - عبر
TLSRouteالمورد غير مدعوم في تعديلasm-1-29إضافة شبكة خدمة Istio. سيكون الدعم للموردTLSRouteمتاحا لمراجعةasm-1-30إضافات شبكة خدمة Istio وما بعدها.
المتطلبات الأساسية
- قم بتمكين واجهة برمجة تطبيقات البوابة المدارة على مجموعة AKS الخاصة بك.
- قم بتثبيت تعديل
asm-1-26أو إصدار من إضافة شبكة خدمة Istio أو أعلى. اتبع دليل التثبيت إذا لم يكن لديك إضافة شبكة خدمة Istio مثبتة بعد، أو دليل الترقية إذا كنت في نسخة أقل صغرا.
تعيين متغيرات البيئة
قم بتعيين المتغيرات البيئية التالية لاستخدامها طوال هذا المقال:
| 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
إرسال طلب إلى نموذج الطلب
حاول إرسال طلب
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}')حاول إرسال طلب 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 عند بوابة الدخول.
إنشاء شهادات ومفاتيح العميل/الخادم
إنشاء شهادة جذر ومفتاح خاص لتوقيع الشهادات لنماذج الخدمات:
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إنشاء شهادة ومفتاح خاص ل
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 وإنشاء الأسرار
أنشئ مثيل Azure Key Vault لتوفير الشهادة ومدخلات المفاتيح إلى إضافة شبكة خدمة Istio باستخدام أمر
az keyvault create. إذا كان لديك بالفعل نسخة Azure Key Vault، يمكنك تخطي هذه الخطوة.az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATIONفعل مزود
Azure Key Vault لإضافة برنامج تشغيل Secrets Store (CSI) ><على مجموعتك باستخدام أمر . az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEإذا كان 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إنشاء الأسرار في 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 ووحدة عينات
نشر 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نشر وحدة عينة باستخدام البيان التالي. يتطلب مزود 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
أنشئ بوابة 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 الموجود.إنشاء ملف مقابل
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احصل على عنوان 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}')أرسل طلب 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
قم بتحديث
GatewayClassخريطة التهيئة على مستوى -فيaks-istio-systemمساحة الأسماء باستخدامkubectl edit configmapالأمر:kubectl edit cm istio-gateway-class-defaults -n aks-istio-systemقم بتعديل إعدادات الموارد في القسم
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الآن، يجب أن ترى القيم
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تحقق من
Deploymentتحديث العلامة الجديدة باستخدامkubectl get deploymentالأمر.kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'مثال على الإخراج:
updated
تكوين الإعدادات لبوابة معينة
أنشئ خريطة إعداد مع تخصيص الموارد للبوابة
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قم بتحديث الملف
httpbinGatewayللرجوع إلى ConfigMap:spec: # ... existing spec content ... infrastructure: parametersRef: group: "" kind: ConfigMap name: gw-optionsطبق التحديث باستخدام
kubectl applyالأمر.kubectl apply -f httpbin-gateway-updated.yamlتحقق من
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افحص الملصقات
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
تنظيف الموارد
إذا لم تعد بحاجة إلى الموارد التي تم إنشاؤها في هذا المقال، يمكنك حذفها لتجنب تحمل أي رسوم.
احذف موارد Gateway وHTTPRoute باستخدام الأوامر التالية
kubectl delete:kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway kubectl delete httproute httpbinإذا أنشأت خريطة إعداد لتخصيص موارد البوابة، قم بحذفها باستخدام
kubectl delete configmapالأمر.kubectl delete configmap gw-optionsإذا أنشأت SecretProviderClass وسرا لاستخدامه لإنهاء TLS، احذف الموارد باستخدام الأوامر التالية
kubectl delete:kubectl delete secret httpbin-credential kubectl delete pod secrets-store-sync-httpbin kubectl delete secretproviderclass httpbin-credential-spc