Cilium’da ağ kararlılığını artırma örneği: küçük bir kod değişikliğiyle elde edilen şaşırtıcı sonuç
(gosuda.org)- Küçük çaplı bir kod değişikliğinin (yalnızca tek bir
ififadesi eklenmesi) sistem kararlılığına nasıl büyük katkı sağladığını gösteren bir PR örneği bpf:nat: Restore ORG NAT entry if it's not foundPR’ının etkisi ve önemi
NAT (Network Address Translation) temel prensibi
- NAT, birden fazla cihazın tek bir genel IP’yi paylaşmasını sağlayan bir teknoloji
- İç cihazlar (Private IP:Port) ile dış internet arasındaki iletişimi mümkün kılar
- NAT tablosu, özgün adres ile dönüştürülen adres arasındaki eşleme bilgisini saklar
- Süreç:
- İç cihaz dış sunucuya bağlanmaya çalışır
- NAT cihazı kaynak IP/port’u genel IP/port’a dönüştürür (SNAT)
- Dış sunucunun yanıtı tekrar iç cihaza dönüştürülür (DNAT)
Kubernetes’te NAT kullanımı
- Kubernetes’te NAT’ın önemli biçimde kullanıldığı iki ana senaryo:
- Pod’dan küme dışına iletişim: Pod’un iç IP’sini düğümün genel IP’sine dönüştürme
- NodePort üzerinden dışarıdan Pod’a iletişim: Dış istekleri belirli bir Pod’a yönlendirme
Cilium’un NAT uygulama yöntemi
- Genel olarak Linux’ta NAT,
conntrackveiptablesile işlenir - Cilium, geleneksel Linux ağ yığınını atlamak için eBPF teknolojisini kullanır
- Cilium, NAT tablosunu doğrudan yönetmek için LRU hash map (
BPF_MAP_TYPE_LRU_HASH) kullanır
Sorunun ortaya çıkış nedeni
- Lookup sorunu: Çift yönlü (giden/gelen) paket işleme için aynı verinin iki kez saklanması (RevSNAT)
- LRU’nun sınırları: Sınırlı kaynaklar nedeniyle daha az kullanılan öğeler kaldırılır
- **Bağlantı kaybı # Cilium’un küçük bir kod değişikliğiyle ağ kararlılığında büyük artış sağladığı örnek
Giriş: küçük kod değişikliklerinin büyük etkisi
- Yalnızca tek bir
ifblok eklenmesinin sistem kararlılığına muazzam katkı sağladığı bir örnek - İlgili PR:
bpf:nat: Restore ORG NAT entry if it's not found - Ağ alanında uzman olmayanların da anlayabilmesi için açıklama
NAT (Network Address Translation) temel prensibi
- NAT, birden fazla cihazın tek bir genel IP’yi paylaşmasını sağlayan bir teknoloji
- İç Private IP:Port birleşimini dış Public IP:Port’a eşleyerek çalışır
- Çalışma süreci:
- İç cihaz dış sunucuya bağlanmaya çalışır
- NAT cihazı iç iletişimi dış iletişime dönüştürür (SNAT)
- Yanıt döndüğünde tekrar özgün iç iletişime dönüştürülür (DNAT)
- Dönüşüm bilgisi NAT tablosuna kaydedilir
Kubernetes’te NAT kullanımı
- Kubernetes karmaşık bir ağ yapısına sahiptir ve NAT birçok yerde kullanılır
- Başlıca NAT kullanım senaryoları:
- Pod’dan küme dışına iletişim: Pod’un özel IP’sini düğümün genel IP’sine dönüştürme (SNAT)
- NodePort üzerinden dışarıdan Pod’a iletişim: Dış trafiği uygun Pod’a iletmek için DNAT ve SNAT’ın aynı anda uygulanması
Cilium’un özel yaklaşımı
- Tipik Linux sistemlerinde NAT,
conntrackalt sistemi veiptablesile yönetilir - Cilium, geleneksel Linux ağ yığınını atlamak için eBPF teknolojisini kullanır
- SNAT işlemek için SNAT tablosunu doğrudan LRU hash map (
BPF_MAP_TYPE_LRU_HASH) biçiminde yönetir
Sorunun nedeni ve belirtileri
-
Sorgulama (Lookup) sorunu:
- NAT işlemini doğrulamak için hash tablo sorgusu gerekir
- Hızlı sorgulama için aynı veri,
srcvedstdeğerleri ters çevrilerek RevSNAT olarak tabloya iki kez eklenir
-
LRU (Least Recently Used) sorunu:
- Kaynak kısıtları nedeniyle veriler LRU mantığıyla silinebilir
-
Birleşik problem:
- Tek bir TCP bağlantısı için aynı veri iki kez kaydedilir
- Bu iki kayıttan biri bile LRU tarafından silinirse tüm bağlantı kopabilir
Basit ama etkili çözüm
- Temel fikir: Tek yöndeki bir paket gözlemlendiğinde karşı yöndeki kayıt da birlikte güncellensin
- Bu basit yaklaşımla:
- Her iki yönlü kayıt da güncellenir ve LRU silme önceliğinde daha geriye düşer
- Yalnızca tek taraflı bir kaydın silinmesi nedeniyle tüm iletişimin kopması senaryosunun olasılığı azalır
- Benchmark testlerinde ağ kararlılığı belirgin biçimde artar
Sonuç ve çıkarımlar
- Karmaşık sistemlerde bile basit fikirlerin büyük değişim yaratabileceğini gösteren bir örnek
- Temel bilgisayar bilimi bilgisiyle (NAT’ın çalışma şekli) probleme çözüm bulunmuş
- Sorundan kaçınmak için başka bir yöntem: NAT tablosu boyutunu artırmak
- Sorunu nesnel kanıt verileriyle ayrıntılı biçimde analiz eden ve katkı sunan geliştiricinin tutkusuna saygı
Teknik yaklaşımın değeri
- Problemin kök nedenini anlayıp çözmenin önemini gösterir
- Basit bir kod değişikliğiyle tüm sistemin kararlılığının büyük ölçüde iyileştirilebileceği dersini verir
- Karmaşık sistemlerde bile temel prensipleri anlamanın önemini vurgular
1 yorum
Harika deneyiminizi paylaştığınız için teşekkürler!