Azure Kubernetes Service ile CoreDNS hizmetini özelleştirme
Azure Kubernetes Service (AKS), tüm 1.12.x ve üzeri kümelerle küme DNS yönetimi ve çözümlemesi için CoreDNS projesini kullanır. CoreDNS özelleştirmesi ve Kubernetes hakkında daha fazla bilgi için resmi yukarı akış belgelerine bakın.
AKS yönetilen bir hizmet olduğundan CoreDNS ( CoreFile) için ana yapılandırmayı değiştiremezsiniz. Bunun yerine, varsayılan ayarları geçersiz kılmak için Kubernetes ConfigMap kullanırsınız. Varsayılan AKS CoreDNS ConfigMaps'i görmek için komutunu kullanın kubectl get configmaps --namespace=kube-system coredns -o yaml
.
Bu makalede, AKS'de temel CoreDNS özelleştirme seçenekleri için ConfigMap'lerin nasıl kullanılacağı gösterilmektedir. Bu yaklaşım, CoreDNS'yi CoreFile gibi diğer bağlamlarda yapılandırmaktan farklıdır.
Not
Daha önce küme DNS yönetimi ve çözümlemesi için kube-dns kullanılıyordu, ancak artık kullanım dışı bırakılıyordu. kube-dns
Kubernetes yapılandırma haritası aracılığıyla farklı özelleştirme seçenekleri sundu. CoreDNS, kube-dns ile geriye dönük olarak uyumlu değildir . Daha önce kullandığınız tüm özelleştirmeler CoreDNS için güncelleştirilmelidir.
Başlamadan önce
- Bu makalede, mevcut bir AKS kümeniz olduğu varsayılır. AKS kümesine ihtiyacınız varsa Azure CLI, Azure PowerShell veya Azure portalını kullanarak bir küme oluşturabilirsiniz.
- Çalıştırdığınız CoreDNS sürümünü doğrulayın. Yapılandırma değerleri sürümler arasında değişebilir.
- Aşağıdaki örnekler gibi yapılandırmalar oluşturduğunuzda, veri bölümündeki adlarınızın .server veya .override ile bitmesi gerekir. Bu adlandırma kuralı, komutunu kullanarak
kubectl get configmaps --namespace=kube-system coredns -o yaml
görüntüleyebileceğiniz varsayılan AKS CoreDNS ConfigMap içinde tanımlanır.
Eklenti desteği
Tüm yerleşik CoreDNS eklentileri desteklenir. Hiçbir eklenti/üçüncü taraf eklentisi desteklenmez.
DNS'yi yeniden yazma
Anında DNS adı yeniden yazma işlemleri gerçekleştirmek için CoreDNS'yi AKS ile özelleştirebilirsiniz.
adlı
corednsms.yaml
bir dosya oluşturun ve aşağıdaki örnek yapılandırmayı yapıştırın. değerini kendi tam etki alanı adınızla değiştirdiğinden<domain to be rewritten>
emin olun.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 }
Önemli
CoreDNS hizmeti IP'si gibi bir DNS sunucusuna yeniden yönlendirirseniz, bu DNS sunucusunun yeniden yazılan etki alanı adını çözümleyebilmesi gerekir.
komutunu kullanarak ConfigMap'i
kubectl apply configmap
oluşturun ve YAML bildiriminizin adını belirtin.kubectl apply -f corednsms.yaml
kullanarak özelleştirmelerin uygulandığını
kubectl get configmaps
doğrulayın ve coredns-custom ConfigMap'inizi belirtin.kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
ConfigMap'i yeniden yüklemek ve Kubernetes Scheduler'ın kapalı kalma süresi olmadan CoreDNS'yi yeniden başlatmasını sağlamak için kullanarak
kubectl rollout restart
sıralı bir yeniden başlatma gerçekleştirin.kubectl -n kube-system rollout restart deployment coredns
Özel iletme sunucusu
Ağ trafiğiniz için bir iletme sunucusu belirtmeniz gerekiyorsa, DNS'yi özelleştirmek için bir ConfigMap oluşturabilirsiniz.
adlı
corednsms.yaml
bir dosya oluşturun ve aşağıdaki örnek yapılandırmayı yapıştırın. Adı ve adresi kendi ortamınızın değerleriyle değiştirdiğindenforward
emin olun.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 }
komutunu kullanarak ConfigMap'i
kubectl apply configmap
oluşturun ve YAML bildiriminizin adını belirtin.kubectl apply -f corednsms.yaml
ConfigMap'i yeniden yüklemek ve Kubernetes Scheduler'ın kapalı kalma süresi olmadan CoreDNS'yi yeniden başlatmasını sağlamak için kullanarak
kubectl rollout restart
sıralı bir yeniden başlatma gerçekleştirin.kubectl -n kube-system rollout restart deployment coredns
Özel etki alanları kullanma
Yalnızca dahili olarak çözümlenebilen özel etki alanları yapılandırmak isteyebilirsiniz. Örneğin, geçerli bir üst düzey etki alanı olmayan özel puglife.local etki alanını çözümlemek isteyebilirsiniz. Özel etki alanı ConfigMap olmadan AKS kümesi adresi çözümleyemez.
adlı
corednsms.yaml
yeni bir dosya oluşturun ve aşağıdaki örnek yapılandırmayı yapıştırın. Özel etki alanını ve IP adresini kendi ortamınızın değerleriyle güncelleştirdiğinden emin olun.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 }
komutunu kullanarak ConfigMap'i
kubectl apply configmap
oluşturun ve YAML bildiriminizin adını belirtin.kubectl apply -f corednsms.yaml
ConfigMap'i yeniden yüklemek ve Kubernetes Scheduler'ın kapalı kalma süresi olmadan CoreDNS'yi yeniden başlatmasını sağlamak için kullanarak
kubectl rollout restart
sıralı bir yeniden başlatma gerçekleştirin.kubectl -n kube-system rollout restart deployment coredns
Saplama etki alanları
CoreDNS, saplama etki alanlarını yapılandırmak için de kullanılabilir.
adlı
corednsms.yaml
bir dosya oluşturun ve aşağıdaki örnek yapılandırmayı yapıştırın. Özel etki alanlarını ve IP adreslerini kendi ortamınızın değerleriyle güncelleştirdiğinden emin olun.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 }
komutunu kullanarak ConfigMap'i
kubectl apply configmap
oluşturun ve YAML bildiriminizin adını belirtin.kubectl apply -f corednsms.yaml
ConfigMap'i yeniden yüklemek ve Kubernetes Scheduler'ın kapalı kalma süresi olmadan CoreDNS'yi yeniden başlatmasını sağlamak için kullanarak
kubectl rollout restart
sıralı bir yeniden başlatma gerçekleştirin.kubectl -n kube-system rollout restart deployment coredns
Konaklar eklentisi
Tüm yerleşik eklentiler desteklenir, bu nedenle CoreDNS konakları eklentisi /etc/hosts'ı da özelleştirmek için kullanılabilir.
adlı
corednsms.yaml
bir dosya oluşturun ve aşağıdaki örnek yapılandırmayı yapıştırın. IP adreslerini ve ana bilgisayar adlarını kendi ortamınızın değerleriyle güncelleştirdiğinden emin olun.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 }
komutunu kullanarak ConfigMap'i
kubectl apply configmap
oluşturun ve YAML bildiriminizin adını belirtin.kubectl apply -f corednsms.yaml
ConfigMap'i yeniden yüklemek ve Kubernetes Scheduler'ın kapalı kalma süresi olmadan CoreDNS'yi yeniden başlatmasını sağlamak için kullanarak
kubectl rollout restart
sıralı bir yeniden başlatma gerçekleştirin.kubectl -n kube-system rollout restart deployment coredns
internal.cloudapp.net ve reddog.microsoft.com için geçersiz arama etki alanı tamamlamaları
Azure DNS, Azure DNS kullanarak sanal ağlarda varsayılan arama etki alanını <vnetId>.<region>.internal.cloudapp.net
ve özel DNS sunucuları kullanan sanal ağlarda işlevsel olmayan saplama reddog.microsoft.com
yapılandırıyor (daha fazla ayrıntı için kaynaklar için ad çözümleme belgelerine bakın). Kubernetes, küme hizmeti ana bilgisayar adı çözümlemesini düzgün bir şekilde desteklemek için ile ndots: 5
pod DNS ayarlarını yapılandırmaktadır. Bu iki yapılandırma, sistem etki alanı arama listesi aracılığıyla işlenirken yukarı akış adı sunucularına hiçbir zaman başarılı olmayan geçersiz arama etki alanı tamamlama sorguları gönderilmesine neden olmak için birleştirilir. Bu geçersiz sorgular ad çözümleme gecikmelerine neden olur ve yukarı akış DNS sunucularına ek yük yükleyebilir.
v20241025 AKS sürümünden itibaren AKS, bu geçersiz arama etki alanı tamamlama sorgularının yukarı akış DNS'sine iletilmesini önlemek için aşağıdaki iki durumda CoreDNS'yi NXDOMAIN ile yanıt verecek şekilde yapılandırıyor:
- Kök etki alanı veya alt etki
reddog.microsoft.com
alanı için herhangi bir sorgu. - Etki alanı adında yedi veya daha fazla etiket bulunan bir alt etki
internal.cloudapp.net
alanı sorgusu.- Bu yapılandırma, konak adına göre sanal makine çözümlemenin yine başarılı olmasını sağlar. Örneğin, CoreDNS Azure DNS'ye (6 etiket) gönderir
aks12345.myvnetid.myregion.internal.cloudapp.net
ancak reddedermcr.microsoft.com.myvnetid.myregion.internal.cloudapp.net
(8 etiket)
- Bu yapılandırma, konak adına göre sanal makine çözümlemenin yine başarılı olmasını sağlar. Örneğin, CoreDNS Azure DNS'ye (6 etiket) gönderir
Bu blok, kümenin Corefile dosyasındaki varsayılan sunucu bloğunda uygulanır. Gerekirse, bu reddetme yapılandırması uygun etki alanı için özel sunucu blokları oluşturularak ve ileriye doğru eklenti etkinleştirilerek devre dışı bırakılabilir:
adlı
corednsms.yaml
bir dosya oluşturun ve aşağıdaki örnek yapılandırmayı yapıştırın. IP adreslerini ve ana bilgisayar adlarını kendi ortamınızın değerleriyle güncelleştirdiğinden emin olun.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 }
komutunu kullanarak ConfigMap'i
kubectl apply configmap
oluşturun ve YAML bildiriminizin adını belirtin.kubectl apply -f corednsms.yaml
ConfigMap'i yeniden yüklemek ve Kubernetes Scheduler'ın kapalı kalma süresi olmadan CoreDNS'yi yeniden başlatmasını sağlamak için kullanarak
kubectl rollout restart
sıralı bir yeniden başlatma gerçekleştirin.kubectl -n kube-system rollout restart deployment coredns
Sorun giderme
Uç noktaları veya çözümü denetleme gibi genel CoreDNS sorun giderme adımları için bkz . DNS çözümlemesinde hata ayıklama.
CoreDNS pod ölçeklendirmesini yapılandırma
AKS kümeleri içindeki DNS trafiğindeki ani ani artışlar, AKS'nin iş yükleri için sağladığı esneklik nedeniyle sık karşılaşılan bir durumdur. Bu ani artışlar CoreDNS podlarının bellek tüketiminde artışa neden olabilir. Bazı durumlarda bu artan bellek tüketimi sorunlara neden Out of memory
olabilir. Aks kümeleri bu sorunu önceden ele almak için CoreDNS podlarını otomatik olarak ölçeklendirin ve pod başına bellek kullanımını azaltın. Bu otomatik ölçeklendirme mantığının varsayılan ayarları ConfigMap'te coredns-autoscaler
depolanır. Ancak, CoreDNS podlarının varsayılan otomatik ölçeklendirmesinin, CoreDNS podlarınızın sorunlarını önlemek Out of memory
için her zaman yeterince agresif olmadığını gözlemleyebilirsiniz. Bu durumda, doğrudan ConfigMap'i coredns-autoscaler
değiştirebilirsiniz. Sorunun kök nedenini ele almadan CoreDNS podlarının sayısını artırmanın Out of memory
yalnızca geçici bir düzeltme sağlayabileceğini lütfen unutmayın. CoreDNS podlarının çalıştığı düğümlerde yeterli bellek yoksa, CoreDNS podlarının sayısını artırmak yararlı olmaz. Daha fazla araştırma yapmanız ve kaynak kullanımını iyileştirme, kaynak isteklerini ve sınırlarını ayarlama veya düğümlere daha fazla bellek ekleme gibi uygun çözümleri uygulamanız gerekebilir.
CoreDNS, pod otomatik ölçeklendirmesi için yatay küme orantılı otomatik ölçeklendiricisi kullanır. coredns-autoscaler
ConfigMap, CoreDNS podlarının sayısı için ölçeklendirme mantığını yapılandırmak üzere düzenlenebilir. coredns-autoscaler
ConfigMap şu anda iki farklı ConfigMap anahtar değerini destekler: linear
ve ladder
desteklenen iki denetim moduna karşılık gelir. Denetleyici , linear
ile eşdeğer [min,max] aralığında bir dizi çoğaltma verir max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) )
. Denetleyici ladder
, biri çekirdek ölçeklendirme ve diğeri düğüm ölçeklendirme için iki farklı adım işlevine başvurarak çoğaltma sayısını hesaplar ve iki çoğaltma değerinin en yüksek değerini verir. Denetim modları ve ConfigMap biçimi hakkında daha fazla bilgi için lütfen yukarı akış belgelerine bakın.
Önemli
Küme başına en az 2 CoreDNS pod çoğaltması önerilir. En az 1 CoreDNS pod çoğaltmasının yapılandırılması, küme yükseltme işlemleri gibi düğüm boşaltma gerektiren işlemler sırasında hatalara neden olabilir.
ConfigMap'i coredns-autoscaler
almak için aşağıdaki komutu kubectl get configmap coredns-autoscaler -n kube-system -o yaml
çalıştırabilirsiniz:
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 sorgu günlüğünü etkinleştirme
Coredns-custom ConfigMap'inize aşağıdaki yapılandırmayı ekleyin:
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
Yapılandırma değişikliklerini uygulayın ve aşağıdaki komutları kullanarak CoreDNS'yi ConfigMap'i yeniden yüklemeye zorlar:
# Apply configuration changes kubectl apply -f corednsms.yaml # Force CoreDNS to reload the ConfigMap kubectl -n kube-system rollout restart deployment coredns
komutunu kullanarak
kubectl logs
CoreDNS hata ayıklama günlüğünü görüntüleyin.kubectl logs --namespace kube-system -l k8s-app=kube-dns
Sonraki adımlar
Bu makalede CoreDNS özelleştirmesi için bazı örnek senaryolar gösterildi. CoreDNS projesi hakkında bilgi için CoreDNS yukarı akış projesi sayfasına bakın.
Temel ağ kavramları hakkında daha fazla bilgi edinmek için bkz . AKS'deki uygulamalar için ağ kavramları.
Azure Kubernetes Service