将 Spanner 连接到 GKE 集群

本页介绍了如何向 Google Kubernetes Engine (GKE) 集群授予访问 Spanner 数据库的权限。

GKE 是一种托管式 Kubernetes 服务,可让您轻松部署和管理容器化应用。通过将 GKE 与 Spanner 搭配使用,您可以在应用层和数据库层中充分利用可伸缩性、可靠性、安全性和高可用性。

您的 GKE 集群可以通过 适用于 GKE 的工作负载身份联合访问 Spanner API。适用于 GKE 的工作负载身份联合支持集群中的 Kubernetes 服务账号充当 IAM 服务账号。IAM 服务账号会为您的 pod 提供应用默认凭据,因此您无需配置每个 pod 即可使用您的个人用户凭据。

将应用配置为使用适用于 GKE 的工作负载身份联合进行身份验证后,您可以使用 Spanner 客户端库查询 Spanner 数据库。您还可以将应用迁移到 GKE 节点池

如需在示例环境中创建连接,请尝试“将 Spanner 连接到 GKE Autopilot”Codelab

启用 Workload Identity Federation for GKE

如果您尚未执行此操作,请为 GKE 集群启用适用于 GKE 的工作负载身份联合。您可以通过创建新的节点池在新的集群上启用适用于 GKE 的工作负载身份联合,也可以在现有节点池上启用适用于 GKE 的工作负载身份联合。默认情况下,GKE Autopilot 集群会启用适用于 GKE 的工作负载身份联合。如需了解详情,请参阅启用适用于 GKE 的工作负载身份联合

使用 Workload Identity Federation for GKE 对与 Spanner 的连接进行身份验证

使用适用于 GKE 的工作负载身份联合,配置您的应用以向 Google Cloud 进行身份验证。

  1. 确保您的 GKE Pod 使用 Kubernetes ServiceAccount 对象,如配置授权和正文中所述。

  2. 创建一个 IAM 许可政策,向 Kubernetes ServiceAccount 对象授予必要的 Spanner IAM 角色。以下示例会授予 Spanner Database User (roles/spanner.databaseUser) 角色:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME \
          --role=roles/spanner.databaseUser \
          --condition=None
    

    替换以下内容:

    • PROJECT_ID:GKE 集群的项目 ID。
    • PROJECT_NUMBER:Google Cloud 项目的数字编号。
    • NAMESPACE:包含 ServiceAccount 的 Kubernetes 命名空间。
    • KSA_NAME:ServiceAccount 的名称。

连接 Spanner 数据库

应用 Pod 经过身份验证后,您可以使用某个 Spanner 客户端库查询 Spanner 数据库。

后续步骤