我使用创建了一个秘密
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
如果我想更新值 - 我该怎么做?
我使用创建了一个秘密
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
如果我想更新值 - 我该怎么做?
这应该有效:
kubectl create secret generic production-tls \
--save-config --dry-run=client \
--from-file=./tls.key --from-file=./tls.crt \
-o yaml |
kubectl apply -f -
您可以删除并立即重新创建密钥:
kubectl delete secret production-tls \
--ignore-not-found
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
我将这些命令放在一个脚本中。防止在第--ignore-not-found
一次运行时收到警告。
或者,您也可以使用jq
's=
或|=
运算符即时更新机密。
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
这是一个常用的 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 -
这导致我尝试使用 kubectl 的“补丁”方法,这似乎也有效。
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
感谢 Devy 提供最能满足我需求的答案。
Just to expand on these answers I found that adding '--ignore-not-found' to the delete helped with our CICD as it wouldn't error out if the secret didn't exist, it would just go ahead and create it:
kubectl delete secret production-tls --ignore-not-found
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt.
聚会迟到了,但我的意见仍然在这里。
可能我们可以同时使用patch
oredit
选项。
与edit
:
kubectl edit secrets/<SECRET_NAME> -n <NAME_SPACE>
base64
自己编码,然后在编辑时放置编码值。与patch
:
对于更具体的情况,您可能需要指定需要更新证书的命名空间并删除旧证书。
用于删除证书
kubectl delete secret -n `namespace`
为特定命名空间创建新证书
kubectl create secret {your-cert-name} --key /etc/certs/{name}.com.key --cert /etc/certs/{name}.com.crt -n {namespace}
我找到了这样做的最佳方法:
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt --dry-run=client -o yaml | kubectl apply -f -