kubectl का उपयोग करके सीक्रेट का प्रबंधन
यह पेज आपको kubectl कमांड-लाइन टूल का उपयोग करके कुबेरनेट्स Secret को कैसे बनाने, संपादित करने, प्रबंधित करने और हटाने का तरीका दिखाता है।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
सीक्रेट बनाएं
एक Secret ऑब्जेक्ट संवेदनशील डेटा जैसे क्रेडेंशियल को स्टोर करता है जिसका उपयोग पॉड्स द्वारा डेटाबेस तक पहुंचने के लिए किया जाता है। उदाहरण के लिए, आपको डेटाबेस तक पहुंचने के लिए आवश्यक उपयोगकर्ता नाम और पासवर्ड को स्टोर करने के लिए एक सीक्रेट की आवश्यकता हो सकती है।
आप कमांड में रॉ डेटा पास करके या क्रेडेंशियल्स को फाइलों में स्टोर करके सीक्रेट बना सकते हैं जिन्हें आप कमांड में पास करते हैं। निम्नलिखित कमांड एक सीक्रेट बनाते हैं जो उपयोगकर्ता नाम admin और पासवर्ड S!B\*d$zDsb= को स्टोर करता है।
रॉ डेटा का उपयोग करें
निम्नलिखित कमांड चलाएं:
kubectl create secret generic db-user-pass \
--from-literal=username=admin \
--from-literal=password='S!B\*d$zDsb='
आपको अपनी स्ट्रिंग में विशेष वर्णों जैसे $, \, *, =, और ! को एस्केप करने के लिए एकल उद्धरण ''' का उपयोग करना होगा। यदि आप ऐसा नहीं करते हैं, तो आपका शेल इन वर्णों की व्याख्या करेगा।
टिप्पणी:
सीक्रेट के लिएstringData फील्ड सर्वर-साइड एप्लाई के साथ अच्छी तरह से काम नहीं करता है।स्रोत फाइलों का उपयोग करें
-
क्रेडेंशियल्स को फाइलों में स्टोर करें:
echo -n 'admin' > ./username.txt echo -n 'S!B\*d$zDsb=' > ./password.txt-nफ्लैग यह सुनिश्चित करता है कि जनरेट की गई फाइलों में टेक्स्ट के अंत में एक अतिरिक्त न्यूलाइन वर्ण नहीं है। यह महत्वपूर्ण है क्योंकि जबkubectlएक फाइल को पढ़ता है और सामग्री को base64 स्ट्रिंग में एनकोड करता है, तो अतिरिक्त न्यूलाइन वर्ण भी एनकोड हो जाता है। आपको फाइल में शामिल स्ट्रिंग्स में विशेष वर्णों को एस्केप करने की आवश्यकता नहीं है। -
kubectlकमांड में फाइल पथ पास करें:kubectl create secret generic db-user-pass \ --from-file=./username.txt \ --from-file=./password.txtडिफ़ॉल्ट कुंजी नाम फाइल का नाम है। आप वैकल्पिक रूप से
--from-file=[key=]sourceका उपयोग करके कुंजी नाम सेट कर सकते हैं। उदाहरण के लिए:kubectl create secret generic db-user-pass \ --from-file=username=./username.txt \ --from-file=password=./password.txt
किसी भी विधि के साथ, आउटपुट इस तरह का होता है:
secret/db-user-pass created
सीक्रेट को सत्यापित करें
जांचें कि सीक्रेट बनाया गया था:
kubectl get secrets
आउटपुट इस तरह का होता है:
NAME TYPE DATA AGE
db-user-pass Opaque 2 51s
सीक्रेट के विवरण देखें:
kubectl describe secret db-user-pass
आउटपुट इस तरह का होता है:
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 12 bytes
username: 5 bytes
kubectl get और kubectl describe कमांड डिफ़ॉल्ट रूप से Secret की सामग्री को दिखाने से बचते हैं। यह Secret को गलती से एक्सपोज होने से बचाने के लिए है, या टर्मिनल लॉग में स्टोर होने से बचाने के लिए है।
सीक्रेट को डिकोड करें
-
आपके द्वारा बनाए गए सीक्रेट की सामग्री देखें:
kubectl get secret db-user-pass -o jsonpath='{.data}'आउटपुट इस तरह का होता है:
{ "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" } -
passwordडेटा को डिकोड करें:echo 'UyFCXCpkJHpEc2I9' | base64 --decodeआउटपुट इस तरह का होता है:
S!B\*d$zDsb=सावधान:
यह दस्तावेज़ीकरण के उद्देश्यों के लिए एक उदाहरण है। व्यवहार में, यह विधि एनकोडेड डेटा के साथ कमांड को आपके शेल इतिहास में स्टोर कर सकती है। आपके कंप्यूटर तक पहुंच रखने वाला कोई भी व्यक्ति कमांड को ढूंढ सकता है और सीक्रेट को डिकोड कर सकता है। एक बेहतर दृष्टिकोण व्यू और डिकोड कमांड को संयोजित करना है।kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
सीक्रेट को संपादित करें
आप एक मौजूदा Secret ऑब्जेक्ट को संपादित कर सकते हैं जब तक कि वह अपरिवर्तनीय नहीं है। सीक्रेट को संपादित करने के लिए, निम्नलिखित कमांड चलाएं:
kubectl edit secrets <secret-name>
यह आपका डिफ़ॉल्ट एडिटर खोलता है और आपको data फील्ड में base64 एनकोडेड सीक्रेट मान को अपडेट करने की अनुमति देता है, जैसा कि निम्नलिखित उदाहरण में है:
# कृपया नीचे दिए गए ऑब्जेक्ट को संपादित करें। '#' से शुरू होने वाली लाइनें अनदेखी कर दी जाएंगी,
# और एक खाली फाइल संपादन को निरस्त कर देगी। यदि इस फाइल को सहेजते समय कोई त्रुटि होती है, तो इसे
# संबंधित विफलताओं के साथ फिर से खोला जाएगा।
#
apiVersion: v1
data:
password: UyFCXCpkJHpEc2I9
username: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: "2022-06-28T17:44:13Z"
name: db-user-pass
namespace: default
resourceVersion: "12708504"
uid: 91becd59-78fa-4c85-823f-6d44436242ac
type: Opaque
साफ़ करें
सीक्रेट को हटाने के लिए, निम्नलिखित कमांड चलाएं:
kubectl delete secret db-user-pass
आगे क्या है
- सीक्रेट कॉन्सेप्ट के बारे में और पढ़ें
- कॉन्फ़िग फाइल का उपयोग करके सीक्रेट का प्रबंधन करना सीखें
- kustomize का उपयोग करके सीक्रेट का प्रबंधन करना सीखें