使用 Secret 存储敏感数据
您可以使用 私密 来存储敏感的配置信息,例如密码和访问密钥, 运行 25 万个 Pod本页面介绍了 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 将创建一个 DependencyNotFound
或 DependencyInvalid
事件。
Secret 和 Kubernetes 命名空间
由于 Kubernetes 不允许跨命名空间访问 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
- 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 从其管理资源的命名空间。
gcloud
如需使用 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.yaml
kubectl 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.yaml
kubectl delete -n CC_NAMESPACE -f example-secret.yaml
将 CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
后续步骤
了解如何在 Config Connector 资源之间指定资源引用。
深入了解 Kubernetes Secret。