Cec*_*uez 71 docker kubernetes
我继承了 Kubernetes/Docker 设置,但由于更改了与数据库密码相关的内容,我不小心使 pod 崩溃。
我正在尝试解决此问题。
我没有太多的 Kubernetes 或 Docker 经验,所以我仍在学习如何做事。
该值包含在我相信的 db-user-pass 凭证中,这是一个 Opaque 类型的秘密。
我是这样描述的:
kubectl describe secrets/db-user-pass
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 16 bytes
username: 13 bytes
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从这个秘密中获取任何数据。Kubernetes 站点上的示例似乎假设我将拥有一个 base64 编码的字符串,但我什至无法理解。我如何获得这个价值?
Ami*_*pta 98
您可以使用kubectl get secrets/db-user-pass -o yaml
或-o json
在您将看到 base64 编码username
和password
. 然后您可以复制该值并使用echo <ENCODED_VALUE> | base64 -D
(Mac OS X)之类的东西对其进行解码。
一个更紧凑的单线:
kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -D
Run Code Online (Sandbox Code Playgroud)
同样对于用户名:
kubectl get secrets/db-user-pass --template={{.data.username}} | base64 -D
Run Code Online (Sandbox Code Playgroud)
注意:在 GNU/Linux 上,base64 标志是-d
,而不是-D
。
Bře*_*jek 51
我建议使用这个方便的命令。它利用了go-templates的强大功能。它遍历所有值,对它们进行解码,然后将它们与密钥一起打印出来。它还处理未设置的值。
kubectl get secret name-of-secret -o go-template='
{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
## In your case it would output
# password: decoded_password
# username: doceded_username
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢 go-templates,您可以使用不同的输出格式,例如yaml
或json
,但这将输出由 base64 编码的秘密。
Cha*_*yer 31
如果您有 jq(json 查询),则此方法有效:
kubectl get secret db-user-pass -o json | jq '.data | map_values(@base64d)'
Run Code Online (Sandbox Code Playgroud)
笔记:
db-user-pass
是k8s秘密的名字.data
是包含秘密值的变量Mao*_*dok 28
这应该适用于所有平台,包括 kubectl 1.11+
kubectl get secrets/db-user-pass --template='{{.data.password | base64decode}}'
Run Code Online (Sandbox Code Playgroud)
如果密码中有“-”,则以下内容有效
kubectl get secrets/db-user-pass --template='{{ index .data "sql-password" | base64decode}}'
Run Code Online (Sandbox Code Playgroud)
如果你想获取所有键、值
kubectl get secrets/db-user-pass --template='{{ range $key, $value := .data }}{{ printf "%s: %s\n" $key ($value | base64decode) }}{{ end }}'
Run Code Online (Sandbox Code Playgroud)
Tor*_*Tor 16
这个jsonpath变体在 OSX 上适用于我。
kubectl get secrets/db-user-pass -o jsonpath="{.data.username}" | base64 -d
Run Code Online (Sandbox Code Playgroud)
名称中带有点以获取秘密。
kubectl get secrets/tls -o jsonpath="{.data['tls\.crt']}" | base64 -d
Run Code Online (Sandbox Code Playgroud)
如果您的密钥包含破折号 ( -
) 或点 ( .
):
kubectl get secret db-user-pass -o=go-template='{{index .data "password"}}' | base64 -d
Run Code Online (Sandbox Code Playgroud)
这是您可能正在寻找的链接。
Kubernetes 机密需要以 base64 编码格式提供机密,在 linux 发行版的情况下,可以使用 base64 二进制文件创建。
例子:
echo "hello" | base64
aGVsbG8K
Run Code Online (Sandbox Code Playgroud)
当我们将密钥作为环境变量传递或作为卷安装时,Kubernetes 会解码 base64 编码。
首先,通过使用 kubectl 查询 api 服务器从 etcd 中获取机密。
kubectl get secret db-user-pass -o yaml
Run Code Online (Sandbox Code Playgroud)
这将为您提供 yaml 格式的 base64 编码秘密。
一旦你有了 yaml 文件,就使用
“base64 --decode”
最终命令将如下所示:不要忘记-n
echo 命令中的标志
echo -n "jdddjdkkdkdmdl" | base64 --decode
归档时间: |
|
查看次数: |
72071 次 |
最近记录: |