مشاركة عبر


تكوين وحدة تحكم دخول NGINX لدعم منطقة DNS الخاصة Azure مع الوظيفة الإضافية لتوجيه التطبيق

توضح هذه المقالة كيفية تكوين وحدة تحكم دخول NGINX للعمل مع موازن التحميل الداخلي Azure وتكوين منطقة Azure DNS خاصة لتمكين دقة DNS لنقاط النهاية الخاصة لحل مجالات معينة.

قبل البدء

قم بالاتصال بمجموعة AKS

للاتصال بمجموعة Kubernetes من الكمبيوتر المحلي الخاص بك، يمكنك استخدام kubectl، عميل سطر أوامر Kubernetes. يمكنك تثبيته محليا باستخدام الأمر az aks install-cli . في حال كنت تستخدم Azure Cloud Shell، يكون kubectl مثبتاً بالفعل.

يقوم المثال التالي بتكوين الاتصال بالمجموعة المسماة myAKSCluster في myResourceGroup باستخدام az aks get-credentials الأمر .

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

إنشاء شبكة ظاهرية

لنشر منطقة DNS خاصة إلى شبكتك الظاهرية، تحتاج إلى تحديد قائمة بالشبكات الظاهرية المسموح لها بحل السجلات داخل المنطقة. وتسمى هذه ارتباطات الشبكة الظاهرية.

ينشئ المثال التالي شبكة ظاهرية تسمى myAzureVNet في مجموعة موارد myResourceGroup ، وشبكة فرعية واحدة تسمى mySubnet لإنشاء داخل VNet ببادئة عنوان محددة.

az network vnet create \
  --name myAzureVNet \
  --resource-group myResourceGroup \
  --location eastus \
  --address-prefix 10.2.0.0/16 \
  --subnet-name mysubnet \
  --subnet-prefixes 10.2.0.0/24

إنشاء منطقة DNS خاصة Azure

إشعار

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

يمكنك إنشاء منطقة DNS باستخدام الأمر az network private-dns zone create ، مع تحديد اسم المنطقة ومجموعة الموارد لإنشائها فيها. ينشئ المثال التالي منطقة DNS تسمى private.contoso.com في مجموعة موارد myResourceGroup .

az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com

يمكنك إنشاء ارتباط شبكة ظاهرية إلى منطقة DNS التي تم إنشاؤها مسبقا باستخدام الأمر az network private-dns link vnet create . ينشئ المثال التالي ارتباطا يسمى myDNSLink إلى المنطقة private.contoso.com للشبكة الظاهرية myAzureVNet. قم بتضمين المعلمة --registration-enabled لتحديد الارتباط الذي لم يتم تمكين التسجيل فيه.

az network private-dns link vnet create --resource-group myResourceGroup \
  --name myDNSLink \
  --zone-name private.contoso.com \
  --virtual-network myAzureVNet \
  --registration-enabled false

تدير ميزة التسجيل التلقائي للمنطقة الخاصة ل Azure DNS سجلات DNS للأجهزة الظاهرية المنشورة في شبكة ظاهرية. عند ربط شبكة ظاهرية بمنطقة DNS خاصة مع تمكين هذا الإعداد، يتم إنشاء سجل DNS لكل جهاز ظاهري Azure لعقدة AKS الخاصة بك المنشورة في الشبكة الظاهرية.

إرفاق منطقة DNS خاصة ب Azure إلى الوظيفة الإضافية لتوجيه التطبيق

إشعار

az aks approuting zone add يستخدم الأمر أذونات المستخدم الذي يقوم بتشغيل الأمر لإنشاء تعيين دور منطقة DNS Azure. دور مساهم منطقة DNS الخاصة هو دور مضمن لإدارة موارد DNS الخاصة ويتم تعيينه إلى الهوية المدارة للوظيفة الإضافية. لمزيد من المعلومات حول الهويات المدارة ل AKS، راجع ملخص الهويات المدارة.

  1. استرداد معرف المورد لمنطقة DNS باستخدام az network dns zone show الأمر وتعيين الإخراج إلى متغير يسمى ZONEID. يستعلم المثال التالي عن المنطقة private.contoso.com في مجموعة الموارد myResourceGroup.

    ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
    
  2. تحديث الوظيفة الإضافية لتمكين التكامل مع Azure DNS باستخدام az aks approuting zone الأمر . يمكنك تمرير قائمة مفصولة بفواصل لمعرفات موارد منطقة DNS. يحدث المثال التالي مجموعة AKS myAKSCluster في مجموعة الموارد myResourceGroup.

    az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
    

إنشاء وحدة تحكم دخول NGINX بعنوان IP خاص وموازن تحميل داخلي

تستخدم الوظيفة الإضافية لتوجيه التطبيق تعريف مورد مخصص Kubernetes (CRD) يسمى NginxIngressController لتكوين وحدات تحكم دخول NGINX. يمكنك إنشاء المزيد من وحدات التحكم في الدخول أو تعديل تكوين موجود.

NginxIngressController يحتوي CRD على loadBalancerAnnotations حقل للتحكم في سلوك خدمة وحدة تحكم دخول NGINX عن طريق تعيين التعليقات التوضيحية لموازن التحميل.

قم بتنفيذ الخطوات التالية لإنشاء وحدة تحكم دخول NGINX مع موازن تحميل Azure داخلي مع عنوان IP خاص.

  1. انسخ بيان YAML التالي في ملف جديد يسمى nginx-internal-controller.yaml واحفظ الملف على الكمبيوتر المحلي.

    apiVersion: approuting.kubernetes.azure.com/v1alpha1
    kind: NginxIngressController
    metadata:
      name: nginx-internal
    spec:
      ingressClassName: nginx-internal
      controllerNamePrefix: nginx-internal
      loadBalancerAnnotations: 
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    
  2. إنشاء موارد وحدة تحكم دخول NGINX باستخدام kubectl apply الأمر .

    kubectl apply -f nginx-internal-controller.yaml
    

    يظهر إخراج المثال التالي المورد الذي تم إنشاؤه:

    nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
    
  3. تحقق من إنشاء وحدة تحكم الدخول

    يمكنك التحقق من حالة وحدة تحكم دخول NGINX باستخدام kubectl get nginxingresscontroller الأمر .

    kubectl get nginxingresscontroller
    

    يظهر إخراج المثال التالي المورد الذي تم إنشاؤه. قد يستغرق الأمر بضع دقائق حتى تتوفر وحدة التحكم:

    NAME             INGRESSCLASS                         CONTROLLERNAMEPREFIX   AVAILABLE
    default          webapprouting.kubernetes.azure.com   nginx                  True
    nginx-internal   nginx-internal                       nginx-internal         True
    

نشر تطبيق

تستخدم الوظيفة الإضافية لتوجيه التطبيق تعليقات توضيحية على كائنات دخول Kubernetes لإنشاء الموارد المناسبة.

  1. إنشاء مساحة اسم تطبيق تسمى hello-web-app-routing لتشغيل أمثلة pods باستخدام kubectl create namespace الأمر .

    kubectl create namespace hello-web-app-routing
    
  2. قم بإنشاء النشر عن طريق نسخ بيان YAML التالي في ملف جديد يسمى deployment.yaml وحفظ الملف إلى الكمبيوتر المحلي.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aks-helloworld  
      namespace: hello-web-app-routing
    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)"
    
  3. أنشئ الخدمة عن طريق نسخ بيان YAML التالي إلى ملف جديد يسمى service.yaml واحفظ الملف على الكمبيوتر المحلي.

    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: aks-helloworld
    
  4. إنشاء موارد نظام المجموعة باستخدام kubectl apply الأمر .

    kubectl apply -f deployment.yaml -n hello-web-app-routing
    

    يظهر إخراج المثال التالي المورد الذي تم إنشاؤه:

    deployment.apps/aks-helloworld created created
    
    kubectl apply -f service.yaml -n hello-web-app-routing
    

    يظهر إخراج المثال التالي المورد الذي تم إنشاؤه:

    service/aks-helloworld created created
    

إنشاء مورد الدخول الذي يستخدم اسم مضيف على منطقة DNS الخاصة Azure وعنوان IP خاص

  1. انسخ بيان YAML التالي في ملف جديد يسمى ingress.yaml واحفظ الملف إلى الكمبيوتر المحلي.

    قم بالتحديث <Hostname> باسم مضيف DNS الخاص بك، على سبيل المثال، helloworld.private.contoso.com. تحقق من أنك تحدد nginx-internal ل ingressClassName.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: nginx-internal
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. إنشاء موارد نظام المجموعة باستخدام kubectl apply الأمر .

    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

    يظهر إخراج المثال التالي المورد الذي تم إنشاؤه:

    ingress.networking.k8s.io/aks-helloworld created
    

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

يمكنك التحقق من إنشاء الدخول المدار باستخدام kubectl get ingress الأمر .

kubectl get ingress -n hello-web-app-routing

يظهر إخراج المثال التالي الدخول المدار الذي تم إنشاؤه:

NAME             CLASS            HOSTS                            ADDRESS      PORTS   AGE
aks-helloworld   nginx-internal   helloworld.private.contoso.com   10.224.0.7   80      98s

تحقق من تحديث منطقة DNS الخاصة ل Azure

في بضع دقائق، قم بتشغيل الأمر az network private-dns record-set a list لعرض سجلات A لمنطقة DNS الخاصة ب Azure. حدد اسم مجموعة الموارد واسم منطقة DNS. في هذا المثال، مجموعة الموارد هي myResourceGroup ومنطقة DNS private.contoso.com.

az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com

يظهر إخراج المثال التالي السجل الذي تم إنشاؤه:

[
  {
    "aRecords": [
      {
        "ipv4Address": "10.224.0.7"
      }
    ],
    "etag": "188f0ce5-90e3-49e6-a479-9e4053f21965",
    "fqdn": "helloworld.private.contoso.com.",
    "id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/helloworld",
    "isAutoRegistered": false,
    "name": "helloworld",
    "resourceGroup": "foo",
    "ttl": 300,
    "type": "Microsoft.Network/privateDnsZones/A"
  }
]

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

للحصول على معلومات التكوين الأخرى المتعلقة بتشفير SSL وحدة تحكم دخول NGINX المتقدمة الأخرى وتكوين مورد الدخول، راجع تكوين DNS وSSL وتكوين الوظيفة الإضافية لتوجيه التطبيق.