如何使用"kubectl patch --type='json'"更新密钥

13

我像这样创建了一个秘密:

kubectl create secret generic test --from-literal=username=testuser --from-literal=password=12345

我想将用户名更新为testuser2,但我只想使用kubectl patch --type='json'命令来做到这一点。

这是我尝试的方法:

kubectl patch secret test --type='json' -p='[{"data":{"username": "testuser 2"}}]' -v=1  

但我收到了:

"" 是无效的

记住,我想使用选项 --type='json' 来完成,没有其他解决办法。


数据对象不应该在方括号内,因此您可以使用 '{ "data": ... }' 而不是使用 '[{"data": ... }]'. - Maoz Zadok
3个回答

20

我在这里读到了如何做:这里引用了这篇很棒的文章。
这是JSON密钥:

{
    "apiVersion": "v1",
    "data": {
        "password": "aWx1dnRlc3Rz",
        "username": "dGVzdHVzZXI="
    },
    "kind": "Secret",
    "metadata": {
        "creationTimestamp": "2019-04-18T11:37:09Z",
        "name": "test",
        "namespace": "default",
        "resourceVersion": "3017",
        "selfLink": "/api/v1/namespaces/default/secrets/test",
        "uid": "4d0a763e-61ce-11e9-92b6-0242ac110015"
    },
    "type": "Opaque"
}

因此,为了更新用户字段,我需要创建JSON Patch格式:
[
    {
        "op" : "replace" ,
        "path" : "/data/username" ,
        "value" : "dGVzdHVzZXIy" # testuser2 in base64
    }
]

请注意,该值应为base64编码。

结果是:

kubectl patch secret test --type='json' -p='[{"op" : "replace" ,"path" : "/data/username" ,"value" : "dGVzdHVzZXIy"}]'

2
谢谢,它可以工作了。 注意:如果您使用直接的HTTP请求来PATCH密钥,则必须设置Content-Type: application/json-patch+json。 - Sergey M.

3
这是我为了替换秘密而做的事情:
kubectl patch secret my-secret  --patch="{\"data\": { \"password\": \"$(echo -n mypassword |base64 -w0)\" }}"

您可以将 stringData 作为明文使用,如下所示
kubectl patch secret my-secret  --patch='{"stringData": { "password": "mypassword" }}'


请注意,补丁应该是一个对象{},而不是一个对象列表[{}] - Maoz Zadok

0

这个命令解决了我在1.24.x版本上的问题:

kubectl patch secret app-sec  --patch="{\"data\": { \"license-id\": \"TEST\" }}" -oyaml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接