कुबेरनेट्स प्रलेखन के इस खंड के पृष्ठ एकल कार्य करने का तरीका दिखाते हैं। आमतौर पर, कार्य पृष्ठ दिखाता है कि किसी एक काम को कई छोटे चरणों में विभाजित करके कैसे करना है।
kubectl कमांड लाइन का उपयोग करके Secret objects बनाना।
यह पृष्ठ आपको दिखाता है कि kubectl कमांड-लाइन टूल का उपयोग करके कुबेरनेट्स
Secrets कैसे बनाएं, संपादित करें, प्रबंधित करें और हटाएं।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को
समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन
होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप
minikube
की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
एक Secret object संवेदनशील डेटा जैसे कि क्रेडेंशियल्स को स्टोर करता है
जिनका उपयोग Pods सेवाओं तक पहुंचने के लिए करते हैं। उदाहरण के लिए, आपको एक Secret की आवश्यकता हो सकती है
डेटाबेस तक पहुंचने के लिए आवश्यक username और password को स्टोर करने के लिए।
आप कमांड में raw data पास करके, या उन क्रेडेंशियल्स को फ़ाइलों में स्टोर करके Secret बना सकते हैं
जिन्हें आप कमांड में पास करते हैं। निम्नलिखित कमांड
एक Secret बनाते हैं जो username admin और password S!B\*d$zDsb= को स्टोर करता है।
आपको विशेष वर्णों जैसे $, \,
*, =, और ! को अपने strings में escape करने के लिए single quotes '' का उपयोग करना चाहिए। यदि आप ऐसा नहीं करते हैं, तो आपका shell इन वर्णों की व्याख्या करेगा।
टिप्पणी:
Secret के लिए stringData फ़ील्ड server-side apply के साथ अच्छी तरह से काम नहीं करता है।
-n flag यह सुनिश्चित करता है कि उत्पन्न फ़ाइलों में
टेक्स्ट के अंत में एक अतिरिक्त newline वर्ण नहीं होता है। यह महत्वपूर्ण है क्योंकि जब kubectl
एक फ़ाइल पढ़ता है और सामग्री को base64 string में encode करता है, तो अतिरिक्त
newline वर्ण भी encode हो जाता है। आपको फ़ाइल में शामिल strings में विशेष वर्णों को escape करने की आवश्यकता नहीं है।
kubectl get और kubectl describe कमांड डिफ़ॉल्ट रूप से एक Secret की सामग्री को दिखाने से बचते हैं।
यह Secret को गलती से exposed होने से, या terminal log में stored होने से बचाने के लिए है।
Secret को डिकोड करें
आपके द्वारा बनाए गए Secret की सामग्री देखें:
kubectl get secret db-user-pass -o jsonpath='{.data}'
यह दस्तावेज़ीकरण उद्देश्यों के लिए एक उदाहरण है। व्यवहार में,
यह विधि encoded डेटा के साथ कमांड को आपके shell history में stored होने का कारण बन सकती है।
आपके कंप्यूटर तक पहुंच वाला कोई भी व्यक्ति कमांड ढूंढ सकता है और secret को डिकोड कर सकता है। एक बेहतर दृष्टिकोण view और
decode कमांड को संयोजित करना है।
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
एक Secret संपादित करें
आप एक मौजूदा Secret object को संपादित कर सकते हैं जब तक कि यह
immutable नहीं है। एक Secret को संपादित करने के लिए, निम्नलिखित कमांड चलाएं:
kubectl edit secrets <secret-name>
यह आपके डिफ़ॉल्ट editor को खोलता है और आपको base64 encoded
Secret values को data फ़ील्ड में अपडेट करने की अनुमति देता है, जैसे निम्नलिखित उदाहरण में:
# Please edit the object below. Lines beginning with a '#' will be ignored,# and an empty file will abort the edit. If an error occurs while saving this file, it will be# reopened with the relevant failures.#apiVersion:v1data:password:UyFCXCpkJHpEc2I9username:YWRtaW4=kind:Secretmetadata:creationTimestamp:"2022-06-28T17:44:13Z"name:db-user-passnamespace:defaultresourceVersion:"12708504"uid:91becd59-78fa-4c85-823f-6d44436242actype:Opaque
सफाई
एक Secret को हटाने के लिए, निम्नलिखित कमांड चलाएं:
kind की तरह, minikube एक उपकरण
है जो आपको स्थानीय स्तर पर कुबेरनेट्स चलाने देता है। minikube आपके कंप्यूटर
(windows, macOS और linux पीसी सहित) पर सिंगल-नोड कुबेरनेट्स क्लस्टर चलाता
है ताकि आप कुबेरनेट्स सीख सकें या डेवलपमेंट कर सकें।
यदि आपका ध्यान उपकरण को इंस्टॉल करने पर है तो आप मुख्य
आरंभ करें!
गाइड का अनुसरण कर सकते हैं।
एक बार जब आपके पास minikube काम कर रहा हो,
तो आप इसका उपयोग नमूना एप्लिकेशन
चलाने के लिए कर सकते हैं।
kubeadm
कुबेरनेट्स क्लस्टर बनाने और प्रबंधित करने के लिए आप kubeadm टूल का उपयोग कर सकते हैं।
यह उपयोगकर्ता के अनुकूल तरीके से न्यूनतम व्यवहार्य, सुरक्षित क्लस्टर बनाने और चलाने के लिए आवश्यक कार्य करता है।
kubeadm इंस्टॉल करना आपको दिखाता है कि kubeadm को कैसे इंस्टॉल किया जाए।
एक बार इंस्टॉल होने के बाद, आप इसका उपयोग क्लस्टर बनाने के लिए कर सकते हैं।
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण के भीतर हो। उदाहरण के लिए, v1.35 क्लाइंट v1.34, v1.35 और v1.36 कण्ट्रोल प्लेन के साथ संवाद कर सकते हैं।
kubectl के नवीनतम संस्करण का उपयोग करने से अप्रत्याशित मुद्दों से बचने में मदद मिलती है।
Linux पर kubectl इंस्टॉल करें
Linux पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
यदि आप Ubuntu या किसी अन्य Linux डिस्ट्रीब्यूशन पर हैं जो snap पैकेज मैनेजर को सपोर्ट करता है, तो kubectl snap एप्लिकेशन के रूप में उपलब्ध है।
snap install kubectl --classic
kubectl version --client
यदि आप Linux पर Homebrew पैकेज मैनेजर का उपयोग कर रहे हैं, तो kubectl इंस्टालेशन के लिए उपलब्ध है।
brew install kubectl
kubectl version --client
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
kubectl cluster-info
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपका काफी समय बचा सकता है।
नीचे Bash और Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं।
Bash के लिए kubectl समापन स्क्रिप्ट kubectl completion bash कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में समापन स्क्रिप्ट को सोर्स करने से kubectl ऑटोकम्पलीशन सक्षम हो जाती है।
हालाँकि, समापन की स्क्रिप्ट bash-completion पर निर्भर हैं जिसका अर्थ है कि आपको पहले इस सॉफ़्टवेयर को इंस्टॉल करना होगा (आप type _init_completion चलाकर परीक्षण कर सकते हैं कि आपने पहले से bash-completion इंस्टॉल की है या नहीं)।
Bash-completion को इंस्टॉल करें
कई पैकेज मैनेजर द्वारा bash-completion प्रदान की जाती है (यहाँ देखें)। आप इसे apt-get install bash-completion या yum install bash-completion आदि के साथ इंस्टॉल कर सकते हैं।
यह कमांड /usr/share/bash-completion/bash_completion उत्त्पन्न करता है, जो bash-completion की मुख्य स्क्रिप्ट है। आपके पैकेज मैनेजर के आधार पर, आपको इस फाइल को अपनी ~/.bashrc फाइल में मैन्युअल रूप से सोर्स करना होगा।
यह पता लगाने के लिए, अपना शेल पुनः लोड करें और type _init_completion रन करे। यदि कमांड सफल होता है, तो आप पहले से ही तैयार हैं, अन्यथा अपनी ~/.bashrc फ़ाइल में निम्नलिखित जोड़ें:
source /usr/share/bash-completion/bash_completion
अपना शेल पुनः लोड करें और type _init_completion टाइप करके सत्यापित करें कि बैश-कम्पलीशन सही ढंग से इंस्टॉल है।
kubectl ऑटोकम्पलीशन सक्षम करे
अब आपको यह सुनिश्चित करने की आवश्यकता है कि kubectl समापन स्क्रिप्ट आपके सभी शेल सत्रों (sourced) में प्राप्त हो जाए। आप ऐसा दो तरीकों से कर सकते हैं:
अपनी ~/.bashrc फ़ाइल में समापन स्क्रिप्ट सॉर्स करें:
समापन स्क्रिप्ट को /etc/bash_completion.d डायरेक्टरी में जोड़ें:
bash kubectl completion bash >/etc/bash_completion.d/kubectl
यदि आप के पास kubectl के लिए एक अन्य नाम (alias) है, तो आप उस अन्य नाम के साथ काम करने के लिए शेल समापन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.bashrc
echo'complete -F __start_kubectl k' >>~/.bashrc
टिप्पणी:
bash-completion सभी समापन स्क्रिप्ट को /etc/bash_completion.d में सोर्स करता है।
दोनों दृष्टिकोण बराबर हैं। आपके शेल को पुनः लोड करने के बाद, Kubectl ऑटोकम्पलीशन कार्य करना शुरू कर देगा।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.zshrc
echo'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef, तो अपनी ~/.zshrc फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
kubectl convert प्लगइन इंस्टॉल करें
कुबेरनेट्स कमांड-लाइन टूल kubectl के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.35 क्लाइंट v1.34, v1.35 और v1.36 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं।
kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
macOS पर kubectl इंस्टॉल करें
macOS पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
सुनिश्चित करें कि /usr/local/bin आपके पाथ एनवायरनमेंट वेरिएबल में है।
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
Homebrew के माध्यम से macOS पर इंस्टॉल करें
यदि आप macOS पर हैं और Homebrew पैकेज मैनेजर का उपयोग कर रहे हैं, आप Homebrew के साथ kubectl इंस्टॉल कर सकते हैं।
इंस्टालेशन कमांड रन करें:
brew install kubectl
या
brew install kubernetes-cli
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
Macports के माध्यम से macOS पर इंस्टॉल करें
यदि आप macOS पर हैं और Macports पैकेज मैनेजर का उपयोग कर रहे हैं, आप Macports के साथ kubectl इंस्टॉल कर सकते हैं।
इंस्टालेशन कमांड रन करें:
sudo port selfupdate
sudo port install kubectl
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
kubectl cluster-info
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक Kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपका काफी समय बचा सकता है।
नीचे Bash और Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं।
Bash के लिए kubectl समापन स्क्रिप्ट kubectl completion bash कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में समापन स्क्रिप्ट को सोर्स करने से kubectl ऑटोकम्पलीशन सक्षम हो जाती है।```
हालाँकि, समापन की स्क्रिप्ट bash-completion पर निर्भर हैं जिसका अर्थ है कि आपको पहले इस सॉफ़्टवेयर को इंस्टॉल करना होगा।
चेतावनी:
Bash-completion के लिये दो संस्करण हैं v1 और v2। v1 bash 3.2 के लिये हैं (जो macOS के लिए डिफ़ॉल्ट है), और v2 bash 4.1+ के लिए है।kubectl कम्पलीशन स्क्रिप्ट Bash-completion v1 और Bash 3.2 के साथ ठीक से काम नहीं करती है। इसके लिए Bash-completion v2 और बैश 4.1+ की आवश्यकता है। इसलिए macOS पर kubectl कम्पलीशन को सही तरीके से इस्तेमाल करने के लिए , आपको bash 4.1+ इनस्टॉल और उपयोग करना होगा (निर्देश)। निम्नलिखित निर्देश मानते हैं कि आप बैश का उपयोग करते हैं (अर्थात 4.1 का कोई भी बैश संस्करण या इससे नया)।
अपग्रेड बैश
निम्नलिखित निर्देश मानते हैं कि आप बैश 4.1+ का उपयोग करते हैं। आप अपने बैश के संस्करण को यह चलाकर देख सकते हैं:
echo$BASH_VERSION
यदि यह बहुत पुराना है, तो आप Homebrew का उपयोग करके इसे इनस्टॉल/अपग्रेड कर सकते हैं:
brew install bash
अपने शेल को पुनः लोड करें और सत्यापित करें कि इच्छित संस्करण का उपयोग किया जा रहा है:
echo$BASH_VERSION$SHELL
Homebrew आमतौर पर इसे /usr/local/bin/bash पर इनस्टॉल करता है।
इनस्टॉल bash-completion
टिप्पणी:
जैसा कि उल्लेख किया गया है, ये निर्देश मानते हैं कि आप Bash 4.1+ का उपयोग करते हैं, जिसका अर्थ है कि आप bash-completion v2 इनस्टॉल करेंगे (Bash 3.2 और bash-completion v1 पर kubectl पूर्णता काम नहीं करेगी)।
आप type_init_completion से सत्यापित कर सकते हैं कि क्या आपके पास bash-completion v2 पहले से इनस्टॉल है। यदि नहीं, तो आप इसे Homebrew से इनस्टॉल कर सकते हैं
brew install bash-completion@2
जैसा कि इस कमांड के आउटपुट में बताया गया है, अपनी ~/.bash_profile फ़ाइल में निम्नलिखित जोड़ें:
यदि आपके पास kubectl के लिए एक नाम (alias) है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.bash_profile
echo'complete -F __start_kubectl k' >>~/.bash_profile
यदि आपने Homebrew के साथ kubectl इनस्टॉल किया है (जैसा कि यहां बताया गया है), तो kubectl कम्पलीशन स्क्रिप्ट पहले से ही /usr/local/etc/bash_completion.d/kubectl में होनी चाहिए। ऐसे में आपको कुछ भी करने की जरूरत नहीं है।
टिप्पणी:
bash-completion Homebrew से इनस्टॉल होने पर, सारे फाइल्स को BASH_COMPLETION_COMPAT_DIR डायरेक्टरी में सोर्स कर देता है। इसलिए आखरी दो तरीके काम करते हैं।
किसी भी स्थिति में, आपके शेल को पुनः लोड करने के बाद, Kubectl पूर्णता कार्य करना चाहिए।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.zshrc
echo'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef, तो अपनी ~/.zshrc फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
kubectl convert प्लगइन इंस्टॉल करें
कुबेरनेट्स कमांड-लाइन टूल kubectl के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.35 क्लाइंट v1.34, v1.35 और v1.36 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं।
kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
Windows पर kubectl इंस्टॉल करें
Windows पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
यह सुनिश्चित करने के लिए परीक्षण करें कि kubectl संस्करण डाउनलोड के समान है:
kubectl version --client
टिप्पणी:
Windows के लिए Docker Desktopkubectl का अपना संस्करण PATH में जोड़ता है।
यदि आपने पहले Docker Desktop स्थापित किया है, तो आपको Docker Desktop इंस्टॉलर द्वारा जोड़े गए एक PATH से पहले अपनी PATH प्रविष्टि डालने की आवश्यकता हो सकती है या Docker Desktop के kubectl को हटा दें।
Chocolatey या Scoop का उपयोग करके Windows पर इंस्टॉल करें
Windows पर kubectl इंस्टॉल करने के लिए आप या तो Chocolatey पैकेज मैनेजर अथवा Scoop कमांड-लाइन इंस्टॉलर का उपयोग कर सकते हैं।
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
अपनी होम डायरेक्टरी पर जाएं:
# यदि आप cmd.exe का प्रयोग कर रहे हैं, तो: cd %USERPROFILE%cd ~
.kube डायरेक्टरी बनाएं:
mkdir .kube
आपके द्वारा अभी बनाई गई .kube डायरेक्टरी में जाएं:
cd .kube
दूरस्थ कुबेरनेट्स क्लस्टर का उपयोग करने के लिए kubectl को कॉन्फ़िगर करें:
New-Item config -type file
टिप्पणी:
अपनी पसंद के टेक्स्ट एडिटर जैसे नोटपैड का उपयोग कर कॉन्फिग फाइल को एडिट करें।
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
kubectl cluster-info
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपको बहुत सारी टाइपिंग बचा सकता है।
नीचे Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं, यदि आप इसे Windows पर चला रहे हैं।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.zshrc
echo'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef, तो अपनी ~/.zshrc फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
इंस्टॉल kubectl convert प्लगइन
कुबेरनेट्स कमांड-लाइन टूल kubectl के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
3 - कॉन्फ़िगरेशन फाइल का उपयोग करके सीक्रेट्स का प्रबंधन
रिसोर्स कॉन्फ़िगरेशन फाइल का उपयोग करके सीक्रेट ऑब्जेक्ट बनाना।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को
समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन
होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप
minikube
की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आप पहले JSON या YAML फॉर्मेट में एक मैनिफेस्ट में Secret ऑब्जेक्ट को परिभाषित कर सकते हैं, और फिर उस ऑब्जेक्ट को बना सकते हैं। Secret रिसोर्स में दो मैप्स होते हैं: data और stringData। data फील्ड का उपयोग मनमाना डेटा स्टोर करने के लिए किया जाता है, जो base64 का उपयोग करके एनकोड किया जाता है। stringData फील्ड सुविधा के लिए प्रदान किया जाता है, और यह आपको समान डेटा को अनएनकोडेड स्ट्रिंग्स के रूप में प्रदान करने की अनुमति देता है। data और stringData की कुंजियों में अल्फ़ान्यूमेरिक वर्ण, -, _ या . होने चाहिए।
निम्नलिखित उदाहरण data फील्ड का उपयोग करके एक सीक्रेट में दो स्ट्रिंग्स स्टोर करता है।
सीक्रेट डेटा के सीरियलाइज्ड JSON और YAML वैल्यू base64 स्ट्रिंग्स के रूप में एनकोड किए जाते हैं। इन स्ट्रिंग्स के भीतर न्यूलाइन मान्य नहीं हैं और इन्हें छोड़ा जाना चाहिए। Darwin/macOS पर base64 यूटिलिटी का उपयोग करते समय, उपयोगकर्ताओं को लंबी लाइनों को विभाजित करने के लिए -b विकल्प का उपयोग करने से बचना चाहिए। इसके विपरीत, Linux उपयोगकर्ताओं को base64 कमांड में -w 0 विकल्प जोड़ना चाहिए या यदि -w विकल्प उपलब्ध नहीं है तो base64 | tr -d '\n' पाइपलाइन का उपयोग करना चाहिए।
कुछ परिदृश्यों के लिए, आप stringData फील्ड का उपयोग करना चाह सकते हैं। यह फील्ड आपको सीक्रेट में सीधे एक नॉन-base64 एनकोडेड स्ट्रिंग डालने की अनुमति देता है, और जब सीक्रेट बनाया या अपडेट किया जाता है तो स्ट्रिंग आपके लिए एनकोड की जाएगी।
इसका एक व्यावहारिक उदाहरण यह हो सकता है जहां आप एक एप्लिकेशन डिप्लॉय कर रहे हैं जो कॉन्फ़िगरेशन फाइल को स्टोर करने के लिए एक सीक्रेट का उपयोग करता है, और आप अपनी डिप्लॉयमेंट प्रक्रिया के दौरान उस कॉन्फ़िगरेशन फाइल के कुछ हिस्सों को पॉप्युलेट करना चाहते हैं।
उदाहरण के लिए, यदि आपका एप्लिकेशन निम्नलिखित कॉन्फ़िगरेशन फाइल का उपयोग करता है:
YWRtaW5pc3RyYXRvcg== डिकोड होकर administrator बनता है।
सीक्रेट को संपादित करें
मैनिफेस्ट का उपयोग करके बनाए गए सीक्रेट में डेटा को संपादित करने के लिए, अपने मैनिफेस्ट में data या stringData फील्ड को संशोधित करें और फाइल को अपने क्लस्टर में लागू करें। आप एक मौजूदा Secret ऑब्जेक्ट को संपादित कर सकते हैं जब तक कि वह अपरिवर्तनीय नहीं है।
उदाहरण के लिए, यदि आप पिछले उदाहरण से पासवर्ड को birdsarentreal में बदलना चाहते हैं, तो निम्नलिखित करें:
नई पासवर्ड स्ट्रिंग को एनकोड करें:
echo -n 'birdsarentreal' | base64
आउटपुट इस तरह का होता है:
YmlyZHNhcmVudHJlYWw=
अपनी नई पासवर्ड स्ट्रिंग के साथ data फील्ड को अपडेट करें:
कुबेरनेट्स मौजूदा Secret ऑब्जेक्ट को अपडेट करता है। विस्तार से, kubectl टूल नोटिस करता है कि समान नाम का एक मौजूदा Secret ऑब्जेक्ट है। kubectl मौजूदा ऑब्जेक्ट को प्राप्त करता है, उसमें परिवर्तनों की योजना बनाता है, और बदले हुए Secret ऑब्जेक्ट को आपके क्लस्टर कंट्रोल प्लेन को सबमिट करता है।
यदि आपने इसके बजाय kubectl apply --server-side निर्दिष्ट किया है, तो kubectlसर्वर साइड एप्लाई का उपयोग करता है।
यह पृष्ठ दिखाता है कि कुबेरनेट्स पॉड में किसी कंटेनर के लिए निर्भर एनवायरनमेंट वेरिएबल्स कैसे परिभाषित करें।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को
समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन
होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप
minikube
की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
कंटेनर के लिए एक निर्भर एनवायरनमेंट वेरिएबल परिभाषित करें
जब आप एक पॉड बनाते हैं, तो आप उसमें चलने वाले कंटेनरों के लिए निर्भर एनवायरनमेंट वेरिएबल्स सेट कर सकते हैं। निर्भर एनवायरनमेंट वेरिएबल्स सेट करने के लिए, आप कॉन्फ़िगरेशन फ़ाइल में env की value में $(VAR_NAME) का उपयोग कर सकते हैं।
इस अभ्यास में, आप एक ऐसा पॉड बनाएंगे जो एक कंटेनर चलाता है।
पॉड के लिए कॉन्फ़िगरेशन फ़ाइल में एक निर्भर एनवायरनमेंट वेरिएबल्स परिभाषित किया गया है, जिसका सामान्य उपयोग निर्धारित किया गया है।
पॉड के लिए कॉन्फ़िगरेशन मैनिफेस्ट इस प्रकार है:
जैसा कि ऊपर दिखाया गया है, आपने SERVICE_ADDRESS के लिए एक सही डिपेंडेंसी रेफरेंस,
UNCHANGED_REFERENCE के लिए एक गलत डिपेंडेंसी रेफरेंस, और ESCAPED_REFERENCE के लिए एक स्किप किया गया रेफरेंस परिभाषित किया है।
जब कोई एनवायरनमेंट वेरिएबल पहले से परिभाषित होता है और उसका रेफरेंस दिया जाता है,
तो वह रेफरेंस सही तरीके से हल हो सकता है, जैसा कि SERVICE_ADDRESS के मामले में हुआ।
ध्यान दें कि env सूची में क्रम महत्वपूर्ण होता है।
अगर कोई वेरिएबल सूची में नीचे परिभाषित है, तो उसे परिभाषित नहीं माना जाता।
इसी कारण से UNCHANGED_REFERENCE$(PROTOCOL) को हल करने में विफल रहता है।
जब कोई एनवायरनमेंट वेरिएबल परिभाषित नहीं होता या उसमें कुछ वेरिएबल्स ही शामिल होते हैं,
तो वह वेरिएबल एक सामान्य स्ट्रिंग की तरह माना जाता है, जैसे कि UNCHANGED_REFERENCE।
ध्यान दें कि सामान्यतः गलत तरीके से पार्स किए गए एनवायरनमेंट वेरिएबल्स कंटेनर को शुरू होने से नहीं रोकते।
$(VAR_NAME) सिंटैक्स को डबल $, जैसे $$(VAR_NAME) से एस्केप किया जा सकता है।
एस्केप किए गए रेफरेंस कभी भी विस्तारित नहीं होते, चाहे संबंधित वेरिएबल परिभाषित हो या नहीं।
यह ESCAPED_REFERENCE उदाहरण में देखा जा सकता है।
kustomization.yaml file का उपयोग करके Secret objects बनाना।
kubectl Secrets और ConfigMaps का प्रबंधन करने के लिए Kustomize object management tool का उपयोग करने का समर्थन करता है। आप Kustomize का उपयोग करके एक resource generator बनाते हैं, जो
एक Secret उत्पन्न करता है जिसे आप kubectl का उपयोग करके API server पर apply कर सकते हैं।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को
समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन
होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप
minikube
की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आप एक secretGenerator को परिभाषित करके एक Secret उत्पन्न कर सकते हैं
kustomization.yaml file में जो अन्य मौजूदा files, .env files, या
literal values को reference करता है। उदाहरण के लिए, निम्नलिखित निर्देश username admin और password 1f2d1e2e67df के लिए एक kustomization
file बनाते हैं।
टिप्पणी:
Secret के लिए stringData फ़ील्ड server-side apply के साथ अच्छी तरह से काम नहीं करता है।
आप kustomization.yaml file में secretGenerator को भी परिभाषित कर सकते हैं
.env files प्रदान करके। उदाहरण के लिए, निम्नलिखित kustomization.yaml file
एक .env.secret file से डेटा pull करती है:
सभी मामलों में, आपको values को base64 में encode करने की आवश्यकता नहीं है। YAML
file का नाम अवश्यkustomization.yaml या kustomization.yml होना चाहिए।
kustomization file को apply करें
Secret बनाने के लिए, उस directory को apply करें जिसमें kustomization file है:
kubectl apply -k <directory-path>
आउटपुट इस प्रकार है:
secret/database-creds-5hdh7hhgfk created
जब एक Secret उत्पन्न होता है, तो Secret का नाम Secret डेटा को hash करके
और hash value को नाम में append करके बनाया जाता है। यह सुनिश्चित करता है कि
डेटा को modify किए जाने पर हर बार एक नया Secret उत्पन्न होता है।
Secret बनाया गया था या नहीं, इसे सत्यापित करने और Secret डेटा को डिकोड करने के लिए,
kubectl get -k <directory-path> -o jsonpath='{.data}'
अपनी kustomization.yaml file में, डेटा को संशोधित करें, जैसे password।
उस directory को apply करें जिसमें kustomization file है:
kubectl apply -k <directory-path>
आउटपुट इस प्रकार है:
secret/db-user-pass-6f24b56cc8 created
संपादित Secret एक नए Secret object के रूप में बनाया जाता है, मौजूदा
Secret object को अपडेट करने के बजाय। आपको अपने Pods में Secret के references को अपडेट करने की आवश्यकता हो सकती है।
6 - HTTP प्रॉक्सी का उपयोग करके कुबेरनेटेस API तक पहुंचें
यह पेज दिखाता है कि कुबेरनेटेस API तक पहुंचने के लिए HTTP प्रॉक्सी का उपयोग कैसे करें।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को
समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन
होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप
minikube
की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
7 - SOCKS5 प्रॉक्सी का उपयोग करके कुबेरनेटेस API तक पहुंचें
फ़ीचर स्थिति:Kubernetes v1.24 [stable]
यह पेज दिखाता है कि रिमोट कुबेरनेटेस क्लस्टर के API तक पहुंचने के लिए SOCKS5 प्रॉक्सी का उपयोग कैसे करें।
यह तब उपयोगी होता है जब जिस क्लस्टर तक आप पहुंचना चाहते हैं वह अपने API को सीधे सार्वजनिक इंटरनेट पर एक्सपोज़ नहीं करता है।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को
समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन
होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप
minikube
की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आपका कुबेरनेट्स सर्वर इसपर या इसके बाद के संस्करण पर होना चाहिए v1.24.
संस्करण की जांच करने के लिए, लिखें kubectl version.
आपको SSH क्लाइंट सॉफ्टवेयर (ssh टूल) और रिमोट सर्वर पर चलने वाली SSH सेवा की आवश्यकता है।
आपको रिमोट सर्वर पर SSH सेवा में लॉग इन करने में सक्षम होना चाहिए।
टास्क संदर्भ
टिप्पणी:
यह उदाहरण SSH का उपयोग करके ट्रैफ़िक को टनल करता है, जिसमें SSH क्लाइंट और सर्वर SOCKS प्रॉक्सी के रूप में कार्य करते हैं।
आप इसके बजाय किसी अन्य प्रकार के SOCKS5 प्रॉक्सी का उपयोग कर सकते हैं।
चित्र 1 इस टास्क में आप जो प्राप्त करने जा रहे हैं उसे दर्शाता है।
आपके पास एक क्लाइंट कंप्यूटर है, जिसे आगे के चरणों में स्थानीय के रूप में संदर्भित किया गया है, जहां से आप कुबेरनेटेस API से बात करने के लिए अनुरोध बनाने जा रहे हैं।
कुबेरनेटेस सर्वर/API एक रिमोट सर्वर पर होस्ट किया गया है।
आप स्थानीय और रिमोट सर्वर के बीच एक सुरक्षित SOCKS5 टनल बनाने के लिए SSH क्लाइंट और सर्वर सॉफ्टवेयर का उपयोग करेंगे। क्लाइंट और कुबेरनेटेस API के बीच HTTPS ट्रैफ़िक SOCKS5 टनल पर प्रवाहित होगा, जो स्वयं SSH पर टनल किया गया है।
graph LR;
subgraph local[Local client machine]
client([client])-. local traffic .-> local_ssh[Local SSH SOCKS5 proxy];
end
local_ssh[SSH SOCKS5 proxy]-- SSH Tunnel -->sshd
subgraph remote[Remote server]
sshd[SSH server]-- local traffic -->service1;
end
client([client])-. proxied HTTPs traffic going through the proxy .->service1[Kubernetes API];
classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5;
class ingress,service1,service2,pod1,pod2,pod3,pod4 k8s;
class client plain;
class cluster cluster;
चित्र 1. SOCKS5 ट्यूटोरियल घटक
SOCKS5 प्रॉक्सी बनाने के लिए ssh का उपयोग करें
निम्नलिखित कमांड आपके क्लाइंट मशीन और रिमोट SOCKS सर्वर के बीच एक SOCKS5 प्रॉक्सी शुरू करता है:
# यह चलाने के बाद SSH टनल फोरग्राउंड में चलता रहता हैssh -D 1080 -q -N username@kubernetes-remote-server.example
SOCKS5 प्रॉक्सी निम्नलिखित कॉन्फ़िगरेशन के आधार पर आपके क्लस्टर के API सर्वर से कनेक्ट करने देता है:
-D 1080: स्थानीय पोर्ट :1080 पर SOCKS प्रॉक्सी खोलता है।
-q: शांत मोड। अधिकांश चेतावनी और नैदानिक संदेशों को दबा देता है।
-N: रिमोट कमांड निष्पादित न करें। केवल पोर्ट फॉरवर्ड करने के लिए उपयोगी।
username@kubernetes-remote-server.example: रिमोट SSH सर्वर जिसके पीछे कुबेरनेटेस क्लस्टर चल रहा है (उदाहरण: एक बैस्टियन होस्ट)।
क्लाइंट कॉन्फ़िगरेशन
प्रॉक्सी के माध्यम से कुबेरनेटेस API सर्वर तक पहुंचने के लिए आपको kubectl को निर्देश देना होगा कि वह पहले बनाए गए SOCKS प्रॉक्सी के माध्यम से क्वेरी भेजे। उपयुक्त एनवायरनमेंट वेरिएबल सेट करके या kubeconfig फ़ाइल में proxy-url एट्रिब्यूट के माध्यम से ऐसा करें। एनवायरनमेंट वेरिएबल का उपयोग करते हुए:
exportHTTPS_PROXY=socks5://localhost:1080
किसी विशिष्ट kubectl कॉन्टेक्स्ट पर हमेशा इस सेटिंग का उपयोग करने के लिए, ~/.kube/config फ़ाइल के भीतर संबंधित cluster एंट्री में proxy-url एट्रिब्यूट निर्दिष्ट करें। उदाहरण के लिए:
apiVersion:v1clusters:- cluster:certificate-authority-data:LRMEMMW2# पठनीयता के लिए संक्षिप्तserver:https://<API_SERVER_IP_ADDRESS>:6443 # "कुबेरनेटेस API" सर्वर, दूसरे शब्दों में kubernetes-remote-server.example का IP पताproxy-url:socks5://localhost:1080 # ऊपर के चित्र में "SSH SOCKS5 प्रॉक्सी"name:defaultcontexts:- context:cluster:defaultuser:defaultname:defaultcurrent-context:defaultkind:Configpreferences:{}users:- name:defaultuser:client-certificate-data:LS0tLS1CR==# पठनीयता के लिए संक्षिप्तclient-key-data:LS0tLS1CRUdJT= # पठनीयता के लिए संक्षिप्त
एक बार जब आप पहले उल्लेखित ssh कमांड के माध्यम से टनल बना लेते हैं, और एनवायरनमेंट वेरिएबल या proxy-url एट्रिब्यूट को परिभाषित कर देते हैं, तो आप उस प्रॉक्सी के माध्यम से अपने क्लस्टर के साथ इंटरैक्ट कर सकते हैं। उदाहरण के लिए:
kubectl get pods
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-85cb69466-klwq8 1/1 Running 0 5m46s
टिप्पणी:
kubectl 1.24 से पहले, सॉक्स प्रॉक्सी का उपयोग करते समय अधिकांश kubectl कमांड काम करते थे, kubectl exec को छोड़कर।
kubectlHTTPS_PROXY और https_proxy दोनों एनवायरनमेंट वेरिएबल का समर्थन करता है। इनका उपयोग अन्य प्रोग्राम करते हैं जो SOCKS का समर्थन करते हैं, जैसे curl। इसलिए कुछ मामलों में कमांड लाइन पर एनवायरनमेंट वेरिएबल को परिभाषित करना बेहतर होगा:
HTTPS_PROXY=socks5://localhost:1080 kubectl get pods
proxy-url का उपयोग करते समय, प्रॉक्सी का उपयोग केवल संबंधित kubectl कॉन्टेक्स्ट के लिए किया जाता है,
जबकि एनवायरनमेंट वेरिएबल सभी कॉन्टेक्स्ट को प्रभावित करेगा।
k8s API सर्वर होस्टनाम को DNS लीकेज से और सुरक्षित किया जा सकता है ऊपर दिखाए गए अधिक सामान्यतः ज्ञात socks5 प्रोटोकॉल के बजाय socks5h प्रोटोकॉल नाम का उपयोग करके। इस मामले में, kubectl प्रॉक्सी सर्वर (जैसे ssh बैस्टियन) से k8s API सर्वर डोमेन नाम को रिज़ॉल्व करने के लिए कहेगा, उस सिस्टम पर रिज़ॉल्व करने के बजाय जहां kubectl चल रहा है। ध्यान दें कि socks5h के साथ, https://localhost:6443/api जैसा k8s API सर्वर URL आपके स्थानीय क्लाइंट कंप्यूटर को संदर्भित नहीं करता है। इसके बजाय, यह प्रॉक्सी सर्वर (उदाहरण: ssh बैस्टियन) पर ज्ञात localhost को संदर्भित करता है।
सफाई
जिस टर्मिनल पर यह चल रहा है वहां CTRL+C दबाकर ssh पोर्ट-फॉरवर्डिंग प्रक्रिया को रोकें।
प्रॉक्सी के माध्यम से http ट्रैफ़िक को फॉरवर्ड करना बंद करने के लिए टर्मिनल में unset https_proxy टाइप करें।
डिप्लॉयमेंट को सत्यापित करने के लिए, निम्नलिखित कमांड का उपयोग करें।
kubectl get pods --namespace=kube-system
Calico पॉड्स calico से शुरू होते हैं। जांचें कि प्रत्येक की स्थिति Running है।
kubeadm के साथ लोकल Calico क्लस्टर बनाना
kubeadm का उपयोग करके पंद्रह मिनट में एक लोकल सिंगल-होस्ट Calico क्लस्टर प्राप्त करने के लिए,
Calico क्विकस्टार्ट देखें।
आगे क्या है
एक बार जब आपका क्लस्टर चल रहा हो, तो आप कुबेरनेट्स नेटवर्कपॉलिसी को आज़माने के लिए नेटवर्क पॉलिसी घोषित करें का पालन कर सकते हैं।
9 - Konnectivity सेटअप
Konnectivity सेवा कंट्रोल प्लेन से क्लस्टर संचार के लिए TCP स्तर का प्रॉक्सी प्रदान करती है।
शुरू करने से पहले
आपके पास एक कुबेरनेटेस क्लस्टर होना चाहिए, और kubectl कमांड-लाइन टूल को आपके क्लस्टर के साथ संवाद करने के लिए कॉन्फ़िगर किया जाना चाहिए। इस ट्यूटोरियल को कम से कम दो नोड्स वाले क्लस्टर पर चलाने की सलाह दी जाती है जो कंट्रोल प्लेन होस्ट के रूप में कार्य नहीं कर रहे हैं। यदि आपके पास पहले से कोई क्लस्टर नहीं है, तो आप इसे minikube का उपयोग करके बना सकते हैं।
Konnectivity सेवा कॉन्फ़िगर करें
निम्नलिखित चरणों के लिए एक egress कॉन्फ़िगरेशन की आवश्यकता है, उदाहरण के लिए:
apiVersion:apiserver.k8s.io/v1beta1kind:EgressSelectorConfigurationegressSelections:# Since we want to control the egress traffic to the cluster, we use the# "cluster" as the name. Other supported values are "etcd", and "controlplane".- name:clusterconnection:# This controls the protocol between the API Server and the Konnectivity# server. Supported values are "GRPC" and "HTTPConnect". There is no# end user visible difference between the two modes. You need to set the# Konnectivity server to work in the same mode.proxyProtocol:GRPCtransport:# This controls what transport the API Server uses to communicate with the# Konnectivity server. UDS is recommended if the Konnectivity server# locates on the same machine as the API Server. You need to configure the# Konnectivity server to listen on the same UDS socket.# The other supported transport is "tcp". You will need to set up TLS # config to secure the TCP transport.uds:udsName:/etc/kubernetes/konnectivity-server/konnectivity-server.socket
आपको API सर्वर को Konnectivity सेवा का उपयोग करने और नेटवर्क ट्रैफ़िक को क्लस्टर नोड्स की ओर निर्देशित करने के लिए कॉन्फ़िगर करना होगा:
konnectivity-server के लिए एक प्रमाणपत्र और kubeconfig जेनरेट करें या प्राप्त करें।
उदाहरण के लिए, आप एक X.509 प्रमाणपत्र जारी करने के लिए OpenSSL कमांड लाइन टूल का उपयोग कर सकते हैं,
कंट्रोल-प्लेन होस्ट से क्लस्टर CA प्रमाणपत्र /etc/kubernetes/pki/ca.crt का उपयोग करके।
अपने कंट्रोल प्लेन नोड पर Konnectivity सर्वर को डिप्लॉय करें। प्रदान किया गया
konnectivity-server.yaml मैनिफेस्ट मानता है
कि Kubernetes कंपोनेंट्स आपके क्लस्टर में एक static Pod के रूप में डिप्लॉय किए गए हैं। यदि नहीं, तो आप Konnectivity
सर्वर को एक DaemonSet के रूप में डिप्लॉय कर सकते हैं।
apiVersion:v1kind:Podmetadata:name:konnectivity-servernamespace:kube-systemspec:priorityClassName:system-cluster-criticalhostNetwork:truecontainers:- name:konnectivity-server-containerimage:registry.k8s.io/kas-network-proxy/proxy-server:v0.0.37command:["/proxy-server"]args:["--logtostderr=true",# This needs to be consistent with the value set in egressSelectorConfiguration."--uds-name=/etc/kubernetes/konnectivity-server/konnectivity-server.socket","--delete-existing-uds-file",# The following two lines assume the Konnectivity server is# deployed on the same machine as the apiserver, and the certs and# key of the API Server are at the specified location."--cluster-cert=/etc/kubernetes/pki/apiserver.crt","--cluster-key=/etc/kubernetes/pki/apiserver.key",# This needs to be consistent with the value set in egressSelectorConfiguration."--mode=grpc","--server-port=0","--agent-port=8132","--admin-port=8133","--health-port=8134","--agent-namespace=kube-system","--agent-service-account=konnectivity-agent","--kubeconfig=/etc/kubernetes/konnectivity-server.conf","--authentication-audience=system:konnectivity-server"]livenessProbe:httpGet:scheme:HTTPhost:127.0.0.1port:8134path:/healthzinitialDelaySeconds:30timeoutSeconds:60ports:- name:agentportcontainerPort:8132hostPort:8132- name:adminportcontainerPort:8133hostPort:8133- name:healthportcontainerPort:8134hostPort:8134volumeMounts:- name:k8s-certsmountPath:/etc/kubernetes/pkireadOnly:true- name:kubeconfigmountPath:/etc/kubernetes/konnectivity-server.confreadOnly:true- name:konnectivity-udsmountPath:/etc/kubernetes/konnectivity-serverreadOnly:falsevolumes:- name:k8s-certshostPath:path:/etc/kubernetes/pki- name:kubeconfighostPath:path:/etc/kubernetes/konnectivity-server.conftype:FileOrCreate- name:konnectivity-udshostPath:path:/etc/kubernetes/konnectivity-servertype:DirectoryOrCreate
फिर अपने क्लस्टर में Konnectivity एजेंट्स को डिप्लॉय करें:
apiVersion:apps/v1# Alternatively, you can deploy the agents as Deployments. It is not necessary# to have an agent on each node.kind:DaemonSetmetadata:labels:addonmanager.kubernetes.io/mode:Reconcilek8s-app:konnectivity-agentnamespace:kube-systemname:konnectivity-agentspec:selector:matchLabels:k8s-app:konnectivity-agenttemplate:metadata:labels:k8s-app:konnectivity-agentspec:priorityClassName:system-cluster-criticaltolerations:- key:"CriticalAddonsOnly"operator:"Exists"containers:- image:us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent:v0.0.37name:konnectivity-agentcommand:["/proxy-agent"]args:["--logtostderr=true","--ca-cert=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt",# Since the konnectivity server runs with hostNetwork=true,# this is the IP address of the master machine."--proxy-server-host=35.225.206.7","--proxy-server-port=8132","--admin-server-port=8133","--health-server-port=8134","--service-account-token-path=/var/run/secrets/tokens/konnectivity-agent-token"]volumeMounts:- mountPath:/var/run/secrets/tokensname:konnectivity-agent-tokenlivenessProbe:httpGet:port:8134path:/healthzinitialDelaySeconds:15timeoutSeconds:15serviceAccountName:konnectivity-agentvolumes:- name:konnectivity-agent-tokenprojected:sources:- serviceAccountToken:path:konnectivity-agent-tokenaudience:system:konnectivity-server
अंत में, यदि आपके क्लस्टर में RBAC सक्षम है, तो संबंधित RBAC नियम बनाएं:
अपने क्लस्टर के भीतर ट्रैफ़िक को ट्रांसपोर्ट लेयर सिक्योरिटी (टीएलएस) का उपयोग करके सुरक्षित करना समझें।
10.1 - क्यूबलेट के लिए प्रमाणपत्र आवर्तन कॉन्फ़िगर करें
यह पृष्ठ दिखाता है कि क्यूबलेट के लिए प्रमाणपत्र आवर्तन कैसे सक्षम और कॉन्फ़िगर कर सकते है।
फ़ीचर स्थिति:Kubernetes v1.19 [stable]
शुरू करने से पहले
कम से कम कुबेरनेट्स संस्करण 1.8.0 या उसके बाद की आवश्यकता है।
अवलोकन
क्यूबलेट प्रमाणपत्रों का उपयोग कुबरनेट्स API के साथ प्रमाणित करने के लिए करता है।
डिफ़ॉल्ट रूप से, ये प्रमाणपत्र एक वर्ष की समाप्ति के साथ जारी किए जाते हैं ताकि उन्हें बार-बार नवीनीकृत करने की आवश्यकता न हो।
कुबरनेट्स में क्यूबलेट प्रमाणपत्र आवर्तन
शामिल है, जो स्वचालित रूप से एक नई कुंजी उत्पन्न करेगा
जो स्वचालित रूप से एक नई कुंजी उत्पन्न करेगा और वर्तमान प्रमाणपत्र की समाप्ति के करीब आने पर कुबरनेट्स API से एक नया प्रमाणपत्र अनुरोध करेगा।
एक बार नया प्रमाणपत्र उपलब्ध हो जाने पर, यह कुबरनेट्स API के साथ कनेक्शन को प्रमाणित करने के लिए उपयोग किया जाएगा।
क्लाइंट प्रमाणपत्र रोटेशन सक्षम करना
kubelet प्रक्रिया एक प्राचल --rotate-certificates स्वीकार करती है जो नियंत्रित करती है कि क्या कुबलेट स्वचालित रूप से वर्तमान में उपयोग किए जा रहे प्रमाणपत्र की समाप्ति के करीब आने पर एक नया प्रमाणपत्र अनुरोध करेगा।
kube-controller-manager प्रक्रिया एक प्राचल स्वीकार करती है
--cluster-signing-duration (--experimental-cluster-signing-duration 1.19 से पहले)
जो नियंत्रित करता है कि प्रमाणपत्र कितने समय के लिए जारी किए जाएंगे।
प्रमाणपत्र रोटेशन कॉन्फ़िगरेशन को समझना
जब एक कुबलेट शुरू होता है, यदि इसे बूटस्ट्रैप करने के लिए कॉन्फ़िगर किया गया है (उपयोग करते हुए
--bootstrap-kubeconfig फ्लैग), तो यह कुबरनेट्स API से कनेक्ट करने और एक प्रमाणपत्र हस्ताक्षर अनुरोध जारी करने के लिए अपने प्रारंभिक प्रमाणपत्र का उपयोग करेगा। आप प्रमाणपत्र हस्ताक्षर अनुरोधों की स्थिति देख सकते हैं:
kubectl get csr
शुरुआत में, किसी नोड पर कुबलेट से एक प्रमाणपत्र हस्ताक्षर अनुरोध की स्थिति Pending होगी।
यदि प्रमाणपत्र हस्ताक्षर अनुरोध विशिष्ट मानदंडों को पूरा करता है, तो इसे नियंत्रक प्रबंधक द्वारा स्वचालित रूप से अनुमोदित किया जाएगा, और फिर इसकी स्थिति Approved होगी।
इसके बाद, नियंत्रक प्रबंधक एक प्रमाणपत्र पर हस्ताक्षर करेगा, जो
--cluster-signing-duration पैरामीटर द्वारा निर्दिष्ट अवधि के लिए जारी किया जाएगा, और हस्ताक्षरित प्रमाणपत्र को प्रमाणपत्र हस्ताक्षर अनुरोध से जोड़ा जाएगा।
कुबलेट कुबरनेट्स API से हस्ताक्षरित प्रमाणपत्र प्राप्त करेगा और इसे डिस्क पर लिखेगा,
--cert-dir द्वारा निर्दिष्ट स्थान में। फिर कुबलेट कुबरनेट्स API से कनेक्ट करने के लिए नए प्रमाणपत्र का उपयोग करेगा।
जैसे ही हस्ताक्षरित प्रमाणपत्र की समाप्ति निकट आती है, कुबलेट स्वचालित रूप से कुबरनेट्स API का उपयोग करके एक नया प्रमाणपत्र हस्ताक्षर अनुरोध जारी करेगा।
यह प्रमाणपत्र पर शेष समय के 30% और 10% के बीच किसी भी बिंदु पर हो सकता है।
फिर से, नियंत्रक प्रबंधक स्वचालित रूप से प्रमाणपत्र अनुरोध को अनुमोदित करेगा और प्रमाणपत्र हस्ताक्षर अनुरोध से एक हस्ताक्षरित प्रमाणपत्र जोड़ेगा।
कुबलेट कुबरनेट्स API से नया हस्ताक्षरित प्रमाणपत्र प्राप्त करेगा और इसे डिस्क पर लिखेगा।
फिर यह कुबरनेट्स API के साथ कनेक्शन को नए प्रमाणपत्र का उपयोग करके पुन: कनेक्ट करने के लिए अपडेट करेगा।