使用 Kustomize 管理 Secret
kubectl
支持使用 Kustomize 对象管理工具来管理
Secret 和 ConfigMap。你可以使用 Kustomize 创建资源生成器(Resource Generator),
该生成器会生成一个 Secret,让你能够通过 kubectl
应用到 API 服务器。
准备开始
你必须拥有一个 Kubernetes 的集群,同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:
创建 Secret
你可以在 kustomization.yaml
文件中定义 secreteGenerator
字段,
并在定义中引用其它本地文件、.env
文件或文字值生成 Secret。
例如:下面的指令为用户名 admin
和密码 1f2d1e2e67df
创建 Kustomization 文件。
Secret 的 stringData
字段与服务端应用不兼容。
创建 Kustomization 文件
secretGenerator:
- name: database-creds
literals:
- username=admin
- password=1f2d1e2e67df
-
将凭据存储在文件中。文件名是 Secret 的 key 值:
echo -n 'admin' > ./username.txt echo -n '1f2d1e2e67df' > ./password.txt
-n
标志确保文件结尾处没有换行符。
-
创建
kustomization.yaml
文件:secretGenerator: - name: database-creds files: - username.txt - password.txt
你也可以使用 .env
文件在 kustomization.yaml
中定义 secretGenerator
。
例如下面的 kustomization.yaml
文件从 .env.secret
文件获取数据:
secretGenerator:
- name: db-user-pass
envs:
- .env.secret
在所有情况下,你都不需要对取值作 base64 编码。
YAML 文件的名称必须是 kustomization.yaml
或 kustomization.yml
。
应用 kustomization 文件
若要创建 Secret,应用包含 kustomization 文件的目录。
kubectl apply -k <目录路径>
输出类似于:
secret/database-creds-5hdh7hhgfk created
生成 Secret 时,Secret 的名称最终是由 name
字段和数据的哈希值拼接而成。
这将保证每次修改数据时生成一个新的 Secret。
要验证 Secret 是否已创建并解码 Secret 数据,
kubectl get -k <directory-path> -o jsonpath='{.data}'
输出类似于:
{ "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
echo 'UyFCXCpkJHpEc2I9' | base64 --decode
输出类似于:
S!B\*d$zDsb=
更多信息参阅 使用 kubectl 管理 Secret和 使用 Kustomize 对 Kubernetes 对象进行声明式管理
编辑 Secret
-
在
kustomization.yaml
文件中,修改诸如password
等数据。 -
应用包含 kustomization 文件的目录:
kubectl apply -k <目录路径>
输出类似于:
secret/db-user-pass-6f24b56cc8 created
编辑过的 Secret 被创建为一个新的 Secret
对象,而不是更新现有的 Secret
对象。
你可能需要在 Pod 中更新对该 Secret 的引用。
清理
要删除 Secret,请使用 kubectl
:
kubectl delete secret db-user-pass
接下来
- 进一步阅读 Secret 概念
- 了解如何使用 kubectl 管理 Secret
- 了解如何使用配置文件管理 Secret