使用 Kustomize 管理密钥

使用 kustomization.yaml 文件创建 Secret 对象。

kubectl 支持使用 Kustomize 对象管理工具来管理 Secret 和 ConfigMap。 你可以使用 Kustomize 创建一个资源生成器,它可以生成一个 Secret,然后你可以使用 kubectl 将其应用到 API 服务器。

开始之前

你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。 建议在至少有两个不充当控制平面主机的节点的集群上运行本教程。 如果你还没有集群,可以使用 minikube 创建一个,或者使用这些 Kubernetes 游乐场之一

创建一个 Secret

你可以在 kustomization.yaml 文件中定义一个 secretGenerator 来生成 Secret,该文件引用其他现有文件、.env 文件或字面值。 例如,以下说明为用户名 admin 和密码 1f2d1e2e67df 创建一个 kustomization 文件。

创建 kustomization 文件


secretGenerator:
- name: database-creds
  literals:
  - username=admin
  - password=1f2d1e2e67df

  1. 将凭据存储在文件中。 文件名是 Secret 的键

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

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

  2. 创建 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 <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

  1. kustomization.yaml 文件中,修改数据,例如 password

  2. 应用包含 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

下一步

上次修改时间为 2024 年 7 月 19 日上午 9:39 PST:修复了 managing-secret-using-kustomize.md 中的拼写错误 (61746adc09)