Saya telah membuat rahasia menggunakan
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
Jika saya ingin memperbarui nilai - bagaimana saya bisa melakukan ini?
Saya telah membuat rahasia menggunakan
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
Jika saya ingin memperbarui nilai - bagaimana saya bisa melakukan ini?
Jawaban:
Ini harus bekerja:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
kepada kubectl create secret
untuk menghindari peringatan CLI.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
Sertifikat dalam teks biasa.
Anda dapat menghapus dan segera membuat ulang rahasianya:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Saya meletakkan perintah ini dalam skrip, pada panggilan pertama Anda mendapat peringatan tentang (belum) rahasia yang ada, tetapi ini berfungsi.
apply
lebih masuk akal, terima kasih!
--namespace=kube-system
Alternatifnya, Anda juga dapat menggunakan jq
s =
or |=
operator untuk memperbarui rahasia dengan cepat.
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 -
Meskipun mungkin tidak seelegan atau sesederhana kubectl create secret generic --dry-run
pendekatannya, secara teknis, pendekatan ini benar-benar memperbarui nilai daripada menghapus / membuatnya kembali. Anda juga akan membutuhkan jq
dan base64
(atau openssl enc -base64
) perintah yang tersedia, tr
adalah utilitas Linux yang tersedia secara umum untuk memotong baris baru yang tertinggal.
Lihat di sini untuk detail lebih lanjut tentang jq
operator pembaruan |=
.
Karena saya tidak dapat membalas jawaban Devy di atas, yang saya suka karena ini akan mempertahankan Kepemilikan di mana menghapus dan membuat ulang berpotensi kehilangan informasi tambahan dalam catatan. Saya menambahkan ini untuk orang-orang baru yang mungkin tidak segera memahami mengapa variabel mereka tidak diinterpolasi.
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 -
Hal ini membuat saya mencoba menggunakan metode 'patch' dari kubectl, yang sepertinya juga berfungsi.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Terima kasih Devy atas jawaban yang paling sesuai dengan kebutuhan saya.
Untuk kasus yang lebih spesifik, Anda mungkin perlu menentukan namespace Anda bahwa sertifikat perlu diperbarui dan menghapus yang lama.
**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} ```
Hanya untuk memperluas jawaban ini saya menemukan bahwa menambahkan '--ignore-not-found' ke penghapusan membantu CICD kami karena tidak akan salah jika rahasianya tidak ada, itu hanya akan melanjutkan dan membuatnya:
kubectl delete secret production-tls --ignore-not-found
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt.
Saya telah menggunakan yang ini dan itu bekerja dengan sangat baik:
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/ (untuk DockerHub)
Untuk detail selengkapnya: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line