如何使用cli修改kubernetes
密码中的值?
我用kubernetes create secret generic
创建了秘密,但似乎没有办法修改秘密。例如,向其添加新的秘密值,或更改其中的秘密值。
我认为我可以去低级'并编写yaml文件并执行kubectl edit
但我希望有一种更简单的方法。
(我使用kubernetes 1.2.x
)
答案 0 :(得分:20)
最直接(和交互式)的方式应该是执行kubectl edit secret <my secret>
。如果您想查看由Kubernetes管理的秘密列表,请运行kubectl get secrets
。
答案 1 :(得分:7)
如果您希望使用非交互式更新,这是一种实现方式:
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
,但是如果您喜欢yaml格式,yq
也可以完成这项工作。
答案 2 :(得分:6)
当我发现自己需要修改秘密时,我就来到了这里。
这是我发现的用于编辑(单行)机密的最方便的方法。
这在上面的蒂莫·赖曼(Timo Reimann)的kubectl edit secret <my secret>
中有详细阐述。
kubectl edit secret <my secret>
(以我为例)将调用vi。
现在,我将光标移动到要编辑的秘密冒号后面的空间。
然后我按r
和[enter]
,这会将base64编码的值放在自己的一行上。
现在我输入:. ! base64 -D
,它将解码当前行。
更改值后,我输入:. ! base64
,它将对更改后的值进行编码。
按k
[shift]J
将重新加入秘密名称及其新值。
:wq
将写入新的秘密文件并退出vi。
PS 如果密码具有多行值,请打开行号(:set nu
),并在更改解码值后使用A,B ! base64
,其中A和B是该值的第一行和最后一行的行号。
PPS 我刚刚了解了base64
会收到以附加的换行符进行编码的文本的艰难方法:(如果这对您的值没有问题-很好。否则,我当前的解决方案可以用.!perl -pe chomp | base64
答案 3 :(得分:5)
从命令行最简单的方法:
echo "This is my secret" | base64 | read output;kubectl patch secret my_secret_name -p="{\"data\":{\"secret_key\": \"$output\"}}" -v=1
它将对值This is my secret
进行编码,并通过添加my_secret_name
键和编码值作为该机密中的最后一个键值对来更新您的secret_key
机密。
答案 4 :(得分:1)
我为此专门实现了kubectl
plugin。
要使用krew安装
kubectl krew update
kubectl krew install modify-secret
要运行
kubectl modify-secret xyz -n kube-system
演示
<img src="https://github.com/rajatjindal/kubectl-modify-secret/raw/master/demo/usage.gif" alt="using kubectl-modify-secret plugin" style="max-width:100%;">
答案 5 :(得分:1)
我找到最快的方法:
# 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
答案 6 :(得分:0)
接着是“ Skeeve”
echo -n 'encode_My_Password' |base64
kubectl edit secret my-secret
默认编辑器将打开,替换现有秘密元素的值或使用上面生成的编码密码添加新的行元素。 保存文件并关闭,更新的值或新值将被添加到k8s秘密中。
答案 7 :(得分:0)
查看所有这些答案后,对我而言,最好的解决方案是删除并重新创建:
kubectl delete secret generic
kubectl create secret generic # or whatever ..
如果您想用困难的方式做到这一点:
edit
更改docker-registry
机密我遇到了这个问题,希望修改“ docker-registry”样式的机密。
使用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='my@email.com'
我本可以对其进行编辑,在查看了其他各种答案之后我才知道该怎么做-为了帮助别人,我在这里包括了我的笔记。
列出机密:kubectl get secrets
具体机密的详细信息:kubectl describe secrets/generic-registry-secret
获取秘密的价值:kubectl get secret generic-registry-secret -o jsonpath={.data}
解码秘密值:首先获取“ map [.dockerconfigjson:”和“]”之间的所有内容,然后执行:
echo "x9ey_the_secret_encoded_value_here_X0b3=" | base64 --decode
然后我可以从中寻找我想要的特定身份验证令牌值,并将其替换为新的值。然后通过| base 64
运行新的完整字符串以获取基本64编码,现在我终于可以放心地使用kubectl edit secret generic-registry-secret
更改值并输入新的正确值。>
但是更简单的选择是删除并重新创建。
参考文献: