【问题标题】:kubernetes update secrets using imperative commandsKubernetes 使用命令式命令更新机密
【发布时间】:2021-03-28 22:19:27
【问题描述】:

我正在使用以下命令创建 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”。 错误:没有传递给应用的对象

感谢任何快速帮助

【问题讨论】:

    标签: kubernetes kubernetes-secrets


    【解决方案1】:

    使用 kubectl 命令式命令添加新文字

    使用命令式命令时,通常意味着您不会将更改保存在集群外的位​​置。您可以直接编辑集群中的 Secret:

    kubectl edit secret test-secret
    

    但是,如果您想自动化您的“添加”,那么您很可能在应用到集群之前将您的 Secret 保存在另一个地方。如何执行此操作取决于您如何管理 Secret。一种方法是将其添加到例如Vault 然后让它自动注入。当以自动化方式工作时,更容易练习 不可变 Secrets,并创建新的而不是变异 - 因为您通常还需要重新部署您的应用程序,以确保它使用新的。如果您使用不可变的 Secret,使用 Kustomize with secretGenerator 可能是一个不错的选择。

    【讨论】:

    【解决方案2】:

    你可以使用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
    

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      相关资源
      最近更新 更多