使用 Secret 存储敏感数据


您可以使用 Secret 在 GKE 集群中存储敏感配置信息,例如密码和访问密钥。本页面介绍了 Config Connector 在配置 Google Cloud 资源时如何使用 Secret 值。

概览

本部分简介如何将 Secret 与 Config Connector 一起使用。

在创建资源时使用 Secret

创建资源时可以使用 Secret 内的数据。在将 Secret 传递给资源中,创建包含密码的 Secret,然后在 Cloud SQL 数据库上为用户引用该 Secret。

更新 Secret

当您将更新应用于 Secret 时,Config Connector 将在下次协调期望的状态时更新资源。例如,如果您针对 SQLUser 更新引用为密码的 Secret,Config Connector 随后将更新用户密码。

删除 Secret

如果您删除资源正在使用的 Secret,则 Config Connector 将不会移除该资源对 Secret 的引用。例如,如果使用引用 Secret 的密码来创建 SQLUser,然后删除 Secret,则该密码仍将保留在 SQLUser 上。

问题排查

如果您创建不存在的引用 Secret 的资源,则 Config Connector 将创建一个 DependencyNotFoundDependencyInvalid 事件

Secret 和 Kubernetes 命名空间

由于 Kubernetes 不允许跨命名空间访问 Secret,因此,如果要对来自不同命名空间的资源使用相同的 Secret 值,则必须在每个命名空间中应用 Secret。

将 Secret 传递给资源

在本部分中,您将创建 Cloud SQL 服务器,并使用 Secret 设置默认用户的密码。

准备工作

要完成这些步骤,您需要具备以下条件:

  • 安装在 Kubernetes 集群上的 Config Connector
  • 在项目中启用的 Cloud SQL Admin API。如需确认 API 已启用,请运行以下 gcloud 命令:

    gcloud services list --filter=sqladmin.googleapis.com
    

    如果该命令输出 Listed 0 items.,您需要启用 API。您可以通过 Config Connector 和 Resource Manager API 或者 gcloud 命令启用 API。

Service Usage API

  1. Config Connector 使用 Service Usage API 来启用服务 API。如需执行这些步骤,您需要启用 Service Usage API。您可以使用 Google Cloud CLI 启用此 API:
    gcloud services enable serviceusage.googleapis.com
  2. 将以下 YAML 复制到名为 enable-sql.yaml 的文件中

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. 使用 kubectlenable-sql.yaml 应用于您的集群:

    kubectl apply -f enable-sql.yaml --namespace CC_NAMESPACE
    

    CC_NAMESPACE 替换为 Config Connector 从其管理资源的命名空间。

gcloud

如需使用 Google Cloud CLI 启用 SQL Admin API,请运行以下命令:

gcloud services enable sqladmin.googleapis.com

创建 Cloud SQL 服务器

  1. 将下面的 YAML 复制到名为 sql-server-example.yaml 的文件中。这会创建一个名为 sqlserver-1 的 Cloud SQL 服务器和一个名为 sqluser-sample 的用户。sqluser-sample 的密码由资源引用设置为名为 secret-1 的 Secret。

    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLInstance
    metadata:
      labels:
        label-one: "sql-server-example"
      name: sqlserver-1
    spec:
      region: us-central1
      databaseVersion: MYSQL_5_7
      settings:
        tier: db-g1-small
    ---
    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLUser
    metadata:
      name: sqluser-sample
    spec:
      instanceRef:
        name: sqlserver-1
      host: "%"
      password:
        valueFrom:
          secretKeyRef:
            name: secret-1  # Name of the Secret object to extract a value from
            key: password   # Key that identifies the value to be extracted
    
  2. 将下面的 YAML 复制到名为 example-secret.yaml 的文件中。保存前先修改 password 的值。这会声明前一部分中引用的 secret-1

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: PASSWORD
    
  3. 将配置应用到您的集群。

    kubectl apply -n CC_NAMESPACE -f example-secret.yaml
    kubectl apply -n CC_NAMESPACE -f sql-server-example.yaml
    

    CC_NAMESPACE 替换为 Config Connector 从其管理资源的命名空间。

    Config Connector 将使用您指定的密码创建 Cloud SQL 实例和用户。这可能需要几分钟。

  4. 等待几分钟,然后确认提供该实例。

    gcloud sql instances list --filter="name=sqlserver-1"

    输出应包括 STATUSRUNNABLE 的服务器。

  5. 确认您可以连接到 SQL 实例。

    gcloud sql connect sqlserver-1 --user=sqluser-sample

    系统会提示您输入密码。

清理

如果您不想保留实例,请使用 kubectl 删除 Cloud SQL 实例、用户和 Secret。

    kubectl delete -n CC_NAMESPACE -f sql-server-example.yaml
    kubectl delete -n CC_NAMESPACE -f example-secret.yaml

CC_NAMESPACE 替换为 Config Connector 从其管理资源的命名空间。

后续步骤