مشاركة عبر


إعداد اسم مجال مخصص وشهادة SSL باستخدام الوظيفة الإضافية لتوجيه التطبيق

الدخول هو كائن واجهة برمجة التطبيقات الذي يحدد القواعد، والتي تسمح بالوصول الخارجي إلى الخدمات في نظام مجموعة Azure Kubernetes Service (AKS). عند إنشاء كائن دخول يستخدم فئة nginx Ingress الإضافية لتوجيه التطبيق، تقوم الوظيفة الإضافية بإنشاء وحدة تحكم دخول واحدة أو أكثر وتكوينها وإدارتها في نظام مجموعة AKS.

توضح هذه المقالة كيفية إعداد تكوين دخول متقدم لتشفير نسبة استخدام الشبكة باستخدام شهادات SSL/TLS المخزنة في Azure Key Vault، واستخدام Azure DNS لإدارة مناطق DNS.

الوظيفة الإضافية لتوجيه التطبيق مع ميزات nginx

تقدم الوظيفة الإضافية لتوجيه التطبيق مع nginx ما يلي:

  • تكوين سهل لوحدات تحكم دخول nginx المدارة.
  • التكامل مع DNS خارجي مثل Azure DNS لإدارة المنطقة العالمية والخاصة
  • إنهاء SSL مع الشهادات المخزنة في مخزن مفاتيح، مثل Azure Key Vault.

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

  • نظام مجموعة AKS مع الوظيفة الإضافية لتوجيه التطبيق.
  • Azure Key Vault إذا كنت ترغب في تكوين إنهاء SSL وتخزين الشهادات في المخزن المستضاف في Azure.
  • Azure DNS إذا كنت تريد تكوين إدارة المنطقة العامة والخاصة واستضافتها في Azure.
  • لإرفاق Azure Key Vault أو منطقة Azure DNS، تحتاج إلى دور المالك أو مسؤول حساب Azure أو مسؤول Azure المشارك في اشتراك Azure.
  • يجب أن تكون جميع مناطق DNS العامة في نفس الاشتراك ومجموعة الموارد.

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

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

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

az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>

إنهاء حركة مرور HTTPS بشهادات من Azure Key Vault

لتمكين دعم حركة مرور HTTPS، راجع المتطلبات الأساسية التالية:

إنشاء Azure Key Vault لتخزين الشهادة

إشعار

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

إنشاء Azure Key Vault باستخدام az keyvault create الأمر .

az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true

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

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

تنبيه

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

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

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

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

استيراد شهادة إلى Azure Key Vault

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

az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]

هام

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

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

في نظام مجموعة مع تمكين الوظيفة الإضافية لتوجيه التطبيق، استخدم az aks approuting update الأمر باستخدام --enable-kv الوسيطتين و --attach-kv لتمكين موفر Azure Key Vault لبرنامج تشغيل Secrets Store CSI وتطبيق تعيينات الدور المطلوبة.

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

إشعار

az aks approuting update --attach-kv يستخدم الأمر أذونات المستخدم الذي يقوم بتشغيل الأمر لإنشاء تعيين دور Azure Key Vault. يتم تعيين هذا الدور إلى الهوية المدارة للوظيفة الإضافية. لمزيد من المعلومات حول الهويات المدارة ل AKS، راجع ملخص الهويات المدارة.

استرداد معرف مورد Azure Key Vault.

KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)

ثم قم بتحديث الوظيفة الإضافية لتوجيه التطبيق لتمكين برنامج تشغيل CSI لمخزن Azure Key Vault السري وتطبيق تعيين الدور.

az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}

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

لتمكين دعم مناطق DNS، راجع المتطلبات الأساسية التالية:

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

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

إشعار

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

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

    az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
    

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

إشعار

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

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

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

    az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
    

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

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

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

    az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
    

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

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

    قم بالتحديث <Hostname> باسم مضيف DNS الخاص بك ومع <KeyVaultCertificateUri> URI الذي تم إرجاعه من الأمر للاستعلام عن Azure Key Vault في الخطوة 1 أعلاه. يجب أن تتضمن https://yourkeyvault.vault.azure.net/certificates/certnameقيمة السلسلة ل *<KeyVaultCertificateUri>* فقط . يجب حذف إصدار الشهادة في نهاية سلسلة URI للحصول على الإصدار الحالي.

    secretName يعرف المفتاح في tls القسم اسم السر الذي يحتوي على الشهادة لمورد الدخول هذا. يتم تقديم هذه الشهادة في المستعرض عندما يستعرض العميل عنوان URL المحدد في <Hostname> المفتاح. تأكد من أن قيمة 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: <KeyVaultCertificateUri>
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <Hostname>
        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 كجزء من تحليل أداء التطبيق واستخدامه.