A First Look at Kubernetes Service APIs
API7.ai
December 18, 2020
प्रस्तावना
हम जानते हैं कि कुबेरनेट्स में क्लस्टर के अंदर सेवाओं को एक्सपोज़ करने के लिए कई समाधान हैं, जिनमें से एक लोकप्रिय समाधान इन्ग्रेस है, जो बाहरी दुनिया के लिए सेवाओं को एक्सपोज़ करने का एक मानक है और इसके कई तृतीय-पक्ष कार्यान्वयन हैं, जिनमें से प्रत्येक का अपना तकनीकी स्टैक और गेटवे पर निर्भरता है जो एक-दूसरे के साथ संगत नहीं हैं।
विभिन्न इन्ग्रेस कार्यान्वयनों को एकीकृत करने और कुबेरनेट्स पर एकसमान प्रबंधन को सुविधाजनक बनाने के लिए, SIG-NETWORK समुदाय ने कुबेरनेट्स सर्विस एपीआई जारी किया है, जो दूसरी पीढ़ी के इन्ग्रेस के रूप में जाना जाता है।
विषय विवरण
यह लेख कुबेरनेट्स सर्विस एपीआई की मूल अवधारणाओं का परिचय प्रदान करता है, कुछ प्रश्नों से शुरू करते हुए।
परिचय
कुबेरनेट्स सर्विस एपीआई को दूसरी पीढ़ी की इन्ग्रेस तकनीक कहा जाता है, लेकिन वे पहली पीढ़ी से किन मायनों में बेहतर हैं
कुबेरनेट्स सर्विस एपीआई को केवल इन्ग्रेस तक सीमित रखने के लिए डिज़ाइन नहीं किया गया था, बल्कि सेवा नेटवर्किंग को निम्नलिखित पर ध्यान केंद्रित करके बढ़ाने के लिए डिज़ाइन किया गया था: अभिव्यक्ति, स्केलेबिलिटी, और RBAC।
- अधिक सुविधाएँ, उदाहरण के लिए हेडर, वजन के आधार पर ट्रैफ़िक प्रबंधन।
kind: HTTPRoute apiVersion: networking.x-k8s.io/v1alpha1 --- matches: - path: value: "/foo" headers: values: version: "2" - path: value: "/v2/foo"
- स्केलेबिलिटी को बढ़ाना, सर्विस एपीआई एक बहु-स्तरीय एपीआई की अवधारणा को पेश करता है, जहाँ प्रत्येक स्तर अपना इंटरफ़ेस एक्सपोज़ करता है, जिससे अन्य कस्टम संसाधन एपीआई के साथ इंटरफ़ेस कर सकते हैं और अधिक सूक्ष्म (एपीआई-स्तरीय) नियंत्रण प्रदान कर सकते हैं।

- भूमिका-उन्मुख RBAC: बहु-स्तरीय एपीआई का कार्यान्वयन, एक विचार यह है कि उपयोगकर्ताओं के दृष्टिकोण से संसाधन ऑब्जेक्ट्स को डिज़ाइन किया जाए। ये संसाधन अंततः कुबेरनेट्स पर एप्लिकेशन चलाने की सामान्य भूमिकाओं के साथ मैप किए जाएंगे।
कुबेरनेट्स सर्विस एपीआई द्वारा कौन से संसाधन ऑब्जेक्ट्स को अमूर्त किया गया है
उपयोगकर्ता भूमिकाओं के आधार पर, कुबेरनेट्स सर्विस एपीआई निम्नलिखित संसाधनों को परिभाषित करेगा:
GatewayClass, Gateway, Route
- GatewayClass एक सामान्य कॉन्फ़िगरेशन और व्यवहार वाले गेटवे प्रकारों का एक सेट परिभाषित करता है:
- Gateway के साथ संबंध, इन्ग्रेस में
ingess.classएनोटेशन के समान; - एक GatewayClass उन गेटवे का एक समूह परिभाषित करता है जो एक ही कॉन्फ़िगरेशन और व्यवहार साझा करते हैं। प्रत्येक GatewayClass को एक ही कंट्रोलर द्वारा संभाला जाएगा, जहाँ कंट्रोलर का GatewayClass के साथ एक-से-अनेक संबंध होगा;
- GatewayClass एक क्लस्टर संसाधन है। एक कार्यात्मक गेटवे के लिए कम से कम एक GatewayClass को परिभाषित किया जाना चाहिए।
- Gateway क्लस्टर के अंदर सेवाओं में ट्रैफ़िक को परिवर्तित करने के लिए एक बिंदु का अनुरोध करता है:
- यह क्या करता है: क्लस्टर के बाहर से ट्रैफ़िक को क्लस्टर के अंदर लाता है। यह वास्तविक इन्ग्रेस इकाई है;
- यह एक विशिष्ट LB कॉन्फ़िगरेशन के लिए एक अनुरोध परिभाषित करता है जो GatewayClass के कॉन्फ़िगरेशन और व्यवहार का कार्यान्वयन भी है;
- Gateway संसाधन सीधे ऑपरेटर द्वारा या GatewayClass को संभालने वाले कंट्रोलर द्वारा बनाए जा सकते हैं;
- Gateway और Route एक-से-अनेक संबंध में हैं।
- Route वर्णन करता है कि गेटवे से गुजरने वाला ट्रैफ़िक एक सेवा पर कैसे मैप किया जाता है।

इसके अलावा, कुबेरनेट्स सर्विस एपीआई बैकएंड सेवाओं के लचीले कॉन्फ़िगरेशन को सक्षम करने के लिए एक BackendPolicy संसाधन ऑब्जेक्ट को परिभाषित करता है।
BackendPolicy ऑब्जेक्ट आपको TLS, स्वास्थ्य जांच और बैकएंड सेवा के प्रकार को निर्दिष्ट करने की अनुमति देता है, जैसे सेवा या पॉड।
कुबेरनेट्स सर्विस एपीआई के परिचय से क्या परिवर्तन आएंगे
कुबेरनेट्स सर्विस एपीआई, एक कार्यान्वयन मानक के रूप में, निम्नलिखित परिवर्तन लाता है।
- सामान्यता: कई कार्यान्वयन हो सकते हैं, जैसे कि इन्ग्रेस के कई कार्यान्वयन हैं। इन्ग्रेस कंट्रोलर्स को गेटवे की विशेषताओं के अनुसार अनुकूलित किया जा सकता है, लेकिन उन सभी में एक समान कॉन्फ़िगरेशन संरचना होती है। एक डेटा संरचना का उपयोग करके कई इन्ग्रेस कंट्रोलर्स को कॉन्फ़िगर किया जा सकता है।
- क्लास की अवधारणा: GatewayClasses विभिन्न प्रकार के लोड बैलेंसिंग कार्यान्वयन को कॉन्फ़िगर करने की अनुमति देता है। ये क्लास उपयोगकर्ता को आसानी से और स्पष्ट रूप से समझने की अनुमति देते हैं कि कौन से कार्य संसाधन मॉडल के रूप में उपयोग किए जा सकते हैं।
- साझा गेटवे: स्वतंत्र रूटिंग संसाधन HTTPRoute को एक ही GatewayClass से बाइंड करके, वे लोड बैलेंसर और VIP साझा कर सकते हैं। उपयोगकर्ता द्वारा स्तरित, यह टीमों को बुनियादी ढांचे को सुरक्षित रूप से साझा करने की अनुमति देता है, बिना निचले स्तर के Gateway के विशिष्ट कार्यान्वयन की परवाह किए।
- प्रकार के साथ बैकएंड संदर्भ: प्रकार के साथ बैकएंड संदर्भ के साथ, रूट कुबेरनेट्स सेवाओं, या किसी भी प्रकार के कुबेरनेट्स संसाधन को संदर्भित कर सकते हैं जो गेटवे बैकएंड के रूप में डिज़ाइन किए गए हैं, जैसे पॉड, या एक स्टेटफुलसेट जैसे DB, या यहाँ तक कि एक सुलभ क्लस्टर बाहरी संसाधन।
- क्रॉस-नेमस्पेस संदर्भ: विभिन्न नेमस्पेस के रूट को एक Gateway से बाइंड किया जा सकता है, जिससे नेमस्पेस के बीच एक-दूसरे तक पहुँच संभव होती है। यह भी संभव है कि एक Gateway के तहत एक Route के लिए नेमस्पेस की सीमा को प्रतिबंधित किया जा सके।
कुबेरनेट्स सर्विस एपीआई के कौन से इन्ग्रेस कार्यान्वयन वर्तमान में उपलब्ध हैं
जो इन्ग्रेस कुबेरनेट्स सर्विस एपीआई संसाधन ऑब्जेक्ट्स को कोड स्तर पर समर्थन करते हैं, वे हैं Contour, ingress-gce।
कुबेरनेट्स सर्विस एपीआई संसाधन पढ़ने और लिखने की अनुमतियों का प्रबंधन कैसे करते हैं
कुबेरनेट्स सर्विस एपीआई उपयोगकर्ता आयाम के आधार पर 3 भूमिकाओं में विभाजित हैं:
- इंफ्रास्ट्रक्चर प्रदाता GatewayClass;
- क्लस्टर ऑपरेटर Gateway;
- एप्लिकेशन डेवलपर Route।
RBAC (रोल बेस्ड एक्सेस कंट्रोल) कुबेरनेट्स प्राधिकरण के लिए उपयोग किया जाने वाला मानक है। यह उपयोगकर्ताओं को कॉन्फ़िगर करने की अनुमति देता है कि कौन विशिष्ट संसाधनों की सीमा पर ऑपरेशन कर सकता है। RBAC का उपयोग करके उपरोक्त परिभाषित प्रत्येक भूमिका को सक्षम किया जा सकता है।
अधिकांश मामलों में, यह अपेक्षित है कि सभी भूमिकाएँ सभी संसाधनों को पढ़ने में सक्षम होंगी।
तीन-स्तरीय मॉडल में निम्नलिखित लिखने की अनुमतियाँ हैं।
| GatewayClass | Gateway | Route | |
|---|---|---|---|
| इंफ्रास्ट्रक्चर प्रदाता | हाँ | हाँ | हाँ |
| क्लस्टर ऑपरेटर | नहीं | हाँ | हाँ |
| एप्लिकेशन डेवलपर | नहीं | नहीं | हाँ |
कुबेरनेट्स सर्विस एपीआई के लिए एक्सटेंशन पॉइंट क्या हैं
गेटवे के लिए आवश्यकताएँ बहुत समृद्ध हैं, और एक ही परिदृश्य को कार्यान्वित करने के कई तरीके हैं, प्रत्येक के अपने फायदे और नुकसान हैं। कुबेरनेट्स सर्विस एपीआई ने बहु-स्तरीय संसाधन ऑब्जेक्ट्स को निकाला है, और कुछ एक्सटेंशन पॉइंट्स को भी आरक्षित किया है।
कुबेरनेट्स सर्विस एपीआई वर्तमान में Route पर ध्यान केंद्रित करता है:
- RouteMatch Route मिलान नियमों को विस्तारित करता है।
- विशिष्ट बैकएंड सेवाओं के प्रकार को निर्दिष्ट करता है, जैसे फ़ाइल सिस्टम, फ़ंक्शन एक्सप्रेशन आदि, उपरोक्त कुबेरनेट्स संसाधनों के अलावा।
- Route फ़िल्टर Route जीवनचक्र में अनुरोध/प्रतिक्रिया को संभालने के लिए एक्सटेंशन जोड़ता है।
- यदि उपरोक्त एक्सटेंशन में से कोई भी कस्टम Route द्वारा संतुष्ट नहीं किया जा सकता है, तो एक Route को पूरी तरह से अनुकूलित किया जा सकता है।
सारांश
इस लेख ने प्रश्न पूछकर कुबेरनेट्स सर्विस एपीआई का एक मूल परिचय प्रदान किया है। समग्र रूप से, कुबेरनेट्स सर्विस एपीआई ने इन्ग्रेस के कई सर्वोत्तम प्रथाओं को परिष्कृत किया है, जैसे कि बढ़ी हुई अभिव्यक्ति, जो वास्तव में Route की क्षमताओं को विस्तारित करती है, और BackendPolicy ऑब्जेक्ट्स, जो लगभग किसी भी कुबेरनेट्स बैकएंड संसाधन को अपस्ट्रीम के लिए निर्दिष्ट कर सकते हैं। कुबेरनेट्स सर्विस एपीआई वर्तमान में संसाधन ऑब्जेक्ट्स को व्यापक स्तर पर निर्दिष्ट करता है, लेकिन संसाधन ऑब्जेक्ट्स के भीतर अभी भी कई विवरण हैं जिन पर चर्चा की जानी चाहिए ताकि संभावित संघर्ष परिदृश्यों को रोका जा सके, और संरचना में कुछ चर हैं।