使用 Kustomize 管理 Secret
从 kubernetes v1.14 开始,kubectl
支持使用 Kustomize 管理对象。
Kustomize 提供了资源生成器(Generators)来创建 Secret 和 ConfigMap。
Kustomize 生成器应该在某个目录的 kustomization.yaml
文件中指定。
生成 Secret 后,你可以使用 kubectl apply
在 API 服务器上创建该 Secret。
准备开始
你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:
创建 Kustomization 文件
你可以在 kustomization.yaml
中定义 secreteGenerator
,并在定义中引用其他现成的文件,生成 Secret。
例如:下面的 kustomization 文件 引用了 ./username.txt
和 ./password.txt
文件:
secretGenerator:
- name: db-user-pass
files:
- username.txt
- password.txt
你也可以在 kustomization.yaml
文件中指定一些字面量定义 secretGenerator
。
例如:下面的 kustomization.yaml
文件中包含了 username
和 password
两个字面量:
secretGenerator:
- name: db-user-pass
literals:
- username=admin
- password=1f2d1e2e67df
你也可以使用 .env
文件在 kustomization.yaml
中定义 secretGenerator
。
例如:下面的 kustomization.yaml
文件从 .env.secret
文件获取数据。
secretGenerator:
- name: db-user-pass
envs:
- .env.secret
注意,上面两种情况,你都不需要使用 base64 编码。
创建 Secret
使用 kubectl apply
命令应用包含 kustomization.yaml
文件的目录创建 Secret。
kubectl apply -k .
输出类似于:
secret/db-user-pass-96mffmfh4k created
请注意,生成 Secret 时,Secret 的名称最终是由 name
字段和数据的哈希值拼接而成。
这将保证每次修改数据时生成一个新的 Secret。
检查创建的 Secret
你可以检查刚才创建的 Secret:
kubectl get secrets
输出类似于:
NAME TYPE DATA AGE
db-user-pass-96mffmfh4k Opaque 2 51s
你可以看到 Secret 的描述:
kubectl describe secrets/db-user-pass-96mffmfh4k
输出类似于:
Name: db-user-pass-96mffmfh4k
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 12 bytes
username.txt: 5 bytes
kubectl get
和 kubectl describe
命令默认不显示 Secret
的内容。
这是为了防止 Secret
被意外暴露给旁观者或存储在终端日志中。
检查编码后的实际内容,请参考解码 secret。
-->
清理
删除你创建的 Secret:
kubectl delete secret db-user-pass-96mffmfh4k
接下来
- 进一步阅读 Secret 概念
- 了解如何使用
kubectl
命令管理 Secret - 了解如何使用配置文件管理 Secret