قم بتخصيص CoreDNS مع Azure Kubernetes Service
تستخدم Azure Kubernetes Service (AKS) مشروع CoreDNS لإدارة نظام المجموعات الخاصة ب DNS وحله مع نظام المجموعة 1.12.x والأحدث. لمزيد من المعلومات حول تخصيص CoreDNS و Kubernetes، راجع الوثائق الرسمية للمصدر.
AKS هي خدمة مدارة، لذلك لا يمكنك تعديل التكوين الرئيسي ل CoreDNS ( CoreFile). بدلا من ذلك، يمكنك استخدام Kubernetes ConfigMap لتجاوز الإعدادات الافتراضية. لمشاهدة الإعدادات الافتراضية الخاصة ب AKS CoreDNS ConfigMaps، استخدم kubectl get configmaps --namespace=kube-system coredns -o yaml
الأمر.
توضح لك هذه المقالة كيفية استخدام ConfigMaps لخيارات تخصيص CoreDNS الأساسية في AKS. يختلف هذا الأسلوب عن تكوين CoreDNS في سياقات أخرى، مثل CoreFile.
إشعار
في السابق، تم استخدام kube-dns لإدارة نظام مجموعة DNS ودقته، ولكن تم إهماله الآن. kube-dns
تم عرض خيارات التخصيص المختلفة عبر خريطة التكوين الخاصة ب Kubernetes. يعد CoreDNS غير متوافق مع kube-dns. يجب تحديث أي تخصيصات استخدمتها مسبقا ل CoreDNS.
قبل البدء
- تفترض هذه المقالة أن لديك تجمع AKS قائمًا. إذا كنت بحاجة إلى نظام مجموعة AKS، يمكنك إنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Azure.
- تحقق من إصدار CoreDNS الذي تقوم بتشغيله. قد تتغير قيم التكوين بين الإصدارات.
- عند إنشاء تكوينات مثل الأمثلة أدناه، يجب أن تنتهي الأسماء في قسم البيانات ب .server أو .override. يتم تعريف اصطلاح التسمية هذا في AKS CoreDNS ConfigMap الافتراضي، والذي يمكنك عرضه باستخدام
kubectl get configmaps --namespace=kube-system coredns -o yaml
الأمر .
دعم المكون الإضافي
يتم دعم جميع المكونات الإضافية الخاصة ب CoreDNS المدمجة. لا يتم دعم أي إضافات أو مكونات إضافية تابعة للغير.
أعد كتابة DNS
يمكنك تخصيص CoreDNS باستخدام AKS لإجراء إعادة كتابة اسم DNS أثناء التنقل.
إنشاء ملف باسم
corednsms.yaml
ولصق تكوين المثال التالي. تأكد من استبدال<domain to be rewritten>
باسم المجال المؤهل بالكامل الخاص بك.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: test.server: | <domain to be rewritten>.com:53 { log errors rewrite stop { name regex (.*)\.<domain to be rewritten>\.com {1}.default.svc.cluster.local answer name (.*)\.default\.svc\.cluster\.local {1}.<domain to be rewritten>.com } forward . /etc/resolv.conf # you can redirect this to a specific DNS server such as 10.0.0.10, but that server must be able to resolve the rewritten domain name }
هام
إذا قمت بإعادة التوجيه إلى خادم DNS، مثل CoreDNS service IP، التي يجب أن يكون الخادم الخاص ب DNS يمكنه حل اسم المجال المعاد كتابته.
قم بإنشاء ConfigMap باستخدام
kubectl apply configmap
الأمر وحدد اسم بيان YAML الخاص بك.kubectl apply -f corednsms.yaml
تحقق من تطبيق التخصيصات باستخدام
kubectl get configmaps
وحدد ConfigMap المخصص coredns.kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
لإعادة تحميل ConfigMap وتمكين Kubernetes Scheduler من إعادة تشغيل CoreDNS دون وقت تعطل، قم بإجراء إعادة تشغيل متجدد باستخدام
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
الخادم الخاص بإعادة التوجيه المخصصة
إذا كنت بحاجة إلى تحديد الخادم الخاص بإعادة توجيه حركة مرور الشبكة، يمكنك إنشاء ConfigMap لتخصيص DNS.
إنشاء ملف باسم
corednsms.yaml
ولصق تكوين المثال التالي. تأكد من استبدالforward
الاسم والعنوان بقيم البيئة الخاصة بك.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: test.server: | # you may select any name here, but it must end with the .server file extension <domain to be rewritten>.com:53 { forward foo.com 1.1.1.1 }
قم بإنشاء ConfigMap باستخدام
kubectl apply configmap
الأمر وحدد اسم بيان YAML الخاص بك.kubectl apply -f corednsms.yaml
لإعادة تحميل ConfigMap وتمكين Kubernetes Scheduler من إعادة تشغيل CoreDNS دون وقت تعطل، قم بإجراء إعادة تشغيل متجدد باستخدام
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
استخدم المجالات المخصصة
قد تحتاج إلى تهيئة المجالات المخصصة التي يمكن حلها داخليا فقط. على سبيل المثال، قد تحتاج إلى إعادة حل المجال المخصص puglife.local، وهو ليس مجال مناسب للمستوى الأعلى. بدون تكوين مجال مخصص، لا يمكن لنظام المجموعات الخاص ب AKS إعادة حل العنوان.
أنشئ ملفا جديدا باسم
corednsms.yaml
والصق تكوين المثال التالي. تأكد من تحديث المجال المخصص وعنوان IP بالقيم الخاصة بالبيئة الخاصة بك.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: puglife.server: | # you may select any name here, but it must end with the .server file extension puglife.local:53 { errors cache 30 forward . 192.11.0.1 # this is my test/dev DNS server }
قم بإنشاء ConfigMap باستخدام
kubectl apply configmap
الأمر وحدد اسم بيان YAML الخاص بك.kubectl apply -f corednsms.yaml
لإعادة تحميل ConfigMap وتمكين Kubernetes Scheduler من إعادة تشغيل CoreDNS دون وقت تعطل، قم بإجراء إعادة تشغيل متجدد باستخدام
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
المجالات الخاصة ب Stub
يمكن أيضا استخدام CoreDNS لتكوين المجالات الخاصة ب Stub.
إنشاء ملف باسم
corednsms.yaml
ولصق تكوين المثال التالي. تأكد من تحديث المجالات المخصصة وعناوين IP بقيم البيئة الخاصة بك.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: test.server: | # you may select any name here, but it must end with the .server file extension abc.com:53 { errors cache 30 forward . 1.2.3.4 } my.cluster.local:53 { errors cache 30 forward . 2.3.4.5 }
قم بإنشاء ConfigMap باستخدام
kubectl apply configmap
الأمر وحدد اسم بيان YAML الخاص بك.kubectl apply -f corednsms.yaml
لإعادة تحميل ConfigMap وتمكين Kubernetes Scheduler من إعادة تشغيل CoreDNS دون وقت تعطل، قم بإجراء إعادة تشغيل متجدد باستخدام
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
المكون الإضافي الخاص ب Hosts
يتم دعم جميع المكونات الإضافية المضمنة، لذلك يتوفر المكون الإضافي لمضيفي CoreDNS لتخصيص /etc/hosts أيضا.
إنشاء ملف باسم
corednsms.yaml
ولصق تكوين المثال التالي. تأكد من تحديث عناوين IP وأسماء المضيفين بالقيم الخاصة بالبيئة الخاصة بك.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom # this is the name of the configmap you can overwrite with your changes namespace: kube-system data: test.override: | # you may select any name here, but it must end with the .override file extension hosts { 10.0.0.1 example1.org 10.0.0.2 example2.org 10.0.0.3 example3.org fallthrough }
قم بإنشاء ConfigMap باستخدام
kubectl apply configmap
الأمر وحدد اسم بيان YAML الخاص بك.kubectl apply -f corednsms.yaml
لإعادة تحميل ConfigMap وتمكين Kubernetes Scheduler من إعادة تشغيل CoreDNS دون وقت تعطل، قم بإجراء إعادة تشغيل متجدد باستخدام
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
إكمال مجال البحث غير صحيح internal.cloudapp.net reddog.microsoft.com
يقوم Azure DNS بتكوين مجال بحث افتراضي في <vnetId>.<region>.internal.cloudapp.net
الشبكات الظاهرية باستخدام Azure DNS و كعب الروتين reddog.microsoft.com
غير الوظيفي في الشبكات الظاهرية باستخدام خوادم DNS المخصصة (راجع تحليل الاسم لوثائق الموارد لمزيد من التفاصيل). يقوم Kubernetes بتكوين إعدادات pod DNS مع ndots: 5
لدعم دقة اسم مضيف خدمة نظام المجموعة بشكل صحيح. يجمع هذان التكوينان لينتج عنهما استعلامات إكمال مجال بحث غير صالحة لا تنجح أبدا في إرسالها إلى خوادم الأسماء الأولية أثناء معالجة النظام من خلال قائمة البحث في المجال. تتسبب هذه الاستعلامات غير الصالحة في تأخير تحليل الاسم ويمكن أن تضع حملا إضافيا على خوادم DNS المصدر.
اعتبارا من إصدار AKS v20241025، تقوم AKS بتكوين CoreDNS للاستجابة باستخدام NXDOMAIN في الحالتين التاليتين لمنع إعادة توجيه استعلامات إكمال مجال البحث غير الصالحة هذه إلى DNS المصدر:
- أي استعلام للمجال الجذر أو مجال فرعي ل
reddog.microsoft.com
. - يحتوي أي استعلام لمجال فرعي له
internal.cloudapp.net
سبعة أو أكثر من التسميات في اسم المجال.- يسمح هذا التكوين لدقة الجهاز الظاهري حسب اسم المضيف بنجاح. على سبيل المثال، يرسل
aks12345.myvnetid.myregion.internal.cloudapp.net
CoreDNS (6 تسميات) إلى Azure DNS، ولكنه يرفضmcr.microsoft.com.myvnetid.myregion.internal.cloudapp.net
(8 تسميات)
- يسمح هذا التكوين لدقة الجهاز الظاهري حسب اسم المضيف بنجاح. على سبيل المثال، يرسل
يتم تنفيذ هذه الكتلة في كتلة الخادم الافتراضية في Corefile للمجموعة. إذا لزم الأمر، يمكن تعطيل تكوين الرفض هذا عن طريق إنشاء كتل خادم مخصصة للمجال المناسب مع تمكين مكون إضافي للأمام:
إنشاء ملف باسم
corednsms.yaml
ولصق تكوين المثال التالي. تأكد من تحديث عناوين IP وأسماء المضيفين بالقيم الخاصة بالبيئة الخاصة بك.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom # this is the name of the configmap you can overwrite with your changes namespace: kube-system data: override-block.server: internal.cloudapp.net:53 { errors cache 30 forward . /etc/resolv.conf } reddog.microsoft.com:53 { errors cache 30 forward . /etc/resolv.conf }
قم بإنشاء ConfigMap باستخدام
kubectl apply configmap
الأمر وحدد اسم بيان YAML الخاص بك.kubectl apply -f corednsms.yaml
لإعادة تحميل ConfigMap وتمكين Kubernetes Scheduler من إعادة تشغيل CoreDNS دون وقت تعطل، قم بإجراء إعادة تشغيل متجدد باستخدام
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
استكشاف الأخطاء وإصلاحها
للحصول على خطوات استكشاف أخطاء CoreDNS وإصلاحها، مثل التحقق من نقاط النهاية أو الدقة، راجع تصحيح دقة DNS.
تكوين تحجيم جراب CoreDNS
تعد الارتفاعات المفاجئة في حركة مرور DNS داخل مجموعات AKS تكرارا شائعا بسبب المرونة التي توفرها AKS لأحمال العمل. يمكن أن تؤدي هذه الارتفاعات إلى زيادة في استهلاك الذاكرة بواسطة pods CoreDNS. في بعض الحالات، قد تتسبب Out of memory
زيادة استهلاك الذاكرة هذه في حدوث مشكلات. لاستباق هذه المشكلة، تحجيم مجموعات AKS تلقائيا لقرون CoreDNS لتقليل استخدام الذاكرة لكل جراب. يتم تخزين الإعدادات الافتراضية لمنطق التحجيم التلقائي هذا في coredns-autoscaler
ConfigMap. ومع ذلك، قد تلاحظ أن التحجيم التلقائي الافتراضي لقرون CoreDNS ليس دائما عدوانيا بما يكفي لمنع Out of memory
حدوث مشكلات لوحدات جراب CoreDNS. في هذه الحالة، يمكنك تعديل coredns-autoscaler
ConfigMap مباشرة. يرجى ملاحظة أن مجرد زيادة عدد جرابات CoreDNS دون معالجة السبب الجذري للمشكلة Out of memory
قد توفر إصلاحا مؤقتا فقط. إذا لم تكن هناك ذاكرة كافية متاحة عبر العقد حيث يتم تشغيل جرابات CoreDNS، فلن تساعد زيادة عدد جرابات CoreDNS. قد تحتاج إلى مزيد من التحقيق وتنفيذ الحلول المناسبة مثل تحسين استخدام الموارد، أو ضبط طلبات الموارد وحدودها، أو إضافة المزيد من الذاكرة إلى العقد.
يستخدم CoreDNS مقياسا تلقائيا متناسبا للمجموعة الأفقية للتحجيم التلقائي للجراب. coredns-autoscaler
يمكن تحرير ConfigMap لتكوين منطق التحجيم لعدد pods CoreDNS. coredns-autoscaler
يدعم ConfigMap حاليا قيمتين مختلفتين لمفتاح ConfigMap: linear
والتي ladder
تتوافق مع وضعي تحكم مدعومين. linear
تنتج وحدة التحكم عددا من النسخ المتماثلة في نطاق [min,max] مكافئا ل max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) )
. تحسب ladder
وحدة التحكم عدد النسخ المتماثلة عن طريق استشارة دالتين مختلفتين للخطوة، واحدة للتحجيم الأساسي وأخرى لتحجيم العقدة، ما ينتج عنه الحد الأقصى لقيمتي النسخ المتماثلة. لمزيد من المعلومات حول أوضاع التحكم وتنسيق ConfigMap، يرجى مراجعة وثائق المصدر.
هام
يوصى بحد أدنى من نسختين متماثلتين من جراب CoreDNS لكل مجموعة. قد يؤدي تكوين نسخة متماثلة 1 CoreDNS pod كحد أدنى إلى فشل أثناء العمليات التي تتطلب استنزاف العقدة، مثل عمليات ترقية نظام المجموعة.
لاسترداد coredns-autoscaler
ConfigMap، يمكنك تشغيل kubectl get configmap coredns-autoscaler -n kube-system -o yaml
الأمر الذي سيعيد ما يلي:
apiVersion: v1
data:
ladder: '{"coresToReplicas":[[1,2],[512,3],[1024,4],[2048,5]],"nodesToReplicas":[[1,2],[8,3],[16,4],[32,5]]}'
kind: ConfigMap
metadata:
name: coredns-autoscaler
namespace: kube-system
resourceVersion: "..."
creationTimestamp: "..."
تمكين تسجيل استعلام DNS
أضف التكوين التالي إلى ConfigMap المخصص coredns:
apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: log.override: | # you may select any name here, but it must end with the .override file extension log
تطبيق تغييرات التكوين وإجبار CoreDNS على إعادة تحميل ConfigMap باستخدام الأوامر التالية:
# Apply configuration changes kubectl apply -f corednsms.yaml # Force CoreDNS to reload the ConfigMap kubectl -n kube-system rollout restart deployment coredns
عرض تسجيل تتبع أخطاء CoreDNS باستخدام
kubectl logs
الأمر .kubectl logs --namespace kube-system -l k8s-app=kube-dns
الخطوات التالية
أظهرت هذه المقالة بعض نماذج السيناريوهات لتخصيص CoreDNS. للحصول على معلومات بخصوص مشروع CoreDNS، راجع صفحة مشروع CoreDNS في المصدر.
لمعرفة المزيد بخصوص مفاهيم الشبكة الأساسية، راجع مفاهيم الشبكة للتطبيقات في AKS.
Azure Kubernetes Service