我继承了Kubernetes / Docker的设置,并且由于更改与数据库密码有关的内容而无意中弄坏了pod。
我正在尝试解决此问题。
我没有太多的Kubernetes或Docker经验,所以我仍在学习如何做事。
该值包含在我认为的db-user-pass凭据中,这是一个不透明的类型机密。
我正在描述它:
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
但是我不知道如何从这个秘密中获取任何数据。 Kubernetes网站上的示例似乎假设我将使用base64编码的字符串,但我什至无法理解。我该如何获得价值?
答案 0 :(得分:4)
如果您有jq(json查询),则可以使用:
kubectl get secret db-user-pass -o json | jq '.data | map_values(@base64d)'
答案 1 :(得分:2)
这是您可能正在寻找的link。
Kubernetes机密需要以base64编码格式给出机密,如果使用Linux发行版,则可以使用base64二进制文件创建。
示例:
echo "hello" | base64
aGVsbG8K
当我们将密钥作为环境变量或作为卷装入时,Kubernetes会解码base64编码。
答案 2 :(得分:2)
在ubuntu 18+上
kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -d
答案 3 :(得分:2)
如果您的密钥包含破折号(-
)或点(.
):
kubectl get secret db-user-pass -o=go-template='{{index .data "password"}}' | base64 -d
答案 4 :(得分:1)
您可以使用kubectl get secrets/db-user-pass -oyaml
或-ojson
,在其中您会看到以base64编码的username
和password
。然后,您可以复制值并使用echo <ENCODED_VALUE> | base64 -D
之类的值对其进行解码。
为此,一种更紧凑的单缸纸:
$ kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -D
,同样输入用户名:
$ kubectl get secrets/db-user-pass --template={{.data.username}} | base64 -D
答案 5 :(得分:0)
首先,通过使用kubectl查询api服务器,从etcd中获取秘密。
kubectl get secret db-user-pass -o yaml
这将为您提供yaml格式的base64编码的机密。
一旦您拥有yaml文件,便使用
对其进行解码“ base64 --decode”
最终命令将如下所示:
echo "jdddjdkkdkdmdl" | base64 --decode
答案 6 :(得分:0)
我建议使用此方便的命令。它利用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
如果您不喜欢go-templates,则可以使用其他输出格式,例如yaml
或json
,但这将输出由base64编码的机密。
答案 7 :(得分:0)
为便于解码,您可以使用ksd之类的工具来为您执行base64解码
kubectl get secrets/db-user-pass -o yaml | ksd
答案 8 :(得分:0)
Kubernetes 1.11 +
kubectl get secrets/db-user-pass --template='{{.data.password | base64decode }}'
答案 9 :(得分:0)
扩展@Břetislav Hájek 解决方案(非常感谢您)。
如果您需要通过标签获取它,那么您需要添加一个额外的 range
命令来迭代返回的项目。
$ LABEL_FILTER="app.kubernetes.io/name=mysql-chart"
$ kubectl get secret -l "$LABEL_FILTER" -o go-template='
{{range $i := .items}}{{range $k,$v := $i.data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}{{end}}'
mysql_password: ...
mysql_root_password: ...
mysql_user: ...
答案 10 :(得分:0)
用 bash。这是运行 ubuntu 18.04 和 Kubernetes 1.18.5
kubectl -n metallb-system get secrets memberlist -o json | grep secretkey | grep -v f:s | awk -F '"' '{print$4}' |base64 --decode; echo
答案 11 :(得分:0)
这一行用于从秘密中获取编码的 kubeconfig 文件,并从中生成一个文件,以便在我们的 ci 作业中动态使用 $() 是您需要填充的变量,因为它是从 makefile 中按原样复制的:
kubectl get secret $(SECRET) -o json | jq -r '.data | map_values(@base64)' | grep -oP '(?<=\"$(SECRET_KEY)\": \")[^\"]*' | base64 --decode | base64 --decode > ./$(KUBECONFIG_FILE_NAME)