यह पृष्ठ आपको दिखाता है कि kubectl कमांड-लाइन टूल का उपयोग करके कुबेरनेट्स
Secrets कैसे बनाएं, संपादित करें, प्रबंधित करें और हटाएं।
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
एक Secret object संवेदनशील डेटा जैसे कि क्रेडेंशियल्स को स्टोर करता है
जिनका उपयोग Pods सेवाओं तक पहुंचने के लिए करते हैं। उदाहरण के लिए, आपको एक Secret की आवश्यकता हो सकती है
डेटाबेस तक पहुंचने के लिए आवश्यक username और password को स्टोर करने के लिए।
आप कमांड में raw data पास करके, या उन क्रेडेंशियल्स को फ़ाइलों में स्टोर करके Secret बना सकते हैं
जिन्हें आप कमांड में पास करते हैं। निम्नलिखित कमांड
एक Secret बनाते हैं जो username admin और password S!B\*d$zDsb= को स्टोर करता है।
निम्नलिखित कमांड चलाएं:
kubectl create secret generic db-user-pass \
--from-literal=username=admin \
--from-literal=password='S!B\*d$zDsb='
आपको विशेष वर्णों जैसे $, \,
*, =, और ! को अपने strings में escape करने के लिए single quotes '' का उपयोग करना चाहिए। यदि आप ऐसा नहीं करते हैं, तो आपका shell इन वर्णों की व्याख्या करेगा।
stringData फ़ील्ड server-side apply के साथ अच्छी तरह से काम नहीं करता है।क्रेडेंशियल्स को फ़ाइलों में स्टोर करें:
echo -n 'admin' > ./username.txt
echo -n 'S!B\*d$zDsb=' > ./password.txt
-n flag यह सुनिश्चित करता है कि उत्पन्न फ़ाइलों में
टेक्स्ट के अंत में एक अतिरिक्त newline वर्ण नहीं होता है। यह महत्वपूर्ण है क्योंकि जब kubectl
एक फ़ाइल पढ़ता है और सामग्री को base64 string में encode करता है, तो अतिरिक्त
newline वर्ण भी encode हो जाता है। आपको फ़ाइल में शामिल strings में विशेष वर्णों को escape करने की आवश्यकता नहीं है।
kubectl कमांड में फ़ाइल paths पास करें:
kubectl create secret generic db-user-pass \
--from-file=./username.txt \
--from-file=./password.txt
डिफ़ॉल्ट key name फ़ाइल का नाम है। आप वैकल्पिक रूप से key name सेट कर सकते हैं
--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 बनाया गया था:
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 को गलती से exposed होने से, या terminal log में stored होने से बचाने के लिए है।
आपके द्वारा बनाए गए 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 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: 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