使用 kubectl 管理 Secret
使用secret的基本流程:
- 1.创建k8s集群
- 2.创建管理的文件
- 3.验证
- 4.解码
- 5.清理
集群创建忽略,从第2步开始,一起来熟悉下secret的管理流程。
一个 Secret 可以包含 Pod 访问数据库所需的用户凭证。
1.创建管理的文件
# 以文件形式,
# 在这些命令中,-n 标志确保生成的文件在文本末尾不包含额外的换行符。 这一点很重要,因为当 kubectl 读取文件并将内容编码为 base64 字符串时,多余的换行符也会被编码。
echo -n "testName" > user.txt
echi -n "password" > pwd.txt
# 使用kubectlcreate secret命令打包文件成secret,并在API服务器上创建对象
kubectl create secret generic my-auth \
--from-file=user.txt
--from-file=pwd.txt
---输出
secret/my-auth created
---
默认密钥名称是文件名。 你可以选择使用 --from-file=[key=]source 来设置密钥名称。例如:
kubectl create secret generic my-auth \
--from-file=username=username.txt \
--from-file=password=password.txt
你还可以使用 --from-literal=<key>=<value> 标签提供 Secret 数据。 可以多次使用此标签,提供多个键值对。 请注意,特殊字符(例如:$,\,*,= 和 !)由你的 shell 解释执行,而且需要转义。
kubectl create secret generic my-auth \
--from-literal=username=devuser \
--from-literal=password='S!B\*d$zDsb='
2.验证secret
检查 secret 是否已创建:
kubectl get secret [-n mynamespace]
输出:
kubectl get secret -n elk
NAME TYPE DATA AGE
default-token-jxc92 kubernetes.io/service-account-token 3 2d23h
elastic-certificate-pem Opaque 1 2d23h
elastic-certificates Opaque 1 2d23h
elastic-credentials Opaque 2 2d23h
sh.helm.release.v1.es-c.v1 helm.sh/release.v1 1 47h
sh.helm.release.v1.es-d.v1 helm.sh/release.v1 1 42h
sh.helm.release.v1.es-m.v1 helm.sh/release.v1 1 42h
查看secret的描述
kubectl describe secret secret-name [-n mynamespace]
输出:
kubectl describe secret elastic-credentials -n elk
Name: elastic-credentials
Namespace: elk
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 13 bytes
username: 7 bytes
kubectl get 和 kubectl describe 命令默认不显示 Secret 的内容。 这是为了防止 Secret 被意外暴露或存储在终端日志中。
3.解码secret
要查看创建的 Secret 的内容,运行以下命令:
kubectl get secret db-user-pass -o jsonpath='{.data}'
输出类似于:
{"password":"MWYyZDFlMmU2N2Rm","username":"YWRtaW4="}
现在你可以解码 password 的数据:
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
输出类似于:
1f2d1e2e67df
4.清理
删除创建的 Secret:
kubectl delete secret db-user-pass