تكوين الدخول باستخدام واجهة برمجة تطبيقات بوابة Kubernetes عبر إضافة توجيه التطبيقات

تنبيه

أعلنت شبكة Kubernetes SIG ولجنة الاستجابة الأمنية عن التقاعد القادملمشروع Ingress NGINX، مع انتهاء الصيانة في مارس 2026. لا يوجد إجراء فوري اليوم لمجموعات AKS التي تستخدم إضافة توجيه التطبيقات مع NGINX. ستوفر مايكروسوفت دعما رسميا للتصحيحات الأمنية الحرجة لموارد NGINX Ingress الإضافية لتوجيه التطبيقات حتى نوفمبر 2026.

تتوافق AKS مع Kubernetes المتقدمة من خلال الانتقال إلى واجهة برمجة تطبيقات Gateway كمعيار طويل الأمد لإدارة حركة المرور في الداخل والطبقة السابعة. ننصحك بأن تبدأ في تخطيط مسار الهجرة بناء على إعدادك الحالي:

تدعم إضافة توجيه التطبيقات واجهة برمجة تطبيقات بوابة Kubernetes لإدارة حركة المرور الداخلة. واجهة برمجة تطبيقات بوابة كوبيرنتيز هي مجموعة من الموارد التي توفر إطارا موحدا وموجها للأدوار وقابلا للتوسعة لإدارة حركة المرور، صممت لتكون خليفة وتطورا لواجهة برمجة تطبيقات إنغريس. لذا يهدف تنفيذ واجهة برمجة تطبيقات بوابة التوجيه إلى أن يكون خليفة لإضافة NGINX المدارة ، والتي تعتمد على واجهة برمجة التطبيقات القديمة Ingress وستتوقف عن تلقي دعم Azure من Azure بعد نوفمبر 2026. إذا كنت تستخدم NGINX المدار، يجب عليك الانتقال إلى تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيق، أو تنفيذ مدعوم آخر، بحلول نوفمبر 2026.

يقوم تنفيذ إضافة توجيه التطبيقات في Kubernetes Gateway بنشر مستوى تحكم Istio لإدارة البنية التحتية لموارد واجهة برمجة تطبيقات Kubernetes Gateway. ومع ذلك، يختلف عن إضافة شبكة خدمة Istio لنظام AKS من الجوانب التالية:

الميزة واجهة برمجة تطبيقات بوابة توجيه التطبيقات إضافة شبكة خدمة Istio
اسم فئة البوابة approuting-istio istio
حقن العربة الجانبية ودعم Istio CRD ‏‏غير مدعومة. يدير فقط البنية التحتية لموارد واجهة برمجة تطبيقات Kubernetes Gateway مدعوم
المراجعات والترقيات لم يتم تعديله. تمت ترقيته في مكانه لتحديثات الإصدارات البسيطة والتحديثات تم تعديله. تمت ترقيته عبر ترقيات Canary لتحديثات الإصدارات الطفيفة وتم وضعها في التحديثات الخاصة بإصدار التحديث

القيود

  • لا يمكن تفعيل تنفيذ واجهة برمجة تطبيقات بوابة التوجيه للتطبيقات وإضافة شبكة خدمة إيستيو في نفس الوقت. يجب عليك تعطيل أحدهما أولا وتفعيل الآخر في عملية منفصلة. عند الانتقال من إضافة شبكة خدمة Istio إلى تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات، يجب عليك حذف CRDs من Istio GatewayClass وIstio بعد تعطيل إضافة Istio. تقوم إضافة Istio بتثبيت CRDs (مثل virtualservices.networking.istio.io، destinationrules.networking.istio.io، وغيرها في networking.istio.ioمجموعات ، security.istio.io، telemetry.istio.io، وAPI extensions.istio.io ) التي لا تزال عند تعطيل الإضافة. إذا بقيت هذه الأقراص على العنقود، فإن مستوى التحكم Istio الذي يوجه التطبيق يبدأ. شغل الأمر التالي لحذفها:

    kubectl delete crd $(kubectl get crd -o name | grep -E 'istio\.io')
    kubectl delete gatewayclass istio
    

ملحوظة

إذا كان لديك موارد مخصصة موجودة في Istio (مثل VirtualServices أو DestinationRules)، فإن حذف CRDs سيحذف تلك الموارد أيضا. تأكد من أنك لم تعد بحاجة إليها قبل المتابعة.

  • يستخدم تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات نفس قائمة صلاحيات تخصيص الموارد كما في إضافة Istio للتحقق من تخصيصات ConfigMap للموارد Gateway . التعديلات غير المدرجة في قائمة الصلاحيات يتم حجبها عبر webhooks المدارة الإضافية.
  • إدارة شهادات Azure DNS وTLS عبر إضافة توجيه التطبيقات غير مدعومة حاليا لواجهة Kubernetes Gateway. يمكنك اتباع الخطوات في دليل الدخول الآمن لتنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات لتكوين تنفيذ Gateway إنهاء TLS.
  • إعداد الوصول إلى خدمات HTTPS – أي إشارة اسم الخادم (SNI) Passthrough) – عبر TLSRoute المورد غير مدعوم حاليا. سيكون دعم المورد TLSRoute متاحا بمجرد أن تضيف AKS دعم Istio 1.30، وعندها سيتم ترقية مستوى التحكم الذي يوجه تطبيقك تلقائيا إلى ذلك الإصدار.
  • إدارة حركة المرور الخارجة عبر تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات غير مدعومة.

المتطلبات المسبقه

تحديث Azure CLI edition

يجب استخدام azure-cli الإصدار 2.86.0 أو الإصدارات الأحدث. اركض az --version للعثور على نسختك azure-cli ، واركض az upgrade للترقية.

تمكين CRDs لواجهة برمجة التطبيقات للبوابة المدارة

تفعيل تثبيت واجهة برمجة تطبيقات البوابة المدارة. استخدام CRDs API Gateway المدار ذاتيا مع إضافة توجيه التطبيقات غير مدعوم.

تمكين تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات

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

export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>

تفعيل أثناء إنشاء العنقود

شغل الأمر التالي لتمكين تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيق أثناء إنشاء العنقود:

az aks create --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-app-routing-istio

تمكين مجموعة موجودة

شغل الأمر التالي لتمكين تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيق لمجموعة موجودة:

az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-app-routing-istio

يجب أن ترى istiod الكبسولات في aks-istio-system مساحة الأسماء:

kubectl get pods -n aks-istio-system
NAME                      READY   STATUS    RESTARTS   AGE
istiod-54b4ff45cf-htph8   1/1     Running   0          3m15s
istiod-54b4ff45cf-wlvgd   1/1     Running   0          3m

يجب أن ترى أيضا كيفية نشرها ValidatingWebhookConfiguration :

kubectl get validatingwebhookconfiguration
NAME                                        WEBHOOKS   AGE
aks-node-validating-webhook                 1          117m
azure-service-mesh-ccp-validating-webhook   1          4m2s

إذا كان لديك تثبيت واجهة برمجة تطبيقات البوابة المدارة مفعلة، يجب أن ترى أيضا إنشاء خريطة إعدادات تخصيص بوابة Istio:

kubectl get cm -n aks-istio-system
NAME                                  DATA   AGE
...
istio-gateway-class-defaults          2      43s
...

تكوين الدخول باستخدام بوابة Kubernetes

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

أولا، انشر نموذج httpbin التطبيق في مساحة الاسم default :

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 على approuting-istio.

kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  gatewayClassName: approuting-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 الاسم approuting-istio إلى اسم الموارد التي يوفرها ل .Gateway يمكنك إضافة تعليقات على موردك Gateway لتجاوز gateway.istio.io/name-override اسم الموارد المخصصة. يجب أن تكون أسماء الموارد أقل من 63 الأحرف ويجب أن تكون أسماء DNS صالحة.

تحقق من إنشاء DeploymentServiceملف ، HorizontalPodAutoscaler، PodDisruptionBudgetوhttpbin-gateway:

kubectl get deployment httpbin-gateway-approuting-istio
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
httpbin-gateway-approuting-istio   2/2     2            2           6m41s
kubectl get service httpbin-gateway-approuting-istio
NAME                               TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)                        AGE
httpbin-gateway-approuting-istio   LoadBalancer   10.0.54.96   <external-ip>    15021:30580/TCP,80:32693/TCP   7m13s
kubectl get hpa httpbin-gateway-approuting-istio
NAME                               REFERENCE                                     TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
httpbin-gateway-approuting-istio   Deployment/httpbin-gateway-approuting-istio   cpu: 3%/80%   2         5         2          8m13s
kubectl get pdb httpbin-gateway-approuting-istio
NAME                               MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
httpbin-gateway-approuting-istio   1               N/A               1                     9m1s

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

أخيرا ، حاول إرسال 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 .

ملحوظة

لتأمين حركة المرور الداخلة مع تنفيذ واجهة برمجة تطبيقات بوابة التوجيه التطبيقية، راجع الدليل التالي لمزامنة أسرار Azure Key Vault (AKV) لتأمين حركة مرور الدخول في واجهة برمجة تطبيقات البوابة مع إنهاء TLS.

الإصدار والترقيات

يقوم تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات بنشر وترقية مستوى التحكم Istio بناء على نسخة Kubernetes في عنقود AKS لترقيات الإصدار الثانوي وإصدار التحديث.

نسخة Istio هي النسخة الثانوية الأكثر دعما من Istio والمتوافقة مع نسخة AKS الخاصة بالعنقود. على سبيل المثال، إذا كنت تستخدم نسخة 1.34AKS، فإن الحد الأقصى المدعوم من إصدار Istio minor المثبت (حتى مارس 2026) هو 1.28. ضع في اعتبارك أن الحد الأقصى لإصدار Istio المدعوم لإصدار Kubernetes قد يختلف بين عناقيد دعمLong-Term (LTS) ومجموعات غير LTS.

للعثور على أقصى نسخة فرعية مدعومة من Istio لإصدار AKS Kubernetes الخاص بك، يمكنك التحقق من تقويم إصدارات الشبكة الإضافية الخاصة بالخدمة. بينما لم يتم تعديل تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات، فإن إصدار سطح التحكم الثانوي في إيستيو يتوافق مع مراجعة إضافة شبكة الخدمة المعطاة (على سبيل المثال: بالنسبة لإضافة asm-1-28شبكة الخدمة، فإن إصدار 1.28مستوى التحكم الصغير في مستوى التحكم الخاص ب Istio هو ). يمكنك أيضا رؤية نسخة Istio الثانوية من خلال التحقق من نسخة التصحيح في istiod صورة النشر: kubectl get deployment istiod -n aks-istio-system -o=jsonpath="{.spec.template.spec.containers[*].image}".

Upgrades

تحدث ترقيات إصدار التصحيح والإصدارات الطفيفة لمستوى التحكم Istio لتنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات في المكان. يتم تفعيل ترقيات نسخة التحديث من طائرة التحكم Istio تلقائيا كجزء من إصدارات AKS. يمكن تفعيل ترقيات الإصدارات البسيطة تلقائيا أو يدويا حسب نسخة AKS Kubernetes وتوقيت إصدارات الإصدارات الصغرى من Istio. تحدث ترقيات الإصدار الطفيفة في السيناريوهين التاليين:

  • تم ترقية عنقود AKS إلى إصدار جديد يحتوي على نسخة Istio مدعومة بأقصى حد أعلى مثبتة عليها. سيتم ترقية طائرة التحكم Istio إلى النسخة الصغرى الأعلى كجزء من ترقية مجموعة AKS.
  • تم إصدار نسخة جديدة من Istio لجهاز AKS وهي الآن النسخة الأكثر دعما لإصدار عنقود AKS. سيتم ترقية مستوى التحكم Istio على عنقودك تلقائيا إلى النسخة الجديدة الثانوية بعد نشر الإصدار في منطقتك. اتبع ملاحظات الإصدار وجهاز تتبع الإصدارات الخاصة ب AKS لتتبع إصدارات Istio الجديدة وشاهد متى تم طرح النسخة الجديدة في منطقتك.

من الممكن أن تحدث اضطرابات في حركة المرور أثناء عملية الترقية. لتقليل الاضطرابات أثناء الترقيات، يقوم إضافة توجيه التطبيقات بنشر جهاز التدرج التلقائي الأفقي (HPA) مع نسختين لا تقل عن النسخ وPodDisruptionBudget (PDB) بتوفر حد أدنى واحد لكل مشروع Gateway. يمكنك تخصيص هذه الموارد لتعديل هذه الإعدادات.

تخصيصات الموارد

تخصيص التدرج التلقائي لجهاز الوحدة الأفقية (HPA) لمستوى التحكم

يدعم تنفيذ واجهة برمجة التطبيقات لبوابة التوجيه تخصيص جهاز التدرج التلقائي لجهاز التحكم الأفقي في سطح التحكم Istio (HPA). يحتوي مورد istiod HPA على التكوينات الافتراضية التالية:

  • الحد الأدنى من النسخ المقلدة: 2
  • أقصى نسخ مقلدة: 5
  • استخدام المعالج: 80%

ملحوظة

لمنع التعارض مع ، PodDisruptionBudgetلا يسمح تنفيذ واجهة برمجة تطبيقات بوابة التوجيه بتعيين الإعداد minReplicas الأولي أدناه ل 2.

يمكن تعديل تكوين HPA من خلال التحديثات والتعديلات المباشرة. مثال:

kubectl patch hpa istiod -n aks-istio-system --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'

تخصيص موارد البوابة

يدعم Gateway تنفيذ واجهة برمجة تطبيقات بوابة التوجيه تخصيص الموارد عبر التعليقات التوضيحية وخرائط التهيئة (ConfigMaps). يستخدم توجيه التطبيقات نفس قائمة صلاحيات تخصيص الموارد كما في إضافة شبكة خدمة Istio لتخصيص موارد واجهة برمجة التطبيقات Gateway. اتبع الخطوات في مستندات واجهة برمجة التطبيقات الخاصة ب Gateway الإضافية في Istio لتكوين الموارد المولدة لل Gateways ومعرفة الحقول التي تندرج تحت قائمة الصلاحيات.

ملحوظة

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

تعطيل تنفيذ واجهة برمجة تطبيقات بوابة التوجيه للتطبيقات

شغل الأمر التالي لتعطيل تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيق:

az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --disable-app-routing-istio

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

شغل الأوامر التالية لحذف و GatewayHttpRoute:

kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
kubectl delete httproute httpbin

إذا أنشأت ConfigMap لتخصيص وضعك Gateway، قم بتشغيل الأمر التالي لحذف ConfigMap:

kubectl delete configmap gw-options

إذا أنشأت SecretProviderClass وسرا لاستخدامه لإنهاء TLS، قم بحذف الموارد التالية أيضا:

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

الخطوات التالية

تأمين حركة المرور داخل مع تنفيذ واجهة برمجة تطبيقات بوابة توجيه التطبيقات