使用 Kustomize 管理 Secret

使用 kustomization.yaml 文件创建 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 文件:

  1. secretGenerator:
  2. - name: db-user-pass
  3. files:
  4. - username.txt
  5. - password.txt

你也可以在 kustomization.yaml 文件中指定一些字面量定义 secretGenerator 字段。 例如:下面的 kustomization.yaml 文件中包含了 usernamepassword 两个字面量:

  1. secretGenerator:
  2. - name: db-user-pass
  3. literals:
  4. - username=admin
  5. - password=1f2d1e2e67df

你也可以使用 .env 文件在 kustomization.yaml 中定义 secretGenerator。 例如:下面的 kustomization.yaml 文件从 .env.secret 文件获取数据。

  1. secretGenerator:
  2. - name: db-user-pass
  3. envs:
  4. - .env.secret

注意,上面两种情况,你都不需要使用 base64 编码。

创建 Secret

在包含 kustomization.yaml 文件的目录下使用 kubectl apply 命令创建 Secret。

  1. kubectl apply -k .

输出类似于:

  1. secret/db-user-pass-96mffmfh4k created

请注意,生成 Secret 时,Secret 的名称最终是由 name 字段和数据的哈希值拼接而成。 这将保证每次修改数据时生成一个新的 Secret。

检查创建的 Secret

你可以检查刚才创建的 Secret:

  1. kubectl get secrets

输出类似于:

  1. NAME TYPE DATA AGE
  2. db-user-pass-96mffmfh4k Opaque 2 51s

你可以看到 Secret 的描述:

  1. kubectl describe secrets/db-user-pass-96mffmfh4k

输出类似于:

  1. Name: db-user-pass-96mffmfh4k
  2. Namespace: default
  3. Labels: <none>
  4. Annotations: <none>
  5. Type: Opaque
  6. Data
  7. ====
  8. password.txt: 12 bytes
  9. username.txt: 5 bytes

kubectl getkubectl describe 命令默认不显示 Secret 的内容。 这是为了防止 Secret 被意外暴露给旁观者或存储在终端日志中。 检查编码后的实际内容,请参考解码 secret

清理

删除你创建的 Secret:

  1. kubectl delete secret db-user-pass-96mffmfh4k

接下来