إعداد اسم مجال مخصص وشهادة 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، راجع المتطلبات الأساسية التالية:
- شهادة SSL. إذا لم يكن لديك شهادة، يمكنك إنشاء شهادة.
إنشاء 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 شراكة موثوق بها مع بعض المراجع المصدقة.
إنشاء شهادة 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>"
تصدير شهادة 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، يمكنك تخطي هذه الخطوة.
إنشاء منطقة 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، راجع ملخص الهويات المدارة.
استرداد معرف المورد لمنطقة DNS باستخدام
az network dns zone show
الأمر وتعيين الإخراج إلى متغير يسمى ZONEID.ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
تحديث الوظيفة الإضافية لتمكين التكامل مع 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. عند إنشاء كائن دخول باستخدام هذه الفئة، فإنه يقوم بتنشيط الوظيفة الإضافية.
احصل على عنوان 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
انسخ بيان 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>
إنشاء موارد نظام المجموعة باستخدام
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 كجزء من تحليل أداء التطبيق واستخدامه.
Azure Kubernetes Service