EKS'te DNS Gizemi 2. Bölüm: Gizli Istio ztunnel Katmanı
EKS'te DNS timeout'larının gerçek nedeni: Istio ambient modundaki ztunnel'in gizli DNS capture katmanı ve tek satırlık annotation çözümü.
Bir mühendis, EKS üzerinde çalışan pod'larda tekrarlayan 'i/o timeout' hatalarını çözmek için bilinen üç DNS sorununu (ndots amplifikasyonu, NodeLocal DNS, ENI başına 1024 pps sınırı) tek tek ölçtü ve hepsini temiz buldu. Metrikler suçsuz çıkınca gerçek neden, Istio'nun ambient modunda her node'da çalışan ztunnel bileşeninin DNS çağrılarını sessizce yakalayıp yönlendirmesiydi.
Bu 'DNS capture' özelliği, pod ile NodeLocal DNS arasına görünmez bir ara katman ekliyor; paket düşerse pod açısından NodeLocal'in kendisi düşürmüş gibi görünüyor, çünkü syscall hâlâ 169.254.20.10 adresine gidiyor sanılıyor. Sonuç olarak NodeLocal ve VPC resolver metrikleri tamamen temiz kalırken hata devam ediyordu.
Çözüm tek satırlık bir annotation (ambient.istio.io/dns-capture: false) ile ztunnel'in ilgili pod için DNS yakalamasını devre dışı bırakmak oldu ve hata oranı sıfıra indi. Yazının asıl mesajı: servis mesh'i kullanan kümelerde DNS yolunun sandığınızdan farklı olabileceğini, isteğin geçtiği her DaemonSet bileşenini önceden doğrulamanız gerektiğini gösteriyor.