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

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

  1. 用 base64 编码的值存储凭据到文件中:

    echo -n 'admin' > ./username.txt
    echo -n '1f2d1e2e67df' > ./password.txt
    

    -n 标志确保文件结尾处没有换行符。

  1. 创建 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.yamlkustomization.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

  1. kustomization.yaml 文件中,修改诸如 password 等数据。

  2. 应用包含 kustomization 文件的目录:

    kubectl apply -k <目录路径>
    

    输出类似于:

    secret/db-user-pass-6f24b56cc8 created
    

编辑过的 Secret 被创建为一个新的 Secret 对象,而不是更新现有的 Secret 对象。 你可能需要在 Pod 中更新对该 Secret 的引用。

清理

要删除 Secret,请使用 kubectl

kubectl delete secret db-user-pass

接下来