使用 Kustomize 管理密钥
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