从 kubernetes v1.14 开始,kubectl 集成了 Kustomize(opens new window)。通过 Kustomize,您可以使用 generator(Kustomize 的概念)创建 Secret,并保存到 API Server。Generator 必须在 kustomization.yaml 文件中指定。

TIP 需要结合 Kustomize(opens new window)一起使用,在您决定采纳 Kustomize 之前,可以暂时不看这篇文章的内容

从文件生成 Secret


例如,如果想从 ./username.txt 和 ./password.txt 文件生成(generate)一个 Secret,则可以:

  • 执行如下指令创建 kustomization.yaml 文件 ```bash

    Create a kustomization.yaml file with SecretGenerator

    cat <./kustomization.yaml secretGenerator:
  • name: db-user-pass files:
    • username.txt
    • password.txt EOF
  1. - 执行指令 kubectl apply -k . 以创建 Secret 对象,输出结果如下所示:
  2. ```bash
  3. secret/db-user-pass-96mffmfh4k created
  • 执行指令 kubectl get secrets 以检查创建结果,输出结果如下所示: ```bash NAME TYPE DATA AGE db-user-pass-96mffmfh4k Opaque 2 51s
  1. - 执行指令 kubectl describe secrets/db-user-pass-96mffmfh4k 以查看 Secret 详情(请使用您自己的 Secret 名字),输出结果如下所示:
  2. ```bash
  3. Name: db-user-pass
  4. Namespace: default
  5. Labels: <none>
  6. Annotations: <none>
  7. Type: Opaque
  8. Data
  9. ====
  10. password.txt: 12 bytes
  11. username.txt: 5 bytes

TIP 生成的 Secret 的名字包含一个 hash 值(Secret 内容的 hash)做为后缀,这种做法可以确保每次修改 Secret 的内容时,都将产生新的 Secret 对象

从明文生成 Secret


例如,如果要从明文 username=admin 和 password=secret,您可以:

  • 通过如下指令创建 secret generator 的 kustomization.yaml 文件: ```bash

    Create a kustomization.yaml file with SecretGenerator

    cat <./kustomization.yaml secretGenerator:
  • name: db-user-pass literals:
    • username=admin
    • password=secret EOF
  1. - 然后执行指令 kubectl apply -k . 创建 Secret 对象,输出结果如下所示:
  2. ```bash
  3. secret/db-user-pass-dddghtt9b5 created