تكوين وحدة تحكم دخول NGINX لدعم منطقة DNS الخاصة Azure مع الوظيفة الإضافية لتوجيه التطبيق
توضح هذه المقالة كيفية تكوين وحدة تحكم دخول NGINX للعمل مع موازن التحميل الداخلي Azure وتكوين منطقة Azure DNS خاصة لتمكين دقة DNS لنقاط النهاية الخاصة لحل مجالات معينة.
قبل البدء
- نظام مجموعة AKS مع الوظيفة الإضافية لتوجيه التطبيق.
- لإرفاق منطقة DNS خاصة ب Azure، تحتاج إلى دور المالك أو مسؤول حساب Azure أو مسؤول Azure المشارك في اشتراك Azure الخاص بك.
قم بالاتصال بمجموعة 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، راجع ملخص الهويات المدارة.
استرداد معرف المورد لمنطقة 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)
تحديث الوظيفة الإضافية لتمكين التكامل مع 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 خاص.
انسخ بيان 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"
إنشاء موارد وحدة تحكم دخول NGINX باستخدام
kubectl apply
الأمر .kubectl apply -f nginx-internal-controller.yaml
يظهر إخراج المثال التالي المورد الذي تم إنشاؤه:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
تحقق من إنشاء وحدة تحكم الدخول
يمكنك التحقق من حالة وحدة تحكم دخول 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 لإنشاء الموارد المناسبة.
إنشاء مساحة اسم تطبيق تسمى
hello-web-app-routing
لتشغيل أمثلة pods باستخدامkubectl create namespace
الأمر .kubectl create namespace hello-web-app-routing
قم بإنشاء النشر عن طريق نسخ بيان 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)"
أنشئ الخدمة عن طريق نسخ بيان 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
إنشاء موارد نظام المجموعة باستخدام
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 خاص
انسخ بيان 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
إنشاء موارد نظام المجموعة باستخدام
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 وتكوين الوظيفة الإضافية لتوجيه التطبيق.
Azure Kubernetes Service