Troubleshooting 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-systemkomutunu ç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 statusyazabilirsiniz.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-namespaceskomutuyla devrede olan kuralları listeleyin.Etiket Uyuşmazlığı:
podSelectorveyanamespaceSelectorkı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-systemiçinde çalışır.kubectl get pods -n kube-system -l k8s-app=kube-dnskomutuyla DNS pod'larınınRunningdurumunda olduğundan emin olun. Gerekirsekubectl logsile loglarına bakın.İçeriden Çözümleme Testi: Sorun yaşayan Pod'un içine girip bir DNS sorgusu atın:
nslookup kubernetes.defaultveyanslookup hedef-servis.namespace.svc.cluster.localYapılandırma Hatası: DNS sunucunuz yanıt vermiyorsa, yanlış bir ayar yapılmış olabilir.
kubectl get configmap coredns -n kube-system -o yamlile 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ı?
CrashLoopBackOffdurumundalarsa, servis onlara trafik göndermez.Etiket (Label) Eşleşiyor mu? Servisinizin YAML dosyasındaki
spec.selectorile 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
portdeğeri ile uygulamanın dinlediğitargetPortdeğ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