将 Spanner 与 GKE 集群连接

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

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

您的 GKE 集群可以通过 Workload Identity 访问 Spanner API。Workload Identity 允许集群中的 Kubernetes 服务帐号充当 IAM 服务帐号。IAM 服务帐号会为您的 Pod 提供应用默认凭据,因此您无需将每个 Pod 配置为使用您的个人用户凭据。

将应用配置为使用 Workload Identity 进行身份验证后,您可以使用 Spanner 客户端库查询您的 Spanner 数据库。您还可以将应用迁移到 GKE 节点池

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

启用 Workload Identity

如果您尚未为 GKE 集群启用 Workload Identity,请执行此操作。您可以通过创建新节点池在新集群上启用 Workload Identity,也可以在现有节点池上启用 Workload Identity。默认情况下,GKE Autopilot 集群会启用 Workload Identity。如需了解详情,请参阅启用 Workload Identity

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

将您的应用配置为使用 Workload Identity 向 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 数据库。

后续步骤