使用 Secret 存储敏感数据
您可以使用 Secret 在 GKE 集群中存储敏感的配置信息,例如密码和访问密钥。本页介绍 Config Connector 在配置资源时如何使用 Secret 值。 Google Cloud
概览
本部分简介如何将 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 将创建一个 DependencyNotFound
或 DependencyInvalid
事件。
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。
- Config Connector 使用 Service Usage API 来启用服务 API。如需执行这些步骤,您需要启用 Service Usage API。您可以使用 Google Cloud CLI 启用此 API:
gcloud services enable serviceusage.googleapis.com
将以下 YAML 复制到名为
enable-sql.yaml
的文件中apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: sqladmin.googleapis.com
使用
kubectl
将enable-sql.yaml
应用于您的集群:kubectl apply -f enable-sql.yaml --namespace
CC_NAMESPACE 将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
如需使用 Google Cloud CLI 启用 SQL Admin API,请运行以下命令:
gcloud services enable sqladmin.googleapis.com
创建 Cloud SQL 服务器
将下面的 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
将下面的 YAML 复制到名为
example-secret.yaml
的文件中。保存前先修改password
的值。这会声明前一部分中引用的secret-1
。apiVersion: v1 kind: Secret metadata: name: secret-1 stringData: password:
PASSWORD 将配置应用到您的集群。
kubectl apply -n
CC_NAMESPACE -f example-secret.yamlkubectl apply -n
CC_NAMESPACE -f sql-server-example.yaml将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。Config Connector 将使用您指定的密码创建 Cloud SQL 实例和用户。这可能需要几分钟。
等待几分钟,然后确认提供该实例。
gcloud sql instances list --filter="name=sqlserver-1"
输出应包括
STATUS
为RUNNABLE
的服务器。确认您可以连接到 SQL 实例。
gcloud sql connect sqlserver-1 --user=sqluser-sample
系统会提示您输入密码。
清理
如果您不想保留实例,请使用 kubectl
删除 Cloud SQL 实例、用户和 Secret。
kubectl delete -n
CC_NAMESPACE -f sql-server-example.yamlkubectl delete -n
CC_NAMESPACE -f example-secret.yaml
将 CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
后续步骤
了解如何在 Config Connector 资源之间指定资源引用。
深入了解 Kubernetes Secret。