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
修改Kubernetessecret
中的值
我用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 optinkubectl get secret mys