align-justifyTroubleshooting Internal Networking

Kubernetes cluster'ınızda iki uygulama aniden birbiriyle konuşmayı kestiğinde, sorunun kaynağını bulmak samanlıkta iğne aramaya benzeyebilir. Sorun DNS'te mi? Güvenlik duvarında mı? Yoksa etiketlerde mi (labels) bir yazım hatası var?

Kaos içinde kaybolmamak için Kubernetes ağ mimarisini 4 mantıksal katmana ayırmalı ve sorunu aşağıdan yukarıya doğru (altyapıdan uygulamaya) izole etmeliyiz. İşte ağ sorunlarını çözerken izlemeniz gereken 4 adımlı standart prosedür.

1. Katman: CNI

Container Network Interface (CNI), Kubernetes'in fiziksel ağ kablosudur (Örn: Cilium, Calico, Flannel). Eğer CNI çalışmıyorsa, üstteki hiçbir şey çalışmaz.

Nasıl Kontrol Edilir?

Tüm CNI eklentileri arka planda kube-system namespace'i içinde birer Pod olarak çalışır. İlk iş olarak tesisatın çöküp çökmediğine bakmalıyız:

  • kubectl get pods -n kube-system komutunu çalıştırın. CNI pod'larında sürekli bir yeniden başlama (CrashLoopBackOff) var mı?

  • Eğer Cilium kullanıyorsanız, sunucuların (Node) ağ durumunu görmek için terminale doğrudan cilium status yazabilirsiniz.

  • Node sağlığını kontrol edin. Alt yapıda Docker veya Containerd gibi runtime'ların ayakta olduğundan emin olun.

2. Katman: Network Policies

Tesisat sağlam ama trafik hala geçmiyor mu? Belki de görünmez bir güvenlik görevlisi kapıyı tutuyordur. Network Policies, Kubernetes'in iç güvenlik duvarıdır. Yanlış yazılmış bir kural, trafiği sessizce (hiçbir hata mesajı vermeden) engeller.

En Sık Yapılan Hatalar ve Çözümleri:

  • Gizli Bloklar: Boş bırakılmış bir Network Policy, varsayılan olarak o namespace'e gelen veya giden tüm trafiği engeller. kubectl get networkpolicies --all-namespaces komutuyla devrede olan kuralları listeleyin.

  • Etiket Uyuşmazlığı: podSelector veya namespaceSelector kısmındaki etiketleri kontrol edin. Kurallar doğru uygulamaları hedefliyor mu?

  • Manuel Test: İzin verildiğini düşündüğünüz iki Pod arasına girip fiziksel test yapın:

    kubectl exec -it test-pod -- nc -zv <hedef-pod-ip> 80

3. Katman: Service Discovery ve DNS

Güvenlik duvarında sorun yok ama uygulamanız "Böyle bir adres bulunamadı" hatası alıyor. Bu durum, içerideki telefon rehberinin (CoreDNS) çöktüğünü gösterir.

DNS Sorunlarını Nasıl Yakalarız?

  • CoreDNS Sağlığı: Tıpkı CNI gibi, DNS de kube-system içinde çalışır. kubectl get pods -n kube-system -l k8s-app=kube-dns komutuyla DNS pod'larının Running durumunda olduğundan emin olun. Gerekirse kubectl logs ile loglarına bakın.

  • İçeriden Çözümleme Testi: Sorun yaşayan Pod'un içine girip bir DNS sorgusu atın:

    nslookup kubernetes.default veya nslookup hedef-servis.namespace.svc.cluster.local

  • Yapılandırma Hatası: DNS sunucunuz yanıt vermiyorsa, yanlış bir ayar yapılmış olabilir. kubectl get configmap coredns -n kube-system -o yaml ile konfigürasyon dosyasını inceleyin.

4. Katman: Services, Endpoints ve Pods

Kablolar sağlam, güvenlik duvarı açık, DNS adresi çözümlüyor ama hala bağlantı yok! Sorun çok büyük ihtimalle YAML dosyanızdaki ufak bir insan hatasıdır.

Adım Adım Eşleştirme Kontrolü:

  • Pod'lar Hayatta mı? Trafiğin gideceği hedef Pod'lar gerçekten ayakta mı? CrashLoopBackOff durumundalarsa, servis onlara trafik göndermez.

  • Etiket (Label) Eşleşiyor mu? Servisinizin YAML dosyasındaki spec.selector ile Pod'unuzun etiketleri harfi harfine aynı olmak zorundadır. Aksi takdirde servisiniz "kör" olur.

  • Endpoint Listesi Dolu mu? kubectl get endpoints <servis-adi> komutunu çalıştırın. Eğer karşısında IP adresleri yerine <none> yazıyorsa, servisiniz hiçbir Pod'u bulamamış demektir.

  • Port Karmaşası: Servisin port değeri ile uygulamanın dinlediği targetPort değerinin birbirini tuttuğundan emin olun.

Altın İpucu (Port-Forward):

Sorunun Service nesnesinde olup olmadığını kesin olarak anlamak için servisi aradan çıkarın! kubectl port-forward <pod-adi> 8080:80 komutuyla doğrudan Pod'a kendi bilgisayarınızdan bağlanın. Uygulama cevap veriyorsa sorun Pod'da değil, önündeki Service tanımındadır.


Şüphelenilen Katman

Odak Noktası

Hayat Kurtaran Komutlar

CNI (Altyapı)

Ağ eklentileri ayakta mı?

kubectl get pods -n kube-system

Network Policies

Trafik engelleniyor mu?

kubectl get networkpolicies

CoreDNS

İsimler IP'ye çevriliyor mu?

nslookup, kubectl logs -l k8s-app=kube-dns -n kube-system

Service & Endpoints

Trafik doğru Pod'a ulaşıyor mu?

kubectl get endpoints, kubectl describe svc

Last updated