Skh*_*haz 2 kubernetes kubectl
我正在尝试使用 kubectl 修补秘密
kubectl patch secret operator-secrets --namespace kube-system --context=cluster1 --patch "'{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}'"
Run Code Online (Sandbox Code Playgroud)
但我收到错误
来自服务器的错误 (BadRequest): json: 无法将字符串解组为类型为 map[string]interface {} 的 Go 值
如果我使用 echo 运行命令,它似乎是一个有效的 JSON
$ echo "'{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}'"
'{"data": {"FOOBAR": "value that I want"}}'
Run Code Online (Sandbox Code Playgroud)
可以是什么?
如果我使用 echo 运行命令,它似乎是一个有效的 JSON
事实上,事实并非如此。仔细查看输出的第一个字符:
'{"data": {"FOOBAR": "value that I want"}}'
Run Code Online (Sandbox Code Playgroud)
您的“JSON”字符串以单引号开头,这是无效字符。要获取有效的 JSON,您需要重写命令,如下所示:
echo "{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}"
Run Code Online (Sandbox Code Playgroud)
我们可以使用以下命令确认这是有效的 JSON jq
:
$ echo "{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}" | jq .
{
"data": {
"FOOBAR": "value that i want"
}
}
Run Code Online (Sandbox Code Playgroud)
让你的补丁命令看起来像:
kubectl patch secret operator-secrets \
--namespace kube-system \
--context=cluster1 \
--patch "{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}"
Run Code Online (Sandbox Code Playgroud)
但是,虽然该补丁现在是有效的 JSON,但它仍然会失败并出现新错误:
The request is invalid: patch: Invalid value: "map[data:map[FOOBAR:value that i want]]": error decoding from json: illegal base64 data at input byte 5
Run Code Online (Sandbox Code Playgroud)
地图中项目的值data
必须是 base64 编码值。您可以自己对值进行 base64 编码:
kubectl patch secret operator-secrets \
--namespace kube-system \
--context=cluster1 \
--patch "{\"data\": {\"FOOBAR\": \"$(base64 <<<"$FOOBAR")\"}}"
Run Code Online (Sandbox Code Playgroud)
或者使用stringData
:
kubectl patch secret operator-secrets \
--namespace kube-system \
--context=cluster1 \
--patch "{\"stringData\": {\"FOOBAR\": \"$FOOBAR\"}}"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5823 次 |
最近记录: |