kubectl का उपयोग करके Secret का प्रबंधन
यह पेज आपको kubectl
कमांड-लाइन टूल का उपयोग करके कुबेरनेट्स Secret को कैसे बनाने, संपादित करने, प्रबंधित करने और हटाने का तरीका दिखाता है।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
Secret बनाएं
एक Secret
ऑब्जेक्ट संवेदनशील डेटा जैसे क्रेडेंशियल को स्टोर करता है जिसका उपयोग पॉड्स द्वारा डेटाबेस तक पहुंचने के लिए किया जाता है। उदाहरण के लिए, आपको डेटाबेस तक पहुंचने के लिए आवश्यक उपयोगकर्ता नाम और पासवर्ड को स्टोर करने के लिए एक Secret की आवश्यकता हो सकती है।
आप कमांड में रॉ डेटा पास करके या क्रेडेंशियल्स को फाइलों में स्टोर करके Secret बना सकते हैं जिन्हें आप कमांड में पास करते हैं। निम्नलिखित कमांड एक Secret बनाते हैं जो उपयोगकर्ता नाम admin
और पासवर्ड S!B\*d$zDsb=
को स्टोर करता है।
रॉ डेटा का उपयोग करें
निम्नलिखित कमांड चलाएं:
kubectl create secret generic db-user-pass \
--from-literal=username=admin \
--from-literal=password='S!B\*d$zDsb='
आपको अपनी स्ट्रिंग में विशेष वर्णों जैसे $
, \
, *
, =
, और !
को एस्केप करने के लिए एकल उद्धरण '''
का उपयोग करना होगा। यदि आप ऐसा नहीं करते हैं, तो आपका शेल इन वर्णों की व्याख्या करेगा।
टिप्पणी:
Secret के लिए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
Secret को सत्यापित करें
जांचें कि Secret बनाया गया था:
kubectl get secrets
आउटपुट इस तरह का होता है:
NAME TYPE DATA AGE
db-user-pass Opaque 2 51s
Secret के विवरण देखें:
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
को गलती से एक्सपोज होने से बचाने के लिए है, या टर्मिनल लॉग में स्टोर होने से बचाने के लिए है।
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 को संपादित करें
आप एक मौजूदा Secret
ऑब्जेक्ट को संपादित कर सकते हैं जब तक कि वह अपरिवर्तनीय नहीं है। Secret को संपादित करने के लिए, निम्नलिखित कमांड चलाएं:
kubectl edit secrets <secret-name>
यह आपका डिफ़ॉल्ट एडिटर खोलता है और आपको data
फील्ड में base64 एनकोडेड Secret मान को अपडेट करने की अनुमति देता है, जैसा कि निम्नलिखित उदाहरण में है:
# कृपया नीचे दिए गए ऑब्जेक्ट को संपादित करें। '#' से शुरू होने वाली लाइनें अनदेखी कर दी जाएंगी,
# और एक खाली फाइल संपादन को निरस्त कर देगी। यदि इस फाइल को सहेजते समय कोई त्रुटि होती है, तो इसे
# संबंधित विफलताओं के साथ फिर से खोला जाएगा।
#
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
साफ़ करें
Secret को हटाने के लिए, निम्नलिखित कमांड चलाएं:
kubectl delete secret db-user-pass
आगे क्या है
- Secret कॉन्सेप्ट के बारे में और पढ़ें
- कॉन्फ़िग फाइल का उपयोग करके Secret का प्रबंधन करना सीखें
- kustomize का उपयोग करके Secret का प्रबंधन करना सीखें