kubernetes 使用命令式命令更新机密

问题描述

我正在使用以下命令创建 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