9 puan yazan lemonmint 2025-04-10 | 1 yorum | WhatsApp'ta paylaş
  • Küçük çaplı bir kod değişikliğinin (yalnızca tek bir if ifadesi 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 found PR’ı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ç:
    1. İç cihaz dış sunucuya bağlanmaya çalışır
    2. NAT cihazı kaynak IP/port’u genel IP/port’a dönüştürür (SNAT)
    3. 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:
    1. Pod’dan küme dışına iletişim: Pod’un iç IP’sini düğümün genel IP’sine dönüştürme
    2. 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, conntrack ve iptables ile 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 if blok 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ı:
    1. Pod’dan küme dışına iletişim: Pod’un özel IP’sini düğümün genel IP’sine dönüştürme (SNAT)
    2. 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, conntrack alt sistemi ve iptables ile 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, src ve dst değ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

 
ethanhur 2025-04-14

Harika deneyiminizi paylaştığınız için teşekkürler!