Chr*_*ski 64 kubernetes kubectl
我用秘密创造了一个秘密kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
如果我想更新值 - 我该怎么做?
Jan*_*art 167
这应该工作:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
P.J*_*sch 46
您可以删除并立即重新创建秘密:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Run Code Online (Sandbox Code Playgroud)
我把这些命令放在一个脚本中,在第一次调用时你得到一个关于(尚未)存在的秘密的警告,但这是有效的.
另外,您还可以使用jq
的=
或者|=
运营商更新秘密的飞行。
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 -
Run Code Online (Sandbox Code Playgroud)
尽管从kubectl create secret generic --dry-run
技术上讲它可能不那么优雅或简单,但从技术上讲,此方法实际上是在更新值,而不是删除/重新创建它们。您还将需要jq
和base64
(或openssl enc -base64
)命令可用,这tr
是一个常用的Linux实用程序,用于修剪尾随的换行符。
有关更新运算符的更多详细信息,请参见此处。jq
|=
由于我无法回复上面 Devy 的回答,我喜欢它,因为它会保留所有权,而删除和重新创建可能会丢失记录中的任何额外信息。我为那些可能不会立即理解他们的变量没有被插值的新人添加这个。
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 -
Run Code Online (Sandbox Code Playgroud)
这导致我尝试使用 kubectl 的“补丁”方法,这似乎也有效。
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Run Code Online (Sandbox Code Playgroud)
感谢 Devy 提供最能满足我需求的答案。
归档时间: |
|
查看次数: |
40253 次 |
最近记录: |