प्रॉम्प्ट और संदर्भ
एक ऑपरेशन्स प्लेटफॉर्म को डिबगिंग के लिए Kubernetes नोड्स से systemd लॉग्स की आवश्यकता है, लेकिन उसे किरायेदारों (tenants) को नोड फाइलसिस्टम एक्सपोज़ नहीं करना चाहिए। Kubernetes v1.36 में स्टेबल NodeLogQuery की सीमाओं, एक्सेस कंट्रोल, क्वेरी पैरामीटर्स, पेजिनेशन, रेट लिमिटिंग, और नोड के अगम्य (unreachable) होने या परिणाम बहुत बड़ा होने पर क्या करना चाहिए, इसे समझाइए।
इंटरव्यूअर क्या मूल्यांकन करता है
- NodeLogQuery को नोड फाइलों को पढ़ने, कंटेनर लॉग्स और एक केंद्रीकृत (centralized) लॉगिंग सिस्टम से अलग पहचानना।
enableSystemLogQuery, Kubelet ऑथेंटिकेशन और ऑथराइजेशन, तथा टेनेंट आइसोलेशन की व्याख्या करना।- टाइम रेंज, गंभीरता (severity), आउटपुट साइज़, डेडलाइन्स और कॉनकरेंसी लिमिट्स पर विचार करना।
- एक ऑब्जर्वेबल, ऑडिटेबल और रिवर्सेबल ऑपरेशन्स वर्कफ़्लो प्रदान करना।
पूछे जाने वाले स्पष्टीकरण प्रश्न
- क्या टार्गेट्स नोड सर्विसेज हैं, कर्नेल लॉग्स हैं, या Pod stdout/stderr हैं? इनके अलग-अलग एंट्री पॉइंट्स होते हैं।
- क्या कॉलर एक क्लस्टर एडमिनिस्ट्रेटर है, ऑन-कॉल SRE है, या टेनेंट सेल्फ-सर्विस प्लेटफॉर्म है?
- क्या क्रॉस-नोड, लॉन्ग-रेंज, या लाइव-फॉलो क्वेरीज़ की आवश्यकता है? वे नोड लोड को प्रभावित करते हैं।
- क्या ऐतिहासिक खोज (historical search) के लिए पहले से कोई लॉग कलेक्शन सिस्टम उपलब्ध है?
30-सेकंड का उत्तर ढांचा
पहले बाउंड्री तय करें: NodeLogQuery एक नियंत्रित Kubelet नोड-लॉग क्षमता है, न कि मनमाना (arbitrary) फाइल एक्सेस। फिर फ़्लो बताएं: कॉलर को ऑथेंटिकेट और ऑथराइज करें, नोड और क्वेरी स्कोप को वैलिडेट करें, Kubelet को नोड लॉग इंटरफ़ेस इन्वोक करने दें, और बाउंडेड परिणाम लौटाएं। अंत में सुरक्षा गार्डरेल्स बताएं: enableSystemLogQuery को इनेबल करें, समय, लाइनों, बाइट्स, कॉनकरेंसी और डेडलाइन्स को सीमित करें; ऐतिहासिक खोज को सेंट्रलाइज्ड लॉग्स पर भेजें; और असामान्य अनुरोधों पर ऑडिट तथा अलर्ट करें।
चरण-दर-चरण गहन विश्लेषण
1. लॉग स्रोतों और क्षमता की सीमाओं को परिभाषित करें
NodeLogQuery नोड सिस्टम लॉग्स जैसे systemd और कर्नेल लॉग्स को लक्षित करता है। Pod stdout/stderr को कंटेनर लॉगिंग या एक सेंट्रलाइज्ड कलेक्टर का उपयोग करना चाहिए। क्वेरी इंटरफ़ेस को मनमाने फाइलसिस्टम पाथ्स को स्वीकार नहीं करना चाहिए, क्रेडेंशियल डायरेक्टरीज़ को नहीं पढ़ना चाहिए, या Kubelet ऑथराइजेशन को बायपास नहीं करना चाहिए। टेनेंट्स को फ़िल्टर किए गए नोड इवेंट्स या एग्रीगेट्स मिलने चाहिए, जबकि रॉ नोड लॉग्स केवल नियंत्रित SRE रोल्स तक ही सीमित रहने चाहिए।
2. टेनेंट्स को ऑथेंटिकेट, ऑथराइज और आइसोलेट करें
Kubelet HTTPS एंडपॉइंट रिक्वेस्ट एट्रिब्यूट्स का मूल्यांकन करने से पहले क्लाइंट को ऑथेंटिकेट करता है। API Server या ऑपरेशन्स प्रॉक्सी एक डेडिकेटेड आइडेंटिटी का उपयोग करता है जिसके नियम अनुमत नोड-लॉग क्षमताओं तक सीमित होते हैं; टेनेंट्स को nodes/proxy या इसके समकक्ष व्यापक एक्सेस प्राप्त नहीं होता है। प्लेटफॉर्म टेनेंट-टू-नोड बाइंडिंग को भी सत्यापित करता है ताकि नोड का नाम या लेबल बदलने से किसी अन्य टेनेंट के नोड तक न पहुँचा जा सके।
3. क्वेरीज़ को बाउंड करें और संसाधनों की सुरक्षा करें
एक छोटी डिफ़ॉल्ट विंडो के साथ एक स्पष्ट नोड, सर्विस यूनिट, टाइम रेंज और गंभीरता (severity) की आवश्यकता रखें। अधिकतम अवधि, लौटाए गए बाइट्स, लाइनों, कॉनकरेंसी और प्रति-टेनेंट दर निर्धारित करें। जब कोई सीमा समाप्त हो जाए, तो एक रिज्यूमेबल पेज टोकन या एक स्पष्ट एरर लौटाएं। स्ट्रीमिंग स्वीकार्य है, लेकिन डिस्कनेक्ट, डेडलाइन या कैप होने पर Kubelet और प्रॉक्सी संसाधनों को रिलीज़ किया जाना चाहिए।
4. ऑब्जर्व करें, विफलताओं को संभालें और रोलबैक करें
कॉलर की आइडेंटिटी, नोड, पैरामीटर सारांश, प्रारंभ और समाप्ति समय, लौटाए गए बाइट्स, ट्रंकेशन का कारण और ऑथराइजेशन परिणाम रिकॉर्ड करें; ऑडिट स्ट्रीम में लॉग कंटेंट को कॉपी न करें। जब कोई नोड अगम्य हो तो तेजी से फेल (fail fast) हों और सेंट्रलाइज्ड लॉग्स की सिफारिश करें। Kubelet के ओवरलोड होने पर सर्किट ब्रेकर ट्रिप करें और अलर्ट जारी करें। NodeLogQuery v1.36 में स्टेबल है और डिफ़ॉल्ट रूप से इनेबल है, जबकि enableSystemLogQuery एक ऑपरेशनल सेटिंग बनी हुई है; इसे एक कैनरी नोड पर रोल आउट करें और डिसेबल करने का पाथ बनाए रखें।
मॉडल उत्तर
मैं NodeLogQuery को एक नियंत्रित नोड-डायग्नोस्टिक्स इंटरफ़ेस बनाऊंगा, न कि कोई फाइल ब्राउज़र। सबसे पहले सिस्टम लॉग्स, कंटेनर लॉग्स और सेंट्रलाइज्ड ऐतिहासिक खोज को अलग करूंगा। कॉलर्स Kubelet के माध्यम से ऑथेंटिकेट और ऑथराइज होते हैं और केवल स्वीकृत नोड्स और लॉग प्रकारों को ही क्वेरी कर सकते हैं। टेनेंट्स को व्यापक nodes/proxy एक्सेस नहीं मिलता है, और प्लेटफॉर्म टेनेंट-टू-नोड बाइंडिंग को सत्यापित करता है।
प्रत्येक क्वेरी में एक छोटी डिफ़ॉल्ट विंडो के साथ नोड, सर्विस यूनिट, टाइम रेंज और गंभीरता शामिल होती है। बाइट, लाइन, कॉनकरेंसी, रेट और डेडलाइन लिमिट्स लागू करें; परिणामों को स्ट्रीम या पेजिनेट करें और ट्रंकेशन की रिपोर्ट करें। ऑडिट में आइडेंटिटी, नोड, पैरामीटर सारांश, अवधि, साइज़ और निर्णय रखा जाता है, बॉडी कभी नहीं। अगम्य नोड्स और ओवरलोड Kubelets तेजी से फेल होते हैं, ब्रेकर ट्रिप करते हैं, और यूज़र्स को सेंट्रलाइज्ड लॉग्स की ओर निर्देशित करते हैं। NodeLogQuery v1.36 में स्टेबल और डिफ़ॉल्ट रूप से ऑन है, लेकिन मैं enableSystemLogQuery का कैनरी परीक्षण करूंगा और रोलबैक का विकल्प बनाए रखूंगा।
सामान्य गलतियां
- NodeLogQuery को मनमाने नोड-फाइल एक्सेस के रूप में मानना।
- टेनेंट्स को
nodes/proxyदेना और नोड तथा टेनेंट आइसोलेशन की उपेक्षा करना। - असीमित टाइम रेंज, आउटपुट या कॉनकरेंसी की अनुमति देना।
- ऑडिट स्ट्रीम में लॉग बॉडीज को लिखना और दूसरे संवेदनशील डेटा लीक का कारण बनना।
- अगम्य नोड्स पर अनिश्चित काल तक पुनः प्रयास (retry) करना और कंट्रोल-प्लेन या Kubelet लोड को बढ़ाना।
फॉलो-अप प्रश्न और उत्तर
फॉलो-अप 1: NodeLogQuery के माध्यम से प्रत्येक ऐतिहासिक क्वेरी क्यों नहीं भेजी जाती?
नोड एंडपॉइंट नियर-रियल-टाइम डायग्नोसिस के लिए उपयुक्त है। सेंट्रलाइज्ड कलेक्शन को लंबी रीड्स के लिए Kubelet संसाधनों का उपभोग किए बिना ऐतिहासिक खोज, इंडेक्सिंग, टेनेंट आइसोलेशन और रिटेंशन को संभालना चाहिए।
फॉलो-अप 2: आप यह कैसे साबित करेंगे कि क्वेरी टेनेंट बाउंड्री को पार नहीं कर सकती?
प्रत्येक अनुरोध के लिए आइडेंटिटी, नोड, रिसोर्स और निर्णय को रिकॉर्ड करें। यह साबित करने के लिए सिंथेटिक परीक्षणों का उपयोग करें कि अनुमत नोड सफल होता है और किसी अन्य टेनेंट का नोड अस्वीकार कर दिया जाता है, और सत्यापित करें कि प्रॉक्सी मनमाने पाथ्स और नोड पैरामीटर्स को अस्वीकार करता है।
फॉलो-अप 3: क्या होगा यदि लॉग्स में क्रेडेंशियल्स शामिल हों?
रिस्पॉन्स में अनुमान-आधारित अपरिवर्तनीय रेडैक्शन पर निर्भर न रहें। क्वेरी स्कोप, रोल और रिटेंशन को कम करें, और कलेक्शन के समय संरचित (structured) रेडैक्शन करें। जब किसी उच्च-जोखिम वाले फ़ील्ड का पता चले तो प्रभावित एक्सेस को रद्द करें और क्रेडेंशियल्स को रोटेट करें।