الوظيفة الإضافية لتوجيه تطبيق 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

  1. إنشاء مجموعة 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
    
  2. استرداد اسم منطقة 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
  1. قم بإنشاء ملف باسم 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
    
  2. إنشاء الموارد باستخدام 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
    
  3. افتح متصفح ويب إلى aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>، على سبيل المثال aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io وتحقق من أنك ترى التطبيق التجريبي. قد يستغرق التطبيق بضع دقائق حتى يظهر.

إزالة توجيه تطبيق HTTP

  1. قم بإزالة الوظيفة الإضافية لتوجيه تطبيق 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
    
  2. عندما يتم تعطيل المكوّن الإضافي لتوجيه تطبيق 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
    
  3. احذف الموارد المتبقية kubectl delete باستخدام الأمر . تأكد من تحديد نوع المورد واسم المورد ومساحة الاسم. المثال التالي يحذف إحدى خرائط التكوين السابقة:

    kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
    
  4. كرر الخطوة السابقة kubectl delete لجميع موارد addon-http-application-routing المتبقية في نظام المجموعة.

استكشاف الأخطاء وإصلاحها‬

  1. عرض سجلات التطبيق لتطبيق 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'."
    
  2. عرض سجلات التطبيق لوحدة تحكم دخول 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).