কোনও ফাইল থেকে উত্পন্ন হওয়ার সময় আমি কীভাবে কুবারনেটসের কোনও গোপনীয়তা আপডেট করতে পারি?


103

আমি একটি গোপন ব্যবহার করে তৈরি করেছি

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

আমি যদি মানগুলি আপডেট করতে চাই - তবে আমি কীভাবে এটি করতে পারি?

উত্তর:


263

এই কাজ করা উচিত:

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

23
আমি yaml এবং কমান্ড প্রয়োগ করতে আউটপুটটির চতুর ব্যবহার পছন্দ করি। +1
কেভিন ম্যানসেল

12
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

--dry-run=clientকুবেক্টেল ১.১৮ বা তার বেশি এর সাথে ব্যবহার করা দরকার ।
রিচভেল

65

আপনি গোপনীয়টিকে মুছে ফেলতে এবং তাৎক্ষণিকভাবে পুনরায় তৈরি করতে পারেন:

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

আমি এই কমান্ডগুলিকে একটি স্ক্রিপ্টে রেখেছি, প্রথম কলটিতে আপনি (এখনও নয়) অস্তিত্বহীন গোপনীয়তার বিষয়ে একটি সতর্কতা পান তবে এটি কাজ করে।


4
গোপন মুছে ফেলা হয় তখন শুঁটি দিয়ে কী ঘটে?
ব্রুনোজেসিএম

4
@ ব্রুনোজেসিএম চলমান পোডগুলি প্রভাবিত হয় না, এনভ ভেরিয়েবলের মাধ্যমে গোপনীয়তা পাওয়া যায় বা ভলিউম হিসাবে মাউন্ট করা যায় তা নয়। কোনও গোপন না থাকার সময় যদি আমি সেই সময়ে কোনও পড শুরু করি তবে সেগুলি একটি ত্রুটিতে পরিণত হয়; অতএব জানোসের উত্তরই যাওয়ার পছন্দের উপায়।
পিজেমিচ

4
হ্যাঁ, আমি দেখছি, ব্যবহারটি applyআরও বেশি অর্থবোধ করে, ধন্যবাদ!
BrunoJCM

এটি আমার পক্ষে কাজ করছে না কারণ আমি ভুলে গিয়েছিলাম--namespace=kube-system
সৌরদীপ নন্দ

4
অবশ্যই কোন নেমস্পেসে আপনি গোপনীয়তা যুক্ত করতে চান তার উপর নির্ভর করে , অবশ্যই যদি আপনার নামের জায়গার যুক্তি যুক্ত করতে হয় তবে ডিফল্ট না হয় ।
পিজেমিচ

9

অন্যথা, আপনি ব্যবহার করতে পারেন 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}\"}}"

আমার উত্তরটি সবচেয়ে ভাল পূরণ করে এমন উত্তরের জন্য ডেভিকে ধন্যবাদ জানাই।


1

কেবলমাত্র এই উত্তরগুলির প্রসারিত করার জন্য আমি জানতে পেরেছি যে মুছতে মুছে ফেলার জন্য '--ignore-not-পাওয়া' যুক্ত করা আমাদের CICD- তে সহায়তা করেছে কারণ গোপনটি না থাকলে এটি ত্রুটিযুক্ত হবে না, এটি কেবল এগিয়ে গিয়ে এটি তৈরি করবে:

kubectl delete secret production-tls --ignore-not-found
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./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} ```
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.