# 创建Secret(使用Generator)

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

TIP

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

# 从文件生成 Secret

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

  • 执行如下指令创建 kustomization.yaml 文件
# Create a kustomization.yaml file with SecretGenerator
cat <<EOF >./kustomization.yaml
secretGenerator:
- name: db-user-pass
  files:
  - username.txt
  - password.txt
EOF
1
2
3
4
5
6
7
8
  • 执行指令 kubectl apply -k . 以创建 Secret 对象,输出结果如下所示:

    secret/db-user-pass-96mffmfh4k created
    
    1
  • 执行指令 kubectl get secrets 以检查创建结果,输出结果如下所示:

    NAME                             TYPE                                  DATA      AGE
    db-user-pass-96mffmfh4k          Opaque                                2         51s
    
    1
    2
  • 执行指令 kubectl describe secrets/db-user-pass-96mffmfh4k 以查看 Secret 详情(请使用您自己的 Secret 名字),输出结果如下所示:

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

    TIP

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

# 从明文生成 Secret

例如,如果要从明文 username=adminpassword=secret,您可以:

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

    # Create a kustomization.yaml file with SecretGenerator
    cat <<EOF >./kustomization.yaml
    secretGenerator:
    - name: db-user-pass
      literals:
      - username=admin
      - password=secret
    EOF
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 然后执行指令 kubectl apply -k . 创建 Secret 对象,输出结果如下所示:

    secret/db-user-pass-dddghtt9b5 created
    
    1