--- title: 使用 Kustomize 管理 Secret content_type: task weight: 30 description: 使用 kustomization.yaml 文件创建 Secret 对象。 --- 从 kubernetes v1.14 开始,`kubectl` 支持[使用 Kustomize 管理对象](/zh/docs/tasks/manage-kubernetes-objects/kustomization/)。 Kustomize 提供了资源生成器(Generators)来创建 Secret 和 ConfigMap。 Kustomize 生成器应该在某个目录的 `kustomization.yaml` 文件中指定。 生成 Secret 后,你可以使用 `kubectl apply` 在 API 服务器上创建该 Secret。 ## {{% heading "prerequisites" %}} {{< include "task-tutorial-prereqs.md" >}} ## 创建 Kustomization 文件 {#create-the-kustomization-file} 你可以在 `kustomization.yaml` 中定义 `secreteGenerator`,并在定义中引用其他现成的文件,生成 Secret。 例如:下面的 kustomization 文件 引用了 `./username.txt` 和 `./password.txt` 文件: ```yaml secretGenerator: - name: db-user-pass files: - username.txt - password.txt ``` 你也可以在 `kustomization.yaml` 文件中指定一些字面量定义 `secretGenerator`。 例如:下面的 `kustomization.yaml` 文件中包含了 `username` 和 `password` 两个字面量: ```yaml secretGenerator: - name: db-user-pass literals: - username=admin - password=1f2d1e2e67df ``` 你也可以使用 `.env` 文件在 `kustomization.yaml` 中定义 `secretGenerator`。 例如:下面的 `kustomization.yaml` 文件从 `.env.secret` 文件获取数据。 ```yaml secretGenerator: - name: db-user-pass envs: - .env.secret ``` 注意,上面两种情况,你都不需要使用 base64 编码。 ## 创建 Secret {#create-the-secret} 使用 `kubectl apply` 命令应用包含 `kustomization.yaml` 文件的目录创建 Secret。 ```shell kubectl apply -k . ``` 输出类似于: ``` secret/db-user-pass-96mffmfh4k created ``` 请注意,生成 Secret 时,Secret 的名称最终是由 `name` 字段和数据的哈希值拼接而成。 这将保证每次修改数据时生成一个新的 Secret。 ## 检查创建的 Secret {#check-the-secret-created} 你可以检查刚才创建的 Secret: ```shell kubectl get secrets ``` 输出类似于: ``` NAME TYPE DATA AGE db-user-pass-96mffmfh4k Opaque 2 51s ``` 你可以看到 Secret 的描述: ```shell kubectl describe secrets/db-user-pass-96mffmfh4k ``` 输出类似于: ``` Name: db-user-pass-96mffmfh4k Namespace: default Labels: Annotations: Type: Opaque Data ==== password.txt: 12 bytes username.txt: 5 bytes ``` `kubectl get` 和 `kubectl describe` 命令默认不显示 `Secret` 的内容。 这是为了防止 `Secret` 被意外暴露给旁观者或存储在终端日志中。 检查编码后的实际内容,请参考[解码 secret](/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl/#decoding-secret)。 --> ## 清理 {#clean-up} 删除你创建的 Secret: ```shell kubectl delete secret db-user-pass-96mffmfh4k ``` ## {{% heading "whatsnext" %}} - 进一步阅读 [Secret 概念](/zh/docs/concepts/configuration/secret/) - 了解如何[使用 `kubectl` 命令管理 Secret](/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl/) - 了解如何[使用配置文件管理 Secret](/zh/docs/tasks/configmap-secret/managing-secret-using-config-file/)