CoreDNS “Loop Detected” Hatası ve Pratik Çözümü

CoreDNS “Loop Detected” Hatası ve Pratik Çözümü

Kubernetes üzerinde çalışan herkes, DNS altyapısında zaman zaman beklenmedik hatalarla karşılaşabilir. Ben de yakın zamanda, CoreDNS pod’larımda şu tipte bir hata ile yüzleştim:

[FATAL] plugin/loop: Loop (169.254.25.10:43652 -> 169.254.25.10:53) detected for zone ".", see https://coredns.io/plugins/loop#troubleshooting.

Eğer siz de böyle bir uyarı alıyorsanız, büyük ihtimalle CoreDNS’iniz kendi kendine sorgu döngüsüne girmiş demektir. Neyse ki çözümü oldukça basit!


Hatanın Sebebi

Bu hatanın asıl nedeni, CoreDNS’in forward . /etc/resolv.conf ayarını kullanıyor olması. Kulağa mantıklı gelse de, eğer sistemin resolv.conf dosyası tekrar CoreDNS’i gösteriyorsa, DNS sorguları tekrar kendine dönüyor ve sonsuz bir döngü başlıyor. Sonuçta CoreDNS, kendisine tekrar tekrar sorgu yönlendiriyor ve sonunda pes edip “loop detected” hatasını veriyor.


Doğru CoreDNS Ayarı Nasıl Olmalı?

Çözüm çok basit: forward . satırında /etc/resolv.conf yerine doğrudan gerçek DNS sunucularınızın IP adreslerini kullanmanız gerekiyor. Örneğin:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . 192.0.2.11 192.0.2.12
        cache 30
        loop
        reload
        loadbalance
    }
Buradaki 192.0.2.11 ve 192.0.2.12 adresleri örnektir, kendi ortamınızda dışarıya çıkabilen DNS sunucularınızın IP’lerini yazmalısınız.

Adım Adım Çözüm

  1. forward . satırını gerçek DNS IP’leriyle değiştir:
    /etc/resolv.conf yerine kendi DNS sunucularınızı yazın.

CoreDNS ConfigMap’i Düzenle:

kubectl -n kube-system edit configmap coredns

Pod’ları Yeniden Başlat:

kubectl -n kube-system rollout restart deployment coredns

Son Kontrol

Değişikliği yaptıktan sonra CoreDNS pod’larının sağlıklı çalışıp çalışmadığını kontrol edebilirsiniz:

kubectl -n kube-system get pods -l k8s-app=kube-dns

Bir pod üzerinde DNS çözümleme test etmek için:

kubectl run -i --tty dns-test --image=busybox --restart=Never -- sh
# Sonrasında pod içinde
nslookup google.com

Kubernetes’te DNS çözümleme döngüsüne düşmek hiç hoş bir deneyim değil, ama bu sorunun çözümü gerçekten kolay. Yeter ki forward . satırında asla /etc/resolv.conf kullanmayın; onun yerine dış DNS sunucularınızın IP adreslerini verin.

Read more

Kubernetes NodeLocalDNS ConfigMap Güncellemesi Nasıl Yapılır?

Kubernetes NodeLocalDNS ConfigMap Güncellemesi Nasıl Yapılır?

Kubernetes’te DNS işlerini hızlandırmak için NodeLocalDNS sıkça tercih ediliyor. Zamanla, kendi DNS sunucunu veya internal bir hostname eklemen gerekirse, işin anahtarı ConfigMap dosyasını doğru düzenlemekten geçiyor. Aşağıda, gerçek bir örnekle, ConfigMap’i nasıl güncelleyeceğini ve önemli satırları kısa kısa notlarla anlatıyorum. NodeLocalDNS İçin Örnek ConfigMap Mevcut ConfigMap’i düzenlemek