प्रतिनिधि इंटरव्यू विषय

बैकएंड इंटरव्यू: v1.36 डिप्रिकेशन के बाद आप Kubernetes Service externalIPs को सुरक्षित रूप से कैसे माइग्रेट करेंगे?

बैकएंडकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक मल्टी-टेनेंट क्लस्टर में अभी भी ऐसे Services हैं जो spec.externalIPs का उपयोग कर रहे हैं। Kubernetes v1.36 ने इस फ़ील्ड को डिप्रिकेट कर दिया है। शून्य-डाउनटाइम माइग्रेशन डिज़ाइन करें और CVE-2020-8554 जोखिम, परमिशन बाउंड्री और वर्ज़न टाइमलाइन की व्याख्या करें।

प्रश्न और दायरा

आप एक बेयर-मेटल Kubernetes क्लस्टर के मालिक हैं जहां टीमें पब्लिक एड्रेस को सीधे Services पर रूट करने के लिए Service.spec.externalIPs का उपयोग करती हैं। v1.36 में अपग्रेड करने के बाद, डिप्रिकेशन चेतावनियां दिखाई देती हैं और सुरक्षा समीक्षक चिंतित हैं कि कोई टेनेंट किसी मनमाने एड्रेस पर दावा कर सकता है और ट्रैफ़िक को इंटरसेप्ट कर सकता है। एक माइग्रेशन डिज़ाइन करें: वास्तविक डिपेंडेंसी खोजें, प्रति एंट्री पॉइंट LoadBalancer कंट्रोलर या Gateway API चुनें, नए उपयोग को ब्लॉक करें, और रोलबैक साबित करें।

Kubernetes दस्तावेज़ बताते हैं कि externalIPs Kubernetes द्वारा एलोकेट या ओनरशिप-चेक नहीं किए जाते हैं। v1.36 में इस फ़ील्ड को डिप्रिकेट कर दिया गया है; बाद के रिलीज़ में kube-proxy व्यवहार को डिसेबल करने और अंततः इसे हटाने की उम्मीद है। वर्तमान कम्पैटिबिलिटी विंडो को दीर्घकालिक लक्ष्य से अलग करें; डिप्रिकेशन का मतलब तत्काल डिलीशन नहीं है।

संदर्भ और सीमाएं

Service नेटवर्किंग, RBAC, एडमिशन पॉलिसी, माइग्रेशन क्रम और ऑब्ज़र्वेबिलिटी पर ध्यान केंद्रित करें। क्लाउड लोड बैलेंसर्स, बेयर-मेटल नेटवर्क डिवाइस और DNS प्लेटफ़ॉर्म डिपेंडेंसी हैं; उनके अनुबंध, एड्रेस-ओनरशिप प्रूफ़, डुअल-एंट्री विंडो और फ़ेल्योर फ़ॉलबैक बताएं।

इंटरव्यूअर क्या टेस्ट करता है

  • क्या आप Service externalIPs स्पेक फ़ील्ड को Node ExternalIP एड्रेस और प्रदर्शित LoadBalancer एड्रेस से अलग पहचानते हैं।
  • क्या आप ऑडिट, ट्रैफ़िक, परमिशन्स, कंट्रोलर्स और DNS के माध्यम से एंड-टू-एंड माइग्रेशन को ट्रेस कर सकते हैं।
  • क्या DenyServiceExternalIPs मौजूदा बिज़नेस ट्रैफ़िक को डिलीट किए बिना नए राइट्स को ब्लॉक कर सकता है।
  • क्या आप LoadBalancer कंट्रोलर्स, MetalLB-जैसे कंट्रोलर्स और Gateway API की ओनरशिप और रोलबैक सीमाओं की तुलना करते हैं।
  • क्या मेट्रिक्स और चरणबद्ध कटओवर यह साबित करते हैं कि कोई ट्रैफ़िक ब्लैक होल या IP हाईजैक नहीं है।

30-सेकंड का उत्तर

“मैं Service स्पेक्स, ऑडिट लॉग्स, DNS, नोड रूटिंग और वास्तविक ट्रैफ़िक की इन्वेंट्री तैयार करूँगा, जिसमें प्रत्येक externalIP को एक टेनेंट, पोर्ट और बैकएंड पर मैप किया जाएगा। माइग्रेशन के दौरान मैं केवल नए मानों को ब्लॉक करने के लिए DenyServiceExternalIPs को इनेबल करूँगा, जिससे मौजूदा ऑब्जेक्ट्स को हटाया जा सके। प्रत्येक एंट्री पॉइंट के लिए मैं एक एडमिनिस्ट्रेटर-नियंत्रित LoadBalancer कंट्रोलर या Gateway API चुनूंगा, समानांतर पथ के माध्यम से हेल्थ चेक्स, सोर्स एड्रेस और कनेक्शन ड्रेनिंग को मान्य करूँगा, फिर DNS या अपस्ट्रीम को स्विच करूँगा। पुराने ट्रैफ़िक के शून्य तक पहुँचने के बाद, externalIPs को हटा दूंगा, एक रोलबैक स्नैपशॉट बनाए रखूँगा, और ऑडिट, 5xx, कनेक्शन-फ़ेल्योर और एड्रेस-कॉन्फ़्लिक्ट मेट्रिक्स के साथ रोलआउट को नियंत्रित करूँगा।”

चरण-दर-चरण समाधान

  1. इन्वेंट्री तैयार करें। externalIPs का उपयोग करने वाले प्रत्येक Service, उसके एड्रेस, पोर्ट, नेमस्पेस, ओनर, DNS TTL, प्रोटोकॉल, EndpointSlices, एक्सटर्नल ट्रैफ़िक पॉलिसी और हाल के ट्रैफ़िक की सूची बनाएं। इस फ़ील्ड को ExternalIP नाम की Node .status.addresses प्रविष्टियों से अलग करें।
  1. सुरक्षा जोखिम का मॉडल बनाएं। एक उपयोगकर्ता Service स्पेक में externalIPs लिखता है जबकि Kubernetes एड्रेस को एलोकेट नहीं करता है या विशिष्टता (uniqueness) की गारंटी नहीं देता है। कम-विश्वास वाला टेनेंट दूसरे टेनेंट के एड्रेस पर दावा कर सकता है और ट्रैफ़िक को इंटरसेप्ट कर सकता है। एड्रेस और टेनेंट के अनुसार विसंगतियों को सहसंबंधित करते हुए, क्रिएट्स, अपडेट्स, डिलीट्स और kube-proxy नियमों का ऑडिट करें।
  1. पहले नए उपयोग को ब्लॉक करें। DenyServiceExternalIPs इनेबल करें। यह इस फ़ील्ड का उपयोग करने वाले नए Services और मौजूदा Services में जोड़े गए नए मानों को अस्वीकार करता है, जबकि मौजूदा मानों को हटाना संभव रहता है। लागू करने से पहले ऑडिट या कम जोखिम वाले क्लस्टर में परीक्षण करें; मौजूदा ऑब्जेक्ट्स को अलग से माइग्रेट करें।
  1. रिप्लेसमेंट चुनें। क्लाउड वातावरण में एडमिनिस्ट्रेटर-नियंत्रित type: LoadBalancer को प्राथमिकता दें। बेयर मेटल पर एड्रेस पूल और कॉन्फ़्लिक्ट चेक्स वाले कंट्रोलर का उपयोग करें। जब रोल सेपरेशन या शेयर्ड रूटिंग महत्वपूर्ण हो, तो Gateway API का उपयोग करें: प्लेटफ़ॉर्म Gateway का मालिक होता है और एप्लिकेशन सीमित HTTPRoute ऑब्जेक्ट्स को प्रबंधित करते हैं।
yaml
kind: Gateway
apiVersion: gateway.networking.k8s.io/v1
spec:
  gatewayClassName: platform-public
  addresses:
  - type: IPAddress
    value: 192.0.2.4

यह केवल एडमिनिस्ट्रेटर-ओन्ड एड्रेसिंग को दर्शाता है। इसे लागू करने से पहले परिनियोजन के लिए GatewayClass, कंट्रोलर क्षमताओं, प्रमाणपत्रों और IP पूल को सत्यापित करें।

  1. समानांतर सत्यापन चलाएं। नए एंट्री पॉइंट को एक अलग होस्टनेम या कम-TTL DNS के पीछे रखें और कनेक्शन सफलता, TLS, सोर्स एड्रेस, लंबे कनेक्शन, हेल्थ चेक्स और EndpointSlice कन्वर्जेंस की तुलना करें। यदि किसी IP का पुन: उपयोग कर रहे हैं, तो अपस्ट्रीम स्विच करने से पहले नए कंट्रोलर में ओनरशिप रिकॉर्ड करें ताकि दो कार्यान्वयन इसे कभी भी एक साथ अनाउंस न करें।
  1. ड्रेन करें और हटाएं। पुराने एंट्री पॉइंट पर कोई नया कनेक्शन न होने का निरीक्षण करें और अधिकतम कनेक्शन लाइफ़टाइम की प्रतीक्षा करें। ऑडिट साक्ष्य और रोलबैक स्नैपशॉट बनाए रखते हुए externalIPs को हटाएं। क्रम को DNS, लोड बैलेंसर, Service और बैकएंड के बीच कम से कम एक सत्यापन योग्य पथ बनाए रखना चाहिए।
  1. वर्ज़न और रोलबैक की योजना बनाएं। v1.36 डिप्रिकेशन चेतावनियां उत्सर्जित करता है; प्रकाशित टाइमलाइन के अनुसार kube-proxy व्यवहार को v1.40 से पहले डिसेबल नहीं किया जाएगा और v1.43 से पहले पूरी तरह से नहीं हटाया जाएगा। रोलबैक केवल एक ओनरशिप-मान्य पुराने एंट्री पॉइंट को पुनर्स्थापित करता है; यह मनमाने टेनेंट राइट्स को कभी दोबारा नहीं खोलता है। यदि रिप्लेसमेंट विफल हो जाता है, तो नए जोखिम को ब्लॉक करना जारी रखते हुए DNS या कंट्रोलर कॉन्फ़िगरेशन को अस्थायी रूप से रिवर्ट करें।

मॉडल उत्तर

मैं प्रत्येक externalIP को एक माइग्रेशन एसेट के रूप में मानूंगा, न कि आंख मूंदकर बदले जाने वाले फ़ील्ड के रूप में। API इन्वेंट्री, ऑडिट, DNS, नोड रूल्स और ट्रैफ़िक लॉग्स एड्रेस, टेनेंट, पोर्ट, कनेक्शन लाइफ़टाइम और ओनरशिप स्थापित करते हैं। यह फ़ील्ड यूज़र-राइटेबल Service स्पेक है और Kubernetes इसे एलोकेट या कॉन्फ़्लिक्ट-चेक नहीं करता है, जो इंटरसेप्शन जोखिम के CVE-2020-8554 वर्ग को बनाता है।

माइग्रेशन के दौरान मैं मौजूदा मानों को हटाने की अनुमति देते हुए नए परिवर्धनों को अस्वीकार करने के लिए DenyServiceExternalIPs को इनेबल करूँगा। रिप्लेसमेंट एंट्री पॉइंट पर निर्भर करता है: एक क्लाउड LoadBalancer, एडमिनिस्ट्रेटर एड्रेस पूल वाला बेयर-मेटल कंट्रोलर, या प्लेटफ़ॉर्म-ओन्ड Gateways और एप्लिकेशन-ओन्ड सीमित रूट्स के साथ Gateway API। एक समानांतर होस्टनेम या कम-TTL कटओवर पुराने कनेक्शनों को ड्रेन करने और फ़ील्ड को हटाने से पहले कनेक्शन, TLS, सोर्स-एड्रेस और हेल्थ-चेक व्यवहार की तुलना करता है।

योजना में v1.36 चेतावनियां, सबसे पहले अपेक्षित v1.40 kube-proxy व्यवहार परिवर्तन, और सबसे पहले v1.43 पूर्ण निष्कासन दर्ज है। रोलबैक केवल एक मान्य एडमिनिस्ट्रेटर-स्वामित्व वाले एंट्री पॉइंट को पुनर्स्थापित करता है। मैं एड्रेस कॉन्फ़्लिक्ट्स, 5xx, कनेक्शन विफलताओं, DNS प्रसार में देरी और शेष Services को ट्रैक करूँगा।

सामान्य गलतियां

  • गलती: डिप्रिकेशन को तत्काल डिलीशन मानना → यह क्यों विफल होता है: कम्पैटिबिलिटी विंडो को गलत समझा जाता है और अनियोजित डाउनटाइम का कारण बनता है → सुधार: चेतावनियों, व्यवहार अक्षमता और निष्कासन को अलग मील के पत्थर के रूप में योजना बनाएं।
  • गलती: externalIPs को सीधे loadBalancerIP से बदलना → यह क्यों विफल होता है: एड्रेस पूल्स और कॉन्फ़्लिक्ट चेक्स अभी भी बायपास हो सकते हैं → सुधार: एक एडमिनिस्ट्रेटर-नियंत्रित कंट्रोलर को स्थिति एलोकेट और प्रकाशित करने दें।
  • गलती: एडमिशन प्रवर्तन शुरू होने पर प्रत्येक पुराने फ़ील्ड को डिलीट करना → यह क्यों विफल होता है: कोई ट्रैफ़िक या कनेक्शन-ड्रेन साक्ष्य नहीं है → सुधार: परिवर्धनों को ब्लॉक करें, रिप्लेसमेंट को कैनरी करें, ड्रेन करें, फिर एसेट के आधार पर हटाएं।
  • गलती: केवल Services की जांच करना, DNS, नोड नियमों और ट्रैफ़िक की नहीं → यह क्यों विफल होता है: छिपे हुए एंट्री पॉइंट्स या ब्लैक होल बने रहते हैं → सुधार: एंड-टू-एंड माइग्रेशन इन्वेंट्री और ऑब्ज़र्वेशन विंडो बनाए रखें।
  • गलती: टेनेंट्स को Gateway एड्रेस का मालिक बनने देना → यह क्यों विफल होता है: रिप्लेसमेंट परमिशन की खामी को फिर से बना देता है → सुधार: प्लेटफ़ॉर्म-स्वामित्व वाले Gateways और सीमित एप्लिकेशन रूट्स।

फ़ॉलो-अप प्रश्न और उत्तर

क्या DenyServiceExternalIPs मौजूदा Services को प्रभावित करता है?

यह इस फ़ील्ड का उपयोग करने वाले नए Services और मौजूदा Services में जोड़े गए नए मानों को अस्वीकार करता है; मौजूदा मानों को हटाना संभव रहता है। लक्ष्य वर्ज़न में व्यवहार को सत्यापित करें और अस्वीकृति की घटनाओं का निरीक्षण करें। यह एक गार्ड है, स्वचालित माइग्रेशन टूल नहीं।

बेयर मेटल पर हाथ से LoadBalancer IP क्यों न भरें?

मैन्युअल असाइनमेंट में अभी भी एड्रेस पूल्स, कॉन्फ़्लिक्ट डिटेक्शन, हेल्थ स्थिति और ऑडिट का अभाव है। एडमिनिस्ट्रेटर-स्वामित्व वाले पूल वाला एक कंट्रोलर एलोकेशन, रिलीज़ और विशिष्टता को प्लेटफ़ॉर्म की ज़िम्मेदारी बनाता है; निश्चित एड्रेस के लिए अभी भी स्पष्ट स्वीकृति की आवश्यकता होती है।

Gateway API एप्लिकेशन सेल्फ़-सर्विस को कैसे सुरक्षित रख सकता है?

प्लेटफ़ॉर्म Gateway और GatewayClass बनाता है और एड्रेस, लिसनर्स और क्रॉस-नेमस्पेस संदर्भों को प्रतिबंधित करता है। एप्लिकेशन टीमें संदर्भ नीतियों, पॉलिसी ऑब्जेक्ट्स और ऑडिट नियंत्रणों के अधीन HTTPRoutes सबमिट करती हैं।

आप लंबे समय तक चलने वाले कनेक्शन और WebSockets को कैसे संभालते हैं?

DNS या एंट्री पॉइंट को स्विच करने से पहले कनेक्शन लाइफ़टाइम को मापें। पुराने पथ पर नए कनेक्शन रोकें लेकिन मौजूदा कनेक्शनों को ड्रेन होने दें, जहाँ उपयुक्त हो डुअल-एंट्री पुनः प्रयास व्यवहार का उपयोग करें। मेट्रिक्स में नए-कनेक्शन विफलताओं को स्वाभाविक क्लोज़र से अलग करें।

रोलबैक स्विच को कब हटाया जा सकता है?

पुराने ट्रैफ़िक के शून्य होने के बाद, प्रत्येक Service द्वारा फ़ील्ड हटा दिए जाने, एड्रेस-कॉन्फ़्लिक्ट जांच पास होने, DNS TTL विंडो समाप्त होने, और नए पथ के अपने ऑब्ज़र्वेशन SLO को पूरा करने के बाद। फिर ऑडिट साक्ष्य को बनाए रखते हुए स्नैपशॉट को हटाएं; एक कैलेंडर तिथि साक्ष्य की जगह नहीं ले सकती।

संदर्भ

  • Kubernetes v1.36 Service ExternalIPs डिप्रिकेशन (Kubernetes Blog)
  • Service दस्तावेज़ीकरण (Kubernetes Documentation)
  • Admission Control दस्तावेज़ीकरण (Kubernetes Documentation)
  • Gateway API दस्तावेज़ीकरण (Kubernetes Documentation)

इंटरव्यू चेकलिस्ट

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

एक वाक्य में निष्कर्ष

ExternalIPs माइग्रेशन यूज़र-राइटेबल एंट्री पॉइंट को एडमिनिस्ट्रेटर-स्वामित्व वाले, ऑडिट योग्य, सत्यापन योग्य एड्रेस-एलोकेशन पथ से बदल देता है।

अभ्यास जारी रखें

यदि कोई क्लस्टर Gateway API, MetalLB और क्लाउड LoadBalancer का एक साथ उपयोग करता है, तो एक एंट्री-पॉइंट कैटलॉग, एड्रेस-ओनरशिप मॉडल और क्रॉस-एनवायरनमेंट रोलबैक प्रोटोकॉल डिज़ाइन करें।

सार्वजनिक स्रोत

संबंधित प्रश्न