Kubernetes:使用kubectl修改一个秘密?

Kubernetes:使用kubectl修改一个秘密?,kubernetes,kubernetes-secrets,Kubernetes,Kubernetes Secrets,如何使用kubectl修改Kubernetessecret中的值 我用kubernetes create secret generic创建了这个秘密,但似乎没有办法修改秘密。例如,向其中添加新的秘密值,或更改其中的秘密值 我假设我可以“低级”,编写yaml文件并进行kubectl编辑,但我希望有一种更简单的方法 (我使用的是kubernetes 1.2.x)最直接(和交互式)的方法应该是执行kubectl edit secret。如果您想查看Kubernetes管理的机密列表,请运行kubect

如何使用
kubectl
修改Kubernetes
secret
中的值

我用kubernetes create secret generic创建了这个秘密,但似乎没有办法修改秘密。例如,向其中添加新的秘密值,或更改其中的秘密值

我假设我可以“低级”,编写yaml文件并进行
kubectl编辑
,但我希望有一种更简单的方法


(我使用的是
kubernetes 1.2.x

最直接(和交互式)的方法应该是执行
kubectl edit secret
。如果您想查看Kubernetes管理的机密列表,请运行
kubectl get secrets

如果您喜欢非交互式更新,这是一种方法:

kubectl get secret mysecret -o json | jq '.data["foo"]="YmFy"' | kubectl apply -f -
请注意,
YmFy
是一个base64编码的
bar
字符串。如果要将值作为参数传递,
jq
允许您这样做:

kubectl get secret mysecret -o json | jq --arg foo "$(echo bar | base64)" '.data["foo"]=$foo' | kubectl apply -f -

我更喜欢使用
jq
,但是
yq
如果你喜欢yaml格式,我也应该做这项工作。

因为我发现自己需要修改一个秘密,所以我来到了这里

这是我发现的编辑(一行)秘密的最方便的方法

本文详细阐述了上文Timo Reimann的《kubectl编辑机密》

kubectl edit secret
将(在我的情况下)调用vi

现在,我将光标移动到要编辑的秘密的冒号后面的空间

然后我按
r
[enter]
,这将把base64编码值放在自己的一行上

现在我输入
:!base64-D
,它将解码当前行

对值进行更改后,我输入
:!base64将对更改的值进行编码

k
[shift]J
将重新加入机密名称及其新值

:wq
将写入新的secretfile并退出vi

p.S.如果机密具有多行值,请打开行号(
:set nu
),并在更改解码值后,使用
a,B!base64
其中A和B是值的第一行和最后一行的行号


p.p.S我刚刚了解了
base64
将接收要编码的文本并附加一个换行符的艰难方法:(如果这对您的值没有问题-很好。否则,我当前的解决方案是使用:
!perl-pe chomp | base64

过滤掉它。我实现了一个
kubectl

使用krew安装

kubectl krew update
kubectl krew install modify-secret
运行它

kubectl modify-secret xyz -n kube-system
演示


从“斯基耶夫斯”的回答中得出:

Base64编码您的值:
echo-n'encode_My_Password'| base64

在编辑模式下打开密码:
kubectl编辑秘密我的秘密

默认编辑器将打开,替换现有键的值,或使用编码值添加新行和新键。
保存并关闭文件。更新的值或新的键值对现在已添加到机密中。

我找到的最快方法:

# You need a version of micro that includes this commit https://github.com/zyedidia/micro/commit/9e8d76f2fa91463be660737d1de3bff61258c90d
kubectl get secrets my-secret -o json | jq -r .data.config | base64 -d | micro | base64 -w 0 | xclip -selection clipboard && kubectl edit secrets my-secret

从命令行开始的最简单方法:

echo "This is my secret" | base64 | read output;kubectl patch secret my_secret_name -p="{\"data\":{\"secret_key\": \"$output\"}}" -v=1
它将对值
这是我的秘密
进行编码,并通过添加
secret\u key
密钥和编码值作为该秘密中的最后一对密钥值对来更新您的
my\u secret\u name
秘密。

简单方法:删除并重新创建秘密 在查看了所有这些答案后,出于我的需要,最好的解决方案是删除并重新创建:

kubectl删除机密通用
kubectl创造了一个秘密的泛型或者其他的。。

如果您想以艰难的方式完成此任务:

使用
edit
更改
docker注册表
机密 我提出这个问题是为了修改“docker注册表”样式的秘密。
简单地使用
kubectl edit secret
编辑它似乎令人担忧,因为我不知道秘密值是什么样子

我是用
kubectl create secret docker registry generic registry secret--docker server=docker.server--docker username='my-cloud-usernname'--docker password='my-auth-token'--docker email='1'这样的命令创建的my@email.com“

我本来可以编辑它的,我在看了这里的其他各种答案后发现了如何做到这一点——我在这里包括了我的笔记,以防它们对其他人有所帮助

列出秘密:
kubectl获取秘密

特定机密的详细信息:
kubectl description secrets/generic registry secret

获取密码值:
kubectl获取密码通用注册表密码-o jsonpath={.data}

解码秘密值:首先获取“map[.dockerconfigjson:”和“]”之间的所有内容,然后执行:
echo“x9ey_此处的_secret_encoded_value_X0b3=“| base64-解码

然后,我可以从中提取我正在寻找的特定身份验证令牌值,并将其替换为新的身份验证令牌值。然后通过
|base 64
运行新的完整字符串以获得base 64编码,现在我终于可以放心地使用
kubectl edit secret generic registry secret
更改该值,并将其放入new正确的值

但删除并重新创建是更简单的选择


参考文献:


很抱歉,我只是想澄清一下,您的回答是“没有这样的方法”,对吗?如果我没有说清楚,很抱歉:我是说有一种方法可以通过运行我在回答中显示的
kubectl edit
命令来实现。对我来说,
kubectl
是一种CLI(工具);如果您正在查找其他内容,请告诉我……如果您想直接编辑base64编码数据。
echo-n“admin”| base64
并将结果添加到.yaml文件中(命令
kubectl edit
)还有一个更简单的方法。请查看我的答案。如果不在echo之后添加换行符,请添加-n optin
kubectl get secret mys