使用 Kustomize 管理 Secret
kubectl
支持使用 Kustomize 对象管理工具 管理 Secret 和 ConfigMap。你可以使用 Kustomize 创建一个 资源生成器,该生成器会生成一个 Secret,然后你可以使用 kubectl
将其应用到 API 服务器。
准备工作
你需要有一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在至少有两个不充当控制平面主机的节点的集群上运行本教程。如果你还没有集群,你可以使用 minikube 创建一个,或者你可以使用以下 Kubernetes 演练场之一
创建 Secret
你可以通过在 kustomization.yaml
文件中定义一个 secretGenerator
来生成 Secret,该生成器引用其他现有文件、.env
文件或字面值。例如,以下说明为用户名 admin
和密码 1f2d1e2e67df
创建一个 kustomization 文件。
注意
Secret 的 `stringData` 字段与服务器端应用不兼容。创建 kustomization 文件
secretGenerator:
- name: database-creds
literals:
- username=admin
- password=1f2d1e2e67df
将凭据存储在文件中。文件名是 Secret 的键
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 <directory-path>
输出类似于:
secret/database-creds-5hdh7hhgfk created
生成 Secret 时,Secret 名称是通过对 Secret 数据进行哈希处理并将哈希值附加到名称而创建的。这确保了每次修改数据时都会生成新的 Secret。
要验证 Secret 是否已创建并解码 Secret 数据,
kubectl get -k <directory-path> -o jsonpath='{.data}'
输出类似于:
{ "password": "MWYyZDFlMmU2N2Rm", "username": "YWRtaW4=" }
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
输出类似于:
1f2d1e2e67df
有关更多信息,请参阅使用 kubectl 管理 Secret 和使用 Kustomize 对 Kubernetes 对象进行声明式管理。
编辑 Secret
在
kustomization.yaml
文件中,修改数据,例如password
。应用包含 kustomization 文件的目录
kubectl apply -k <directory-path>
输出类似于:
secret/db-user-pass-6f24b56cc8 created
编辑后的 Secret 作为新的 Secret
对象创建,而不是更新现有的 Secret
对象。你可能需要更新 Pod 中对 Secret 的引用。
清理
要删除 Secret,请使用 kubectl
kubectl delete secret db-user-pass
下一步
- 阅读更多关于Secret 概念的信息
- 了解如何使用 kubectl 管理 Secret
- 了解如何使用配置文件管理 Secret