问题描述
我正在使用以下命令创建 kubernetes 机密
kubectl create secret generic test-secret --save-config --dry-run=client --from-literal=a=data1 --from-literal=a=data2 -o yaml | kubectl apply -f -
现在,我需要使用 kubectl 命令式命令添加新文字,该怎么做?? 说例如:
kubectl apply secret generic test-secret --from-literal=c=data3 -o yaml | kubectl apply -f -
但给出了以下错误
错误:未知标志:--from-literal 有关用法,请参阅“kubectl apply --help”。 错误:没有对象传递给应用
感谢任何快速帮助
解决方法
使用 kubectl 命令式命令添加新文字
使用命令式命令时,通常意味着您不会将更改保存在集群之外的位置。您可以直接编辑集群中的 Secret:
kubectl edit secret test-secret
但是如果您想自动化您的“添加”,那么您很可能在应用到集群之前将您的 Secret 保存到另一个位置。如何做到这一点取决于您如何管理 Secrets。一种方法是将其添加到例如Vault 然后让它自动注入。当以自动化方式工作时,更容易实践不可变秘密,并创建新秘密而不是变异 - 因为您通常还需要重新部署您的应用程序,以确保它使用新的。如果您使用不可变的 Secret,使用 Kustomize with secretGenerator 可能是一个不错的选择。
,您可以使用 kubectl patch
命令
示例
root@controlplane:~# kubectl patch secrets test-secret --type='json' -p='[{"op" : "replace","path" : "/data/newkey","value" : "bmV3VmFsCg=="}]'
secret/test-secret patched
root@controlplane:~# kubectl describe secrets test-secret
Name: test-secret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
a: 5 bytes
b: 5 bytes
newkey: 7 bytes
您需要传递编码值,以编码/解码密钥的新值,您可以使用以下命令
root@controlplane:~# echo "newValue" | base64
bmV3VmFsdWUK
root@controlplane:~# echo bmV3VmFsdWUK | base64 -d
newValue
另一种选择是使用 kubectl edit
,但如果您将代码自动化,则无法使用编辑选项
kubectl edit secret test-secret