फ़ाइल से उत्पन्न होने पर मैं कुबेरनेट पर एक रहस्य कैसे अपडेट कर सकता हूं?


जवाबों:


241

यह काम करना चाहिए:

kubectl create secret generic production-tls \
    --from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml | 
  kubectl apply -f -

21
मुझे yaml और कमांड लागू करने के लिए आउटपुट का चतुर उपयोग पसंद है। +1
केविन मैनसेल

10
K8s के नवीनतम संस्करण में, आप प्रदान करना होगा --save-configकरने के लिए kubectl create secretआदेश में एक CLI चेतावनी से बचने के लिए।
डेविड हाउस

fyi, हाल ही में (सितम्बर 2019) वाक्य रचना जो tls के लिए काम करती है गुप्त: समारोह kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -सादे पाठ में थे।
ldg

63

आप गुप्त को हटा सकते हैं और तुरंत बना सकते हैं:

kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt

मैंने इन आदेशों को एक स्क्रिप्ट में रखा है, पहली कॉल पर आपको अस्तित्व के बारे में एक चेतावनी मिलती है (अभी तक) नहीं है, लेकिन यह काम करता है।


3
फली के साथ क्या होता है जबकि रहस्य को हटा दिया जाता है?
ब्रूनो जेसीएम

4
@BrunoJCM चल रहे फली प्रभावित नहीं होते हैं, कोई फर्क नहीं पड़ता कि वे env चर के माध्यम से रहस्य प्राप्त करते हैं या संस्करणों के रूप में घुड़सवार होते हैं। यदि कोई पॉड मैं उस समय में शुरू हुआ जब कोई रहस्य नहीं है, तो वे एक त्रुटि में चले जाते हैं; इसलिए जानोस का जवाब जाने का पसंदीदा तरीका है।
PJMeisch

2
हाँ, मैं देख रहा हूँ, का उपयोग करना applyबहुत अधिक समझ में आता है, धन्यवाद!
ब्रूनो जेसीएम

यह मेरे लिए काम नहीं कर रहा था क्योंकि मैं भूल गया था--namespace=kube-system
सौरदीप नंदा

इस बात पर निर्भर करता है कि आप किस नामस्थान को गुप्त जोड़ना चाहते हैं, यदि निश्चित रूप से डिफ़ॉल्ट नहीं है तो आपको नामस्थान तर्क जोड़ना होगा।
PJMeisch

8

वैकल्पिक रूप से, आप भी उपयोग कर सकते हैं jqs ' =या |=ऑपरेटर अद्यतन रहस्यों को मक्खी पर।

TLS_KEY=$(base64 < "./tls.key" | tr -d '\n')
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')
kubectl get secrets production-tls -o json \
        | jq '.data["tls.key"] |= "$TLS_KEY"' \
        | jq '.data["tls.crt"] |= "$TLS_CRT"' \
        | kubectl apply -f -

यद्यपि यह kubectl create secret generic --dry-runदृष्टिकोण के रूप में सुरुचिपूर्ण या सरल नहीं हो सकता है , तकनीकी रूप से , यह दृष्टिकोण वास्तव में उन्हें हटाने / पुनः बनाने के बजाय मूल्यों को अपडेट कर रहा है। आपको भी आवश्यकता होगी jqऔर base64(या openssl enc -base64) उपलब्ध कमांड, trअनुगामी न्यूलाइन्स को ट्रिम करने के लिए एक सामान्य रूप से उपलब्ध लिनक्स उपयोगिता है।

अपडेट ऑपरेटर के बारे में अधिक जानकारी के लिए यहां देखें ।jq|=


1

जैसा कि मैं ऊपर दीवी के उत्तर का जवाब देने में सक्षम नहीं था, जो मुझे पसंद है क्योंकि यह स्वामित्व को संरक्षित करेगा जहां रिकॉर्ड को हटाने और पुन: संग्रह करने की क्षमता है, जो किसी भी अतिरिक्त जानकारी को खो सकता है। मैं इसे नए लोगों के लिए जोड़ रहा हूं जो तुरंत समझ नहीं सकते हैं मट्ठा उनके चर को प्रक्षेपित नहीं किया जा रहा है।

TLS_KEY=$(base64 < "./tls.key" | tr -d '\n')
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')
kubectl get secrets production-tls -o json \
        | jq ".data[\"tls.key\"] |= \"$TLS_KEY\"" \
        | jq ".data[\"tls.crt\"] |= \"$TLS_CRT\"" \
        | kubectl apply -f -

यह मुझे कुब्तेल के 'पैच' पद्धति का उपयोग करने का प्रयास करने के लिए प्रेरित करता है, जो काम करने के लिए भी लगता है।

kubectl \
        patch \
        secret \
        production-tls \
        -p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"

इस उत्तर के लिए धन्यवाद, जो मेरी जरूरतों को पूरा करता है।


0

अधिक विशिष्ट मामलों के लिए आपको अपने नाम स्थान को निर्दिष्ट करने की आवश्यकता हो सकती है कि प्रमाण पत्र को नवीनीकृत करने और पुराने को हटाने की आवश्यकता है।

**For deletion of the cert **
kubectl delete secret -n `namespace`

**For creation of new cert to specific namespace **
kubectl create secret {your-cert-name} --key /etc/certs/{name}.com.key --cert /etc/certs/{name}.com.crt -n {namespace} ```

0

मैंने इसे इस्तेमाल किया है और यह एक आकर्षण की तरह काम करता है:

kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

docker -server = https://index.docker.io/v1/ (DockerHub के लिए)

अधिक जानकारी के लिए: https://kubernetes.io/docs/tasks/pf-container/pull-image-pStreet-registry/#create-a-secret-by-prociding-credentials-on-the-command-line

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.