الوظيفة الإضافية لتوجيه تطبيق HTTP لخدمة Azure Kubernetes (AKS) (متوقفة)
تنبيه
سيتم إيقاف الوظيفة الإضافية لتوجيه تطبيق HTTP (معاينة) لخدمة Azure Kubernetes (AKS) في 03 مارس 2025. نوصي بالترحيل إلى الوظيفة الإضافية توجيه التطبيق بحلول ذلك التاريخ.
تسهل الوظيفة الإضافية لتوجيه تطبيق HTTP الوصول إلى التطبيقات التي تم نشرها في نظام مجموعة Azure Kubernetes Service (AKS) من خلال:
- تكوين وحدة تحكم دخول في نظام مجموعة AKS.
- إنشاء أسماء DNS يمكن الوصول إليها بشكل عام لنقاط نهاية التطبيق
- إنشاء منطقة DNS في اشتراكك. لمزيد من المعلومات حول تكلفة DNS، راجع تسعير DNS.
قبل البدء
- لا تعمل الوظيفة الإضافية لتوجيه تطبيق HTTP مع إصدارات AKS 1.22.6+.
- إذا كنت تقوم بتشغيل الأوامر محليا، فقم بتثبيت
kubectl
باستخدامaz aks install-cli
الأمر .
نظرة عامة على الوظيفة الإضافية لتوجيه تطبيق HTTP
تنشر الوظيفة الإضافية مكونين: وحدة تحكم دخول Kubernetes ووحدة تحكم DNS خارجية.
- وحدة تحكم الدخول: يتم عرض وحدة تحكم الدخول إلى الإنترنت باستخدام خدمة Kubernetes
LoadBalancer
. تراقب وحدة التحكم في الدخول موارد دخول Kubernetes وتنفذها وتنشئ مسارات إلى نقاط نهاية التطبيق. - وحدة تحكم DNS الخارجية: تراقب وحدة تحكم DNS الخارجية موارد دخول Kubernetes وتنشئ سجلات DNS
A
في منطقة DNS الخاصة بنظام المجموعة.
تمكين توجيه تطبيق HTTP
إنشاء مجموعة AKS جديدة وتمكين الوظيفة الإضافية لتوجيه تطبيق HTTP باستخدام
az aks create
الأمر مع المعلمة--enable-addons
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-addons http_application_routing \ --generate-ssh-keys
يمكنك أيضا تمكين توجيه HTTP على مجموعة AKS موجودة باستخدام
az aks enable-addons
الأمر مع المعلمة--addons
.az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
استرداد اسم منطقة DNS باستخدام
az aks show
الأمر . تحتاج إلى اسم منطقة DNS لنشر التطبيقات إلى نظام المجموعة.az aks show --resource-group myResourceGroup --name myAKSCluster --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
يجب أن يبدو الإخراج الخاص بك مثل إخراج المثال التالي:
9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io
قم بالاتصال بمجموعة AKS
قم بتكوين
kubectl
للاتصال بنظام مجموعة Kubernetes باستخدام أمرaz aks get-credentials
. يحصل المثال التالي على بيانات اعتماد لمجموعة AKS المسماة myAKSCluster في myResourceGroup:az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
استخدام توجيه تطبيق HTTP
هام
يمكن تشغيل الوظيفة الإضافية لتوجيه تطبيق HTTP فقط على موارد الدخول بالتعليق التوضيحي التالي:
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
قم بإنشاء ملف باسم samples-http-application-routing.yaml وانسخه في YAML التالي. في السطر 43، قم بالتحديث
<CLUSTER_SPECIFIC_DNS_ZONE>
باسم منطقة DNS الذي جمعته في الخطوة السابقة.apiVersion: apps/v1 kind: Deployment metadata: name: aks-helloworld spec: replicas: 1 selector: matchLabels: app: aks-helloworld template: metadata: labels: app: aks-helloworld spec: containers: - name: aks-helloworld image: mcr.microsoft.com/azuredocs/aks-helloworld:v1 ports: - containerPort: 80 env: - name: TITLE value: "Welcome to Azure Kubernetes Service (AKS)" --- apiVersion: v1 kind: Service metadata: name: aks-helloworld spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld annotations: kubernetes.io/ingress.class: addon-http-application-routing spec: rules: - host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE> http: paths: - path: / pathType: Prefix backend: service: name: aks-helloworld port: number: 80
إنشاء الموارد باستخدام
kubectl apply
الأمر .kubectl apply -f samples-http-application-routing.yaml
يوضح المثال التالي الموارد التي تم إنشاؤها:
deployment.apps/aks-helloworld created service/aks-helloworld created ingress.networking.k8s.io/aks-helloworld created
افتح متصفح ويب إلى aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>، على سبيل المثال aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io وتحقق من أنك ترى التطبيق التجريبي. قد يستغرق التطبيق بضع دقائق حتى يظهر.
إزالة توجيه تطبيق HTTP
قم بإزالة الوظيفة الإضافية لتوجيه تطبيق HTTP باستخدام المعلمة [
az aks disable-addons][az-aks-disable-addons] command with the
addons".az aks disable-addons --addons http_application_routing --name myAKSCluster --resource-group myResourceGroup --no-wait
عندما يتم تعطيل المكوّن الإضافي لتوجيه تطبيق HTTP، فقد تظل بعض موارد Kubernetes في المجموعة. تتضمن هذه الموارد configmaps والأسرار ويتم إنشاؤها في مساحة اسم نظام kube. للحفاظ على نظافة المجموعة، قد ترغب في إزالة هذه الموارد. ابحث عن موارد addon-http-application-routing باستخدام الأوامر التالية
kubectl get
:kubectl get deployments --namespace kube-system kubectl get services --namespace kube-system kubectl get configmaps --namespace kube-system kubectl get secrets --namespace kube-system
يظهر إخراج المثال التالي configmaps التي يجب حذفها:
NAMESPACE NAME DATA AGE kube-system addon-http-application-routing-nginx-configuration 0 9m7s kube-system addon-http-application-routing-tcp-services 0 9m7s kube-system addon-http-application-routing-udp-services 0 9m7s
احذف الموارد المتبقية
kubectl delete
باستخدام الأمر . تأكد من تحديد نوع المورد واسم المورد ومساحة الاسم. المثال التالي يحذف إحدى خرائط التكوين السابقة:kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
كرر الخطوة السابقة
kubectl delete
لجميع موارد addon-http-application-routing المتبقية في نظام المجموعة.
استكشاف الأخطاء وإصلاحها
عرض سجلات التطبيق لتطبيق External-DNS باستخدام
kubectl logs
الأمر .kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
يجب أن تؤكد السجلات أنه
A
تم إنشاء سجل DNS وTXT
بنجاح، كما هو موضح في إخراج المثال التالي:time="2018-04-26T20:36:19Z" level=info msg="Updating A record named 'aks-helloworld' to '52.242.28.189' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'." time="2018-04-26T20:36:21Z" level=info msg="Updating TXT record named 'aks-helloworld' to '"heritage=external-dns,external-dns/owner=default"' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'."
عرض سجلات التطبيق لوحدة تحكم دخول NGINX باستخدام
kubectl logs
الأمر .kubectl logs -f deploy/addon-http-application-routing-nginx-ingress-controller -n kube-system
يجب أن تؤكد
CREATE
السجلات مورد الدخول وإعادة تحميل وحدة التحكم، كما هو موضح في إخراج المثال التالي:------------------------------------------------------------------------------- NGINX Ingress controller Release: 0.13.0 Build: git-4bc943a Repository: https://github.com/kubernetes/ingress-nginx ------------------------------------------------------------------------------- I0426 20:30:12.212936 9 flags.go:162] Watching for ingress class: addon-http-application-routing W0426 20:30:12.213041 9 flags.go:165] only Ingress with class "addon-http-application-routing" will be processed by this ingress controller W0426 20:30:12.213505 9 client_config.go:533] Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work. I0426 20:30:12.213752 9 main.go:181] Creating API client for https://10.0.0.1:443 I0426 20:30:12.287928 9 main.go:225] Running in Kubernetes Cluster version v1.8 (v1.8.11) - git (clean) commit 1df6a8381669a6c753f79cb31ca2e3d57ee7c8a3 - platform linux/amd64 I0426 20:30:12.290988 9 main.go:84] validated kube-system/addon-http-application-routing-default-http-backend as the default backend I0426 20:30:12.294314 9 main.go:105] service kube-system/addon-http-application-routing-nginx-ingress validated as source of Ingress status I0426 20:30:12.426443 9 stat_collector.go:77] starting new nginx stats collector for Ingress controller running in namespace (class addon-http-application-routing) I0426 20:30:12.426509 9 stat_collector.go:78] collector extracting information from port 18080 I0426 20:30:12.448779 9 nginx.go:281] starting Ingress controller I0426 20:30:12.463585 9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-nginx-configuration", UID:"2588536c-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"559", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-nginx-configuration I0426 20:30:12.466945 9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-tcp-services", UID:"258ca065-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"561", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-tcp-services I0426 20:30:12.467053 9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-udp-services", UID:"259023bc-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"562", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-udp-services I0426 20:30:13.649195 9 nginx.go:302] starting NGINX process... I0426 20:30:13.649347 9 leaderelection.go:175] attempting to acquire leader lease kube-system/ingress-controller-leader-addon-http-application-routing... I0426 20:30:13.649776 9 controller.go:170] backend reload required I0426 20:30:13.649800 9 stat_collector.go:34] changing prometheus collector from to default I0426 20:30:13.662191 9 leaderelection.go:184] successfully acquired lease kube-system/ingress-controller-leader-addon-http-application-routing I0426 20:30:13.662292 9 status.go:196] new leader elected: addon-http-application-routing-nginx-ingress-controller-5cxntd6 I0426 20:30:13.763362 9 controller.go:179] ingress backend successfully reloaded... I0426 21:51:55.249327 9 event.go:218] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"aks-helloworld", UID:"092c9599-499c-11e8-a5e1-0a58ac1f0ef2", APIVersion:"extensions", ResourceVersion:"7346", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress default/aks-helloworld W0426 21:51:57.908771 9 controller.go:775] service default/aks-helloworld does not have any active endpoints I0426 21:51:57.908951 9 controller.go:170] backend reload required I0426 21:51:58.042932 9 controller.go:179] ingress backend successfully reloaded... 167.220.24.46 - [167.220.24.46] - - [26/Apr/2018:21:53:20 +0000] "GET / HTTP/1.1" 200 234 "" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 197 0.001 [default-aks-helloworld-80] 10.244.0.13:8080 234 0.004 200
تنظيف الموارد
قم بإزالة كائنات Kubernetes المقترنة التي تم إنشاؤها في هذه المقالة باستخدام
kubectl delete
الأمر .kubectl delete -f samples-http-application-routing.yaml
يظهر إخراج المثال التالي أنه تمت إزالة كائنات Kubernetes:
deployment "aks-helloworld" deleted service "aks-helloworld" deleted ingress "aks-helloworld" deleted
الخطوات التالية
للحصول على معلومات حول كيفية تثبيت وحدة تحكم دخول مؤمنة بواسطة HTTPS في AKS، راجع دخول HTTPS على خدمة Azure Kubernetes (AKS).