kubectl का उपयोग करके Secret का प्रबंधन

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='

आपको अपनी स्ट्रिंग में विशेष वर्णों जैसे $, \, *, =, और ! को एस्केप करने के लिए एकल उद्धरण ''' का उपयोग करना होगा। यदि आप ऐसा नहीं करते हैं, तो आपका शेल इन वर्णों की व्याख्या करेगा।

स्रोत फाइलों का उपयोग करें

  1. क्रेडेंशियल्स को फाइलों में स्टोर करें:

    echo -n 'admin' > ./username.txt
    echo -n 'S!B\*d$zDsb=' > ./password.txt
    

    -n फ्लैग यह सुनिश्चित करता है कि जनरेट की गई फाइलों में टेक्स्ट के अंत में एक अतिरिक्त न्यूलाइन वर्ण नहीं है। यह महत्वपूर्ण है क्योंकि जब kubectl एक फाइल को पढ़ता है और सामग्री को base64 स्ट्रिंग में एनकोड करता है, तो अतिरिक्त न्यूलाइन वर्ण भी एनकोड हो जाता है। आपको फाइल में शामिल स्ट्रिंग्स में विशेष वर्णों को एस्केप करने की आवश्यकता नहीं है।

  2. 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 को डिकोड करें

  1. आपके द्वारा बनाए गए Secret की सामग्री देखें:

    kubectl get secret db-user-pass -o jsonpath='{.data}'
    

    आउटपुट इस तरह का होता है:

    { "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
    
  2. 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

आगे क्या है