如何使用“kubectl patch --type='json'”更新秘密

E23*_*235 7 kubernetes kubectl kubernetes-secrets

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

kubectl create secret generic test --from-literal=username=testuser --from-literal=password=12345
Run Code Online (Sandbox Code Playgroud)

我想将用户名更新为,testuser2但我只想使用kubectl patch --type='json'.

这就是我尝试这样做的方式:

kubectl patch secret test --type='json' -p='[{"data":{"username": "testuser 2"}}]' -v=1  
Run Code Online (Sandbox Code Playgroud)

但我收到了:

“”无效

请记住,我想使用 选项来执行此操作--type='json',没有其他解决方法。

E23*_*235 11

我发现如何做到这一点后,我读到这里是指我这个伟大的文章。
这是 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"
}
Run Code Online (Sandbox Code Playgroud)

因此,要更新用户的字段,我需要创建 JSON 补丁格式:

[
    {
        "op" : "replace" ,
        "path" : "/data/username" ,
        "value" : "dGVzdHVzZXIy" # testuser2 in base64
    }
]
Run Code Online (Sandbox Code Playgroud)

请注意,该值应为 base64。

结果是:

kubectl patch secret test --type='json' -p='[{"op" : "replace" ,"path" : "/data/username" ,"value" : "dGVzdHVzZXIy"}]'
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,它有效。注意:如果您使用直接 http 请求 PATCH 密钥,则必须设置 Content-Type: application/json-patch+json 。 (2认同)