Bu konu, Container Service for Kubernetes (ACK) kümelerindeki Alan Adı Sistemi (DNS) ile ilgili sık sorulan soruları yanıtlar.
Neden bir CoreDNS Pod'una exec komutuyla erişemiyorum?
CoreDNS konteyner görüntüsü, kabuk içermeyen scratch tabanlı olarak oluşturulur. Görüntüde kabuk bulunmadığından kubectl -n kube-system exec -it {coredns-pod-name} bash komutunu çalıştırmak başarısız olur.
Bir CoreDNS Pod'unun ağ ortamını incelemek için bunun yerine nsenter kullanın. Talimatlar için bkz. CoreDNS Pod'unun ağ bağlantısını kontrol etme. CoreDNS günlüklerini görüntülemek için CoreDNS günlük analizi ve izleme özelliğini etkinleştirin. Bkz. CoreDNS günlüklerini analiz etme ve izleme.
CoreDNS neden kullanım dışı bir API kullanıyor?
Küme yükseltme ön denetimi sırasında, coredns kullanıcı aracısına sahip bir istemci /apis/discovery.k8s.io/v1beta1 adresindeki kullanım dışı discovery.k8s.io/v1beta1 API'sine erişir.
Bu durum aşağıdaki iki nedenden biriyle oluşur:
Güncel olmayan CoreDNS sürümü: Yüklü sürüm
discovery.k8s.io/v1öğesini desteklemez, bu nedenlev1beta1sürümüne geri döner.Eski API seçimi: CoreDNS daha eski bir Kubernetes sürümünde (örneğin, v1.20) başlatıldı ve başlangıçta
v1beta1kullanımı sabitlendi. Küme yükseltildikten sonra bu API kullanım dışı kaldığında bile CoreDNS bunu kullanmaya devam etti.
Her iki durumda da öncelikle CoreDNS'i yükseltin. Yükseltme mevcut değilse yeni bir API seçimi zorlamak için yeniden başlatın.
CoreDNS'i yükseltmek veya yeniden başlatmak için:
ACK konsolunda oturum açın ve sol gezinme bölmesinde Clusters öğesini tıklayın.
Küme adınızı tıklayın. Sol gezinme bölmesinde Add-ons öğesini tıklayın.
Add-ons sayfasında CoreDNS bileşenini yükseltin. Sayfa yükseltmenin mümkün olmadığını gösteriyorsa 4. adıma geçin. Daha fazla bilgi için bkz. Bileşenleri yönetme.
-
CoreDNS'i yeniden başlatın:
kubectl -n kube-system rollout restart deployment corednsÖnemliYeniden başlatma sırasında ara sıra DNS çözümleme hataları oluşabilir. Etkiyi azaltmak için bkz. IPVS hatalarından kaynaklanan aralıklı DNS zaman aşımlarını azaltma.
-
CoreDNS Pod'larının çalıştığını doğrulayın:
kubectl -n kube-system get pod -l k8s-app=kube-dnsBeklenen çıktı, Running durumunda yeni oluşturulan Pod'ları gösterir:
NAME READY STATUS RESTARTS AGE coredns-xxxxxxxxxx-xxxxx 1/1 Running 0 30s coredns-xxxxxxxxxx-yyyyy 1/1 Running 0 28sHer iki Pod da Running durumuna geçtiğinde, ön denetim sayfasındaki kullanım dışı API çağrı kayıtları güvenle yoksayılabilir ve küme yükseltmesine devam edebilirsiniz.
CoreDNS günlük hatası: dns: buffer size too small
CoreDNS varsayılan UDP arabellek boyutunu (bufsize) 1232 bayt olarak ayarlar. Bir DNS yanıtı bu sınırı aştığında çözümleme başarısız olur ve günlüklerde dns: buffer size too small hatası görünür. Bu durum genellikle büyük yanıt döndüren DNS sorgularını etkiler. Arka plan bilgisi için bu GitHub sorununa bakın.
Bu sorunu otomatik olarak çözen CoreDNS v1.7.1 veya sonraki bir sürüme yükseltin. v1.7.1'den önceki sürümler için CoreDNS ConfigMap içinde bufsize değerini manuel olarak ayarlayın:
kubectl edit cm -n kube-system coredns
\[512, 4096\] aralığında (dahil) bir değerle bufsize ekleyin:
. {
bufsize 1220
log
}
Daha fazla bilgi için bkz. CoreDNS bufsize eklenti belgeleri.
Neden bir Hizmet oluşturulduktan sonra istekler tutarsız şekilde NXDOMAIN ve NOERROR döndürüyor?
CoreDNS birden çok Pod çoğaltması olarak çalışır. Yeni bir Hizmet oluşturulduktan hemen sonra bir Pod, API sunucusundan en son Hizmet bilgilerini henüz almamış olabilirken diğer Pod bu bilgilere zaten sahip olabilir. Eşitlenmemiş Pod'a yönlendirilen istekler NXDOMAIN döndürür; güncellenmiş Pod'a yönlendirilen istekler ise NOERROR döndürür. Tüm CoreDNS Pod'ları API sunucusuyla eşitlendiğinde tutarsızlık kendiliğinden çözülür. Manuel bir işlem gerekmez.
Windows düğümlerinde DNS çözümleme
Windows düğümlerindeki Pod'ların DNS davranışları Linux'tan farklıdır:
**
ClusterFirstWithHostNetdesteklenmez.** Windows, Pod'lar için bu DNS ilkesini desteklemez.**Nokta (
.) içeren tüm adlar tam nitelikli alan adları (FQDN) olarak değerlendirilir.** Windows, arama soneki listesini tarayan Linux'un aksine nokta içeren adlar için DNS arama son eklerini eklemez.Pod başına yalnızca bir DNS soneki kullanılır. Sonek, Pod'un ad alanından türetilir; örneğin,
defaultad alanındaki bir Poddefault.svc.cluster.localsonekini alır. Bu,kubernetes.default.svc.cluster.localvekubernetesadlarının doğru şekilde çözüldüğü ancakkubernetes.defaultveyakubernetes.default.svcgibi kısmen nitelikli adların çözülmediği anlamına gelir.**DNS sorguları için
Resolve-DnsNamekullanın.** Windows, küçük davranış farkları olan birden çok DNS çözümleyicisini destekler. Resolve-DnsName PowerShell cmdlet'i en tutarlı sonuçları verir.
Daha fazla bilgi için bkz. Hizmetler ve Pod'lar için DNS.