使用 kubectl 管理 Secret

    本页向你展示如何使用 命令行工具来创建、编辑、管理和删除。 Kubernetes Secrets

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    创建 Secret

    Secret 对象用来存储敏感数据,如 Pod 用于访问服务的凭据。例如,为访问数据库,你可能需要一个 Secret 来存储所需的用户名及密码。

    你可以通过在命令中传递原始数据,或将凭据存储文件中,然后再在命令行中创建 Secret。以下命令 将创建一个存储用户名 admin 和密码 S!B\*d$zDsb= 的 Secret。

    执行以下命令:

    你必须使用单引号 '' 转义字符串中的特殊字符,如 $\*=! 。否则,你的 shell 将会解析这些字符。

    1. 对凭证的取值作 base64 编码后保存到文件中:

      1. echo -n 'admin' | base64 > ./username.txt
      2. echo -n 'S!B\*d$zDsb=' | base64 > ./password.txt
      1. `-n` 标志用来确保生成文件的文末没有多余的换行符。这很重要,因为当 `kubectl`
    2. kubectl 命令中传递文件路径:

      1. kubectl create secret generic db-user-pass \
      2. --from-file=./username.txt \
      3. --from-file=./password.txt
      1. 默认键名为文件名。你也可以通过 `--from-file=[key=]source` 设置键名,例如:
      1. --from-file=username=./username.txt \
      2. --from-file=password=./password.txt

    无论使用哪种方法,输出都类似于:

    检查 Secret 是否已创建:

    输出类似于:

    1. NAME TYPE DATA AGE
    2. db-user-pass Opaque 2 51s

    查看 Secret 的细节:

    1. kubectl describe secret db-user-pass

    输出类似于:

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

    kubectl getkubectl describe 命令默认不显示 Secret 的内容。 这是为了防止 Secret 被意外暴露或存储在终端日志中。

      1. kubectl get secret db-user-pass -o jsonpath='{.data}'

      输出类似于:

    1. 解码 password 数据:

        输出类似于:

        1. S!B\*d$zDsb=

        注意:

        这是一个出于文档编制目的的示例。实际上,该方法可能会导致包含编码数据的命令存储在 Shell 的历史记录中。任何可以访问你的计算机的人都可以找到该命令并对 Secret 进行解码。 更好的办法是将查看和解码命令一同使用。

        1. kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode

      编辑 Secret

      你可以编辑一个现存的 Secret 对象,除非它是。 要想编辑一个 Secret,请执行以下命令:

      1. kubectl edit secrets <secret-name>

      这将打开默认编辑器,并允许你更新 data 字段中的 base64 编码的 Secret 值,示例如下:

      1. #请编辑下面的对象。以“#”开头的行将被忽略,
      2. #空文件将中止编辑。如果在保存此文件时发生错误,
      3. #则将重新打开该文件并显示相关的失败。
      4. apiVersion: v1
      5. data:
      6. password: UyFCXCpkJHpEc2I9
      7. username: YWRtaW4=
      8. kind: Secret
      9. metadata:
      10. creationTimestamp: "2022-06-28T17:44:13Z"
      11. name: db-user-pass
      12. namespace: default
      13. resourceVersion: "12708504"
      14. uid: 91becd59-78fa-4c85-823f-6d44436242ac
      15. type: Opaque

      接下来