将 Spanner 连接到 GKE 集群

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

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

您的 GKE 集群可以通过 适用于 GKE 的工作负载身份联合。 适用于 GKE 的工作负载身份联合允许集群中的 Kubernetes 服务账号执行操作 作为 IAM 服务账号IAM 服务账号提供应用默认值 凭据 因此您无需将每个 Pod 配置为使用 凭据。

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

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

启用适用于 GKE 的工作负载身份联合

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

使用适用于 GKE 的工作负载身份联合对与 Spanner 的连接进行身份验证

使用 适用于 GKE 的工作负载身份联合。

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

  2. 创建 IAM 允许政策, 为 Kubernetes 授予 Spanner IAM 角色 ServiceAccount 对象。以下示例会授予 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 集群。
    • PROJECT_NUMBER:数值 Google Cloud 项目编号。
    • NAMESPACE:包含 ServiceAccount 的 Kubernetes 命名空间。
    • KSA_NAME:ServiceAccount 的名称。

连接 Spanner 数据库

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

后续步骤