Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Managing Secrets using Kustomize
使用 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 文件。
创建 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