9 पॉइंट द्वारा lemonmint 2025-04-10 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • छोटे स्तर के कोड बदलाव (सिर्फ एक if स्टेटमेंट जोड़ने) से सिस्टम स्थिरता में बड़ा योगदान देने वाले PR का परिचय
  • "bpf:nat: Restore ORG NAT entry if it's not found" PR का प्रभाव और महत्व

NAT(Network Address Translation) का मूल सिद्धांत

  • NAT एक ऐसी तकनीक है जो कई डिवाइसों को एक ही public IP साझा करने देती है
  • यह आंतरिक डिवाइस (Private IP:Port) और बाहरी इंटरनेट के बीच संचार संभव बनाती है
  • NAT table मूल पते और परिवर्तित पते के बीच mapping जानकारी स्टोर करती है
  • प्रक्रिया:
    1. आंतरिक डिवाइस बाहरी सर्वर से कनेक्ट होने की कोशिश करता है
    2. NAT डिवाइस मूल IP/port को public IP/port में बदलता है (SNAT)
    3. बाहरी सर्वर के response को फिर से आंतरिक डिवाइस के लिए बदला जाता है (DNAT)

Kubernetes में NAT का उपयोग

  • Kubernetes में NAT के दो प्रमुख उपयोग के मामले महत्वपूर्ण हैं:
    1. Pod से cluster के बाहर संचार: Pod के आंतरिक IP को node के public IP में बदलना
    2. NodePort के जरिए बाहर से Pod तक संचार: बाहरी request को किसी खास Pod तक route करना

Cilium का NAT implementation तरीका

  • आम तौर पर Linux में NAT को conntrack और iptables से संभाला जाता है
  • Cilium eBPF तकनीक का उपयोग करके पारंपरिक Linux network stack को bypass करता है
  • Cilium NAT table को सीधे मैनेज करने के लिए LRU hash map(BPF_MAP_TYPE_LRU_HASH) का उपयोग करता है

समस्या पैदा होने का कारण

  • Lookup समस्या: दोनों दिशाओं (outgoing/incoming) के packet processing के लिए वही डेटा दो बार स्टोर किया जाता है (RevSNAT)
  • LRU की सीमा: सीमित संसाधनों के कारण कम इस्तेमाल होने वाले entries हटाए जाते हैं
  • कनेक्शन लॉस # Cilium के छोटे कोड बदलाव से नेटवर्क स्थिरता में बड़े सुधार का केस

परिचय: छोटे कोड बदलाव का बड़ा प्रभाव

  • सिर्फ एक if ब्लॉक जोड़ने से सिस्टम स्थिरता में बहुत बड़ा योगदान देने वाला मामला
  • संबंधित PR: "bpf:nat: Restore ORG NAT entry if it's not found"
  • इसे network क्षेत्र के गैर-विशेषज्ञ भी समझ सकें, इस तरह समझाया गया है

NAT(Network Address Translation) का मूल सिद्धांत

  • NAT एक ऐसी तकनीक है जो कई डिवाइसों को एक ही public IP साझा करने देती है
  • यह आंतरिक Private IP:Port संयोजन को बाहरी Public IP:Port में map करके काम करती है
  • कार्यप्रणाली:
    • आंतरिक डिवाइस बाहरी सर्वर से कनेक्ट होने की कोशिश करता है
    • NAT डिवाइस आंतरिक संचार को बाहरी संचार में बदलता है (SNAT)
    • response लौटने पर उसे फिर मूल आंतरिक संचार में बदला जाता है (DNAT)
    • यह परिवर्तन जानकारी NAT table में दर्ज होती है

Kubernetes में NAT का उपयोग

  • Kubernetes की network संरचना जटिल होती है और कई जगह NAT का उपयोग होता है
  • NAT के प्रमुख उपयोग:
    1. Pod से cluster के बाहर संचार: Pod के private IP को node के public IP में बदलना (SNAT)
    2. NodePort के जरिए बाहर से Pod तक संचार: बाहरी traffic को सही Pod तक पहुंचाने के लिए DNAT और SNAT दोनों साथ में करना

Cilium का खास तरीका

  • सामान्य Linux सिस्टम में NAT को conntrack subsystem और iptables से मैनेज किया जाता है
  • Cilium eBPF तकनीक का उपयोग करके पारंपरिक Linux network stack को bypass करता है
  • SNAT processing के लिए यह LRU hash map(BPF_MAP_TYPE_LRU_HASH) के रूप में SNAT table को सीधे मैनेज करता है

समस्या का कारण और लक्षण

  • Lookup समस्या:

    • NAT processing validation के लिए hash table lookup जरूरी है
    • तेज lookup के लिए उसी डेटा को src और dst मान उलटकर RevSNAT के रूप में table में दो बार insert किया जाता है
  • LRU(Least Recently Used) समस्या:

    • resource limit के कारण डेटा LRU logic से हट सकता है
  • संयुक्त समस्या:

    • एक TCP connection के लिए वही डेटा दो बार रिकॉर्ड होता है
    • इन दो entries में से एक भी LRU से हट जाए, तो पूरा connection टूट सकता है

सरल लेकिन प्रभावी समाधान

  • मुख्य विचार: अगर एक दिशा का packet दिखे, तो दूसरी दिशा की entry भी साथ में update की जाए
  • इस सरल तरीके से:
    • दोनों दिशाओं की entries update होती रहती हैं और LRU eviction priority से दूर हो जाती हैं
    • सिर्फ एक entry हटने से पूरा संचार टूटने वाले scenario की संभावना घटती है
    • benchmark test में network stability में बड़ा सुधार देखा गया

निष्कर्ष और सीख

  • यह दिखाता है कि जटिल सिस्टम में भी सरल विचार बड़ा बदलाव ला सकते हैं
  • बुनियादी CS ज्ञान (NAT कैसे काम करता है) के आधार पर समस्या हल की गई
  • समस्या से बचने का दूसरा तरीका: NAT table का आकार बढ़ाना
  • वस्तुनिष्ठ डेटा के आधार पर समस्या का गहराई से विश्लेषण करने और योगदान देने वाले डेवलपर के जुनून को सम्मान

तकनीकी दृष्टिकोण का मूल्य

  • समस्या की जड़ को समझकर उसे हल करने के तरीके का महत्व
  • छोटे कोड बदलाव से पूरे सिस्टम की स्थिरता को काफी बेहतर किया जा सकता है
  • जटिल सिस्टम में भी मूल सिद्धांतों को समझने का महत्व

1 टिप्पणियां

 
ethanhur 2025-04-14

इतना शानदार अनुभव साझा करने के लिए धन्यवाद!