إعداد اسم نطاق مخصص وشهادة SSL باستخدام إضافة توجيه التطبيقات لخدمة Azure Kubernetes Service (AKS)

تنبيه

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

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

توضح لك هذه المقالة كيفية تكوين أسماء النطاقات المخصصة وشهادات SSL/TLS لدخول AKS باستخدام Azure Key VaultوAzure DNS مع إضافة توجيه التطبيقات ل AKS.

المتطلبات الأساسية

  • نظام مجموعة AKS مع الوظيفة الإضافية لتوجيه التطبيق.

  • Azure Key Vault إذا كنت ترغب في تكوين إنهاء SSL وتخزين الشهادات في المخزن المستضاف في Azure. إذا لم يكن لديك واحد، انظر إنشاء خزنة مفاتيح باستخدام Azure CLI.

  • لتمكين دعم حركة مرور HTTPS، تحتاج إلى شهادة SSL. إذا لم يكن لديك شهادة، انظر إنشاء شهادة.

  • Azure DNS إذا كنت تريد تكوين إدارة المنطقة العامة والخاصة واستضافتها في Azure. إذا لم يكن لديك منطقة Azure DNS، يمكنك إنشاء منطقة. لتمكين دعم مناطق DNS:

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

أذونات Azure المطلوبة

حساب المستخدم الخاص بك يحتاج: دور مالك، مسؤول حساب أزور، أو مدير مشارك في Azure على اشتراكك في أزور.

ما تفعله الأوامر: عندما تقوم بتشغيل az aks approuting update --attach-kv أو az aks approuting zone add --attach-zones، تستخدم هذه الأوامر أذونات تعيين الأدوار الخاصة بك لمنح هوية إدارة إضافة توجيه التطبيق تلقائيا الأدوار التالية:

  • دور مستخدم شهادة Key Vault في Azure Key Vault الخاص بك (للوصول إلى الشهادة).
  • دور مساهم منطقة DNS في مناطق Azure DNS الخاصة بك (لإدارة سجلات DNS).

لمزيد من المعلومات حول الهويات المدارة ل AKS، راجع ملخص الهويات المدارة.

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

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

  • تكوين kubectl للاتصال بمجموعة Kubernetes باستخدام az aks get-credentials الأمر .

    # Set environment variables for your resource group and cluster name
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS cluster credentials
    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    

إنشاء شهادة SSL موقعة ذاتيا وتصديرها

للاختبار، يمكنك استخدام شهادة عامة موقعة ذاتيًا بدلاً من شهادة موقعة من المرجع المصدق (CA). إذا كان لديك شهادة بالفعل، يمكنك تخطي هذه الخطوة.

تنبيه

الشهادات الموقعة ذاتيا هي شهادات رقمية لا يوقعها سلطة قانونية موثوقة من طرف ثالث. الشركة أو المطور المسؤول عن الموقع أو البرنامج هو من يقوم بإنشاء هذه الشهادات، وإصدارها، وتوقيعها. هذا هو السبب في أن الشهادات الموقعة ذاتيا تعتبر غير آمنة لمواقع الويب والتطبيقات العامة. لدى Azure Key Vault شراكة موثوق بها مع بعض المراجع المصدقة.

  1. أنشئ شهادة SSL موقعة ذاتيا لاستخدامها مع الدخول باستخدام الأمر openssl req . تأكد من استبدال <host-name> باسم DNS الذي تستخدمه.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<host-name>" -addext "subjectAltName=DNS:<host-name>"
    
  2. تصدير شهادة SSL وتخطي موجه كلمة المرور باستخدام openssl pkcs12 -export الأمر .

    openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
    

استيراد شهادة SSL موقعة ذاتيا إلى Azure Key Vault

  • استيراد شهادة SSL إلى Azure Key Vault باستخدام az keyvault certificate import الأمر . إذا كانت شهادتك محمية بكلمة مرور، يمكنك تمرير كلمة المرور من خلال العلامة --password .

    # Set environment variables for your key vault name and certificate name
    export KEY_VAULT_NAME=<key-vault-name>
    export KEY_VAULT_CERT_NAME=<key-vault-certificate-name>
    
    # Import the SSL certificate into Azure Key Vault
    az keyvault certificate import --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --file aks-ingress-tls.pfx [--password <certificate password if specified>]
    

إشعار

لتمكين إضافة توجيه التطبيقات لإعادة تحميل الشهادات من Azure Key Vault عند تغييرها، يجب عليك تفعيل ميزة التدوير التلقائي السري في برنامج تشغيل CSI الخاص بمخزن الأسرار. عند تمكين التشغيل التلقائي، يقوم برنامج التشغيل بتحديث تحميل الجراب وسر Kubernetes عن طريق الاستقصاء عن التغييرات بشكل دوري، استنادا إلى الفاصل الزمني لاستطلاع التدوير الذي تحدده. الفاصل الزمني الافتراضي لاستطلاع الاستدارة دقيقتان.

تمكين تكامل Azure Key Vault

يوفر Azure Key Vault نظامين للتخويل: التحكم في الوصول المستند إلى الدور Azure (Azure RBAC)، والذي يعمل على مستوى الإدارة، ونموذج نهج الوصول، الذي يعمل على كل من مستوى الإدارة و مستوى البيانات. تختار العملية --attach-kv نموذج الوصول المناسب للاستخدام.

  1. احصل على معرف الموارد لخزنة المفاتيح باستخدام az keyvault show الأمر وقم بتعيين المخرج على متغير بيئتي.

    KEY_VAULT_ID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
    
  2. قم بتحديث إضافة توجيه التطبيقات لتمكين مزود Azure Key Vault لبرنامج تشغيل CSI لمخزن الأسرار وتطبيق تعيين الأدوار المطلوبة باستخدام az aks approuting update الأمر مع ووسيطات --enable-kv--attach-kv .

    az aks approuting update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-kv --attach-kv ${KEY_VAULT_ID}
    

إنشاء منطقة Azure DNS العالمية

إذا كان لديك بالفعل منطقة DNS في Azure، يمكنك تخطي هذه الخطوة.

  • إنشاء منطقة Azure DNS باستخدام az network dns zone create الأمر .

    # Set environment variables for your resource group and DNS zone name
    export RESOURCE_GROUP=<resource-group-name>
    export ZONE_NAME=<zone-name>
    
    # Create the Azure DNS zone
    az network dns zone create --resource-group $RESOURCE_GROUP --name $ZONE_NAME
    

تمكين تكامل Azure DNS

  1. احصل على معرف الموارد لمنطقة DNS باستخدام az network dns zone show الأمر وقم بتعيين المخرج إلى متغير بيئي.

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

    az aks approuting zone add --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --ids=${ZONE_ID} --attach-zones
    

إنشاء فئة Ingress تستخدم اسم مضيف وشهادة من Azure Key Vault

تنشئ الوظيفة الإضافية لتوجيه التطبيق فئة دخول على المجموعة المسماة webapprouting.kubernetes.azure.com. عند إنشاء كائن دخول باستخدام هذه الفئة، فإنه يقوم بتنشيط الوظيفة الإضافية.

  1. احصل على URI الخاص بالشهادة لاستخدامه في الدخول من Azure Key Vault باستخدام az keyvault certificate show الأمر.

    az keyvault certificate show --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --query "id" --output tsv
    

    يظهر إخراج المثال التالي شهادة URI التي تم إرجاعها من الأمر:

    https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ab12c34567d89e01f2345g6h78ijkl90
    
  2. انسخ بيان YAML التالي في ملف جديد يسمى ingress.yaml واحفظ الملف إلى الكمبيوتر المحلي.

    تحديث <host-name> باسم مضيف DNS الخاص بك وإذا <key-vault-certificate-uri> تم إعادة URI من الأمر السابق. يجب أن تتضمن <key-vault-certificate-uri>قيمة السلسلة ل https://yourkeyvault.vault.azure.net/certificates/certname فقط . قم بإزالة نسخة الشهادة من نهاية سلسلة URI للحصول على النسخة الحالية.

    secretName يعرف المفتاح في tls القسم اسم السر الذي يحتوي على الشهادة لمورد الدخول هذا. يتم تقديم هذه الشهادة في المستعرض عندما يستعرض العميل عنوان URL المحدد في <host-name> المفتاح. تأكد من أن قيمة secretName تساوي متبوعة keyvault- بقيمة اسم مورد الدخول (من metadata.name). في مثال YAML، secretName يجب أن يكون مساويا ل keyvault-<your-ingress-name>.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.azure.com/tls-cert-keyvault-uri: <key-vault-certificate-uri>
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <host-name>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <host-name>
        secretName: keyvault-<your-ingress-name>
    
  3. إنشاء موارد نظام المجموعة باستخدام 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   webapprouting.kubernetes.azure.com   myapp.contoso.com   20.51.92.19   80, 443   4m
    

تعرف على كيفية مراقبة مقاييس وحدة تحكم Ingress NGINX المرفقة مع إضافة توجيه التطبيقات باستخدام Prometheus في Grafana كجزء من تحليل أداء واستخدام تطبيقك.