K8S從secret文件生成密鑰后,如何更新Kubernetes上的密鑰呢?


K8S從secret文件生成密鑰后,如何更新Kubernetes上的密鑰呢?

 

 

前提

生成密鑰配置

kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key

方法一

相信大多數的人第一反應,是先刪除,再重新創建secret

kubectl delete secret tls-rancher-ingress -n cattle-systemkubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key

但是此方法存在明顯的問題:在刪除新建secret的空窗期,是存在風險,平時測試或者不大常用的服務還可以嘗試,但是在訪問活躍的情況下,會導致大量的異常請求。

方法二

通過--dry-run參數預覽,然后apply

kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key --dry-run -o yaml |kubectl apply -f -

方法二在創建secret的時候,添加了--dry-run的參數,具體使用方法可參考https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands,該參數的主要作用是預覽要發送到集群的對象,而無需真正提交。該方法較方法一更優雅簡單

方法三

使用jq的=或|=運算符來動態更新密鑰

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

方法三盡管它可能不像kubectl create secret tls --dry-run方法那樣優雅或簡單,但從技術上講,此方法實際上是在更新值,而不是刪除/重新創建它們。還需要jqbase64(或openssl enc -base64)命令,tr是一種常用的Linux實用程序,用於修剪尾隨換行符。

K8S從secret文件生成密鑰后,如何更新Kubernetes上的密鑰呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM