आप चल रहे कंटेनर के अंदर WireGuard कॉन्फ़िगरेशन संपादित करते हैं, वह काम करता है, और अगला image अपडेट उसे मिटा देता है। कुछ भी ग़लत कॉन्फ़िगर नहीं था। फ़ाइल कंटेनर की लिखने योग्य परत में रहती थी, जो केवल उसी कंटेनर इंस्टेंस के लिए मौजूद है। महत्वपूर्ण तुलना यह नहीं है कि कौन-सा उपकरण इस्तेमाल करें, बल्कि यह है कि आपका डिप्लॉयमेंट कौन-से इनपुट घोषित करता है। आपने हाथ से जो भी संपादित किया वह ऐसा इनपुट है जिसे डिप्लॉयमेंट नहीं जानता।

दो तरह की स्थिति, एक अनावश्यक है

कंटेनर में रनटाइम पर किए गए बदलावों के लिए एक लिखने योग्य परत होती है, और कंटेनर बदले जाने पर वह परत हटा दी जाती है। यह कॉन्फ़िगरेशन भंडार नहीं है और बैकअप भी नहीं है। image और घोषित इनपुट ही जो चलता है उसकी पूरी परिभाषा हैं।

पूछें कि आपकी कौन-सी VPN फ़ाइलें घोषित इनपुट हैं और कौन-सी संयोग:

docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpn

diff सूचीबद्ध करता है कि लिखने योग्य परत में क्या बदला, और यह ठीक उन चीज़ों का समूह है जो गायब होंगी। mount सूची दिखाती है कि क्या बचता है। दोनों की तुलना कुछ खोने से पहले प्रश्न का उत्तर देती है।

bind mount, नामित volume या secret: हर एक क्या सुरक्षित करता है

तीनों VPN प्रोफ़ाइल रख सकते हैं, और वे इसमें भिन्न हैं कि कौन इसे पढ़ सकता है और बदलने पर क्या होता है।

MechanismSurvives recreationWho can read it
Writable layerNoAnyone with container access, until it is gone
Bind mountYes, while the host path existsWhatever the host permissions allow
Named volumeYes, until the volume is removedManaged by the runtime
SecretYes, as a declared inputThe container process, by design

bind mount होस्ट पथ को मैप करता है, इसलिए फ़ाइल उतनी ही सुरक्षित है जितना वह पथ और उतनी ही दृश्यमान जितना होस्ट की अनुमतियाँ अनुमति देती हैं। नामित volume को runtime प्रबंधित करता है और कंटेनर हटाने पर भी बना रहता है, जो इसे डिप्लॉयमेंट के स्वामित्व वाली स्थिति के लिए सुरक्षित डिफ़ॉल्ट बनाता है। secret तंत्र उस सामग्री के लिए है जिसे आप image या environment variable में नहीं चाहते।

हर environment variable और हर होस्ट फ़ाइल को समान सुरक्षा न मानें, क्योंकि वे नहीं हैं।

कंटेनर के अंदर संपादन ही जाल है

जाल उपकरण नहीं, संपादन की दिशा है। चल रहे कंटेनर के अंदर किया गया बदलाव डिप्लॉयमेंट के लिए अदृश्य है, इसलिए अगला पुनर्निर्माण उसे चुपचाप वापस लौटा देता है और लक्षण image में रिग्रेशन जैसा दिखता है। यदि निदान के लिए वहाँ बदलाव करना ही हो, तो उसे तुरंत बाहर कॉपी करें और घोषित इनपुट में रखें। फिर दोबारा बनाएँ ताकि साबित हो कि डिप्लॉयमेंट उसे दोबारा पैदा करता है।

प्रोफ़ाइल में निजी कुंजियाँ और खाता सामग्री हो सकती है, जो उस फ़ाइल के बैकअप को फ़ाइल कॉपी के बजाय गुप्त सामग्री प्रबंधन का काम बनाता है। स्वामित्व और पढ़ने की पहुँच को कंटेनर की वास्तविक प्रक्रिया तक सीमित रखें, बजाय होस्ट निर्देशिका को चौड़ा करने के जिससे अनुमति त्रुटि गायब हो जाए।

यही चौड़ा करना कंटेनर की सुविधा को होस्ट के खुलासे में बदल देता है।

जानबूझकर दोबारा बनाएँ, फिर चार चीज़ें जाँचें

image संस्करण, आवश्यक डिवाइस और क्षमताएँ, नेटवर्क कनेक्शन और स्थायी इनपुट लिखें। डिवाइस और क्षमता सूची VPN कंटेनर के लिए विशेष रूप से महत्वपूर्ण है, क्योंकि टनल को नेटवर्क डिवाइस और उसे कॉन्फ़िगर करने का विशेषाधिकार चाहिए।

पुष्टि करें कि कौन-सी उत्पन्न रनटाइम स्थिति सहेजने के बजाय दोबारा बनाई जानी चाहिए। टनल ने पहले शुरू होने पर जो कुंजियाँ बनाईं वे स्थिति हैं, और उन्हें रखना या दोबारा बनाना ऐसा निर्णय है जिसके परिणाम हर उस peer के लिए हैं जो पुरानी सार्वजनिक कुंजी जानता है।

नियंत्रित पुनर्निर्माण के बाद पहचान, रूटिंग, DNS और आवश्यक विफलता-ब्लॉक जाँचें। बिना त्रुटि शुरू होने वाली प्रक्रिया इन चारों में से एक भी साबित नहीं करती। इसे टनल चालू रहने पर और बंद करने के बाद फिर जाँचें, क्योंकि विफलता-ब्लॉक केवल तभी दिखता है जब टनल चला जाता है।

कंटेनर के बाहर पुनर्प्राप्ति प्रति रखें

कंटेनर से स्वतंत्र रहने वाली पुनर्प्राप्ति प्रति रखें, और दस्तावेज़ित प्रक्रिया से उसे पुनर्स्थापित करके जाँचें। VPN प्रोफ़ाइल का बिना जाँचा गया बैकअप एक आशा है, खासकर जब पुनर्प्राप्ति पथ में वे अनुमतियाँ शामिल हों जो कंटेनर प्रक्रिया को चाहिए।

यदि VPN रखने वाला कंटेनर बदला जाए, तो उसका नेटवर्क स्टैक साझा करने वाले अनुप्रयोगों को runtime के समर्थित जीवनचक्र में समन्वित करें।

यही समन्वय पुनरारंभ और रुकावट के बीच का अंतर है। डिप्लॉयमेंट को बताना चाहिए कि कॉन्फ़िगरेशन कहाँ से आता है, और volume दस्तावेज़ीकरण वह जगह है जहाँ जाँचें कि runtime वास्तव में क्या बनाए रखता है।

संबंधित लेख