Cilium में नेटवर्क स्थिरता सुधार का केस स्टडी: छोटे कोड बदलाव से हासिल हुआ चौंकाने वाला असर
(gosuda.org)- छोटे स्तर के कोड बदलाव (सिर्फ एक
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 जानकारी स्टोर करती है
- प्रक्रिया:
- आंतरिक डिवाइस बाहरी सर्वर से कनेक्ट होने की कोशिश करता है
- NAT डिवाइस मूल IP/port को public IP/port में बदलता है (SNAT)
- बाहरी सर्वर के response को फिर से आंतरिक डिवाइस के लिए बदला जाता है (DNAT)
Kubernetes में NAT का उपयोग
- Kubernetes में NAT के दो प्रमुख उपयोग के मामले महत्वपूर्ण हैं:
- Pod से cluster के बाहर संचार: Pod के आंतरिक IP को node के public IP में बदलना
- 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 के प्रमुख उपयोग:
- Pod से cluster के बाहर संचार: Pod के private IP को node के public IP में बदलना (SNAT)
- 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 टिप्पणियां
इतना शानदार अनुभव साझा करने के लिए धन्यवाद!