使用 Secret

了解如何创建 Secret 并将 Knative serving 服务和修订版本配置为使用该 Secret。

服务的一个常见使用场景是通过用户名和密码访问第三方应用。对于 Google Kubernetes Engine,最佳做法是将此类敏感信息存储在 Kubernetes Secret 对象中。

为了让您的容器能够访问 Secret,您可以将每个 Secret 作为卷装载,这使 Secret 中的条目以文件的形式提供给容器。您应装载 Secret,以确保读取每个 Secret 时获得其最新版本。

您还可以使用环境变量传递 Secret。

创建 Secret

以下步骤仅展示如何创建 Secret,但您可以通过多种方式创建 Secret,如 Secret 主题中所述。

创建 Secret 时,请确保在与运行 Knative serving 服务的集群相同的命名空间中创建 Secret。在这些示例中,将使用 default 命名空间。

如需在集群的 default 命名空间中创建 Secret,请使用以下命令:

  • 使用文件创建 Secret:

    echo -n 'devuser' > ./username.txt
    echo -n 'S!B\*d$zDsb' > ./password.txt
    kubectl create secret generic user-creds --from-file=./username.txt --from-file=./password.txt
    
  • 仅使用 kubectl 命令创建 Secret:

    kubectl create secret generic user-creds --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb'
    

将 Secret 设为对服务可用

您可以在部署新服务或更新现有服务和部署修订版本时使用 Google Cloud 控制台或命令行工具将 Secret 与服务相关联:

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 高级设置下,点击变量和 Secret

  4. “引用密钥”下,从下拉菜单中选择所需的 Secret。

    • 在“引用方法”下拉菜单中,选择您要使用 Secret 的方法,即作为卷装载或作为环境变量公开。
    • 如果您要使用作为卷装载,请指定路径,然后点击完成
    • 如果要作为环境变量公开:
      1. 提供变量的名称,并从“键”下拉菜单中选择相应的 Secret 值。
      2. 点击添加以添加其他 Secret 值。
      3. 提供变量的名称,并从“键”下拉菜单中选择相应的 Secret 值。
      4. 点击完成

  5. 点击下一步以转到下一部分。

  6. 配置此服务的触发方式部分,选择您想使用哪个连接来调用服务。

  7. 点击创建以将映像部署到 Knative serving,然后等待部署完成。

gcloud

您可以使用 Google Cloud CLI 将 Secret 与新服务相关联,或更新现有服务:

  • 对于现有服务,请运行带有以下参数之一的 gcloud run services update 命令来更新 Secret:

    示例:

    gcloud run services update SERVICE --update-secrets KEY1=VALUE1,KEY2=VALUE2
    

    替换:

    • SERVICE 替换为您的服务名称。
    • KEY1=VALUE1,KEY2=VALUE2 替换为 Secret 的名称和值对的逗号分隔列表。对于每个 KEY,请指定以正斜杠 / 开头的路径,以将 Secret 作为文件装载。或者,您也可以不加正斜杠,将 Secret 作为环境变量装载。为每个 VALUE 指定 Secret 名称。如何指定多个参数
    • 命令参数选项

      如需指定多组键值对,您可以指定多个参数以确保可读性。示例:
      [...]
      --update-secrets "KEY=VALUE1" \
      --update-secrets "KEY=VALUE2" \
      --update-secrets "KEY=VALUE3"
      
  • 对于新服务,请通过运行带有 --set-secrets 参数的 gcloud run deploy 命令来关联 Secret:

    gcloud run deploy SERVICE --image=IMAGE_URL --set-secrets KEY1=VALUE1,KEY2=VALUE2
    

    替换:

    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/cloudrun/hello
    • SERVICE 替换为您的服务名称。
    • KEY1=VALUE1,KEY2=VALUE2 替换为 Secret 的名称和值对的逗号分隔列表。对于每个 KEY,请指定以正斜杠 / 开头的路径,以将 Secret 作为文件装载。或者,您也可以不加正斜杠,将 Secret 作为环境变量装载。为每个 VALUE 指定 Secret 名称。如何指定多个参数
    • 命令参数选项

      如需指定多组键值对,您可以指定多个参数以确保可读性。示例:
      [...]
      --update-secrets "KEY=VALUE1" \
      --update-secrets "KEY=VALUE2" \
      --update-secrets "KEY=VALUE3"