适用于 GCP 的客户自管 VPC (BYO-VPC)
如果您希望使用现有 VPC 部署 ClickHouse BYOC,而不是由 ClickHouse Cloud 预配新的 VPC,请按以下步骤操作。这样做可以让您更好地控制网络配置,并将 ClickHouse BYOC 集成到现有网络基础设施中。1
配置现有 VPC
- 在 ClickHouse BYOC 支持的区域中,为 ClickHouse Kubernetes (GKE) 集群至少分配 1 个私有子网。请确保该子网的 CIDR 范围至少为
/24(例如 10.0.0.0/24) ,以便为 GKE 集群节点提供足够的 IP 地址。 - 在该私有子网中,至少分配 1 个供 GKE 集群 Pod (容器组) 使用的辅助 IPv4 范围。该辅助范围必须至少为
/21。较小的范围无法为 GKE 集群完成预配提供足够的 Pod (容器组) IP 地址,基础设施设置将会失败。 - 在该子网上启用 Private Google Access。这样,GKE 节点无需外部 IP 地址即可访问 Google API 和服务。
若要通过 Private Service Connect 暴露服务,您还需要在该 VPC 中创建一个用途为
PRIVATE_SERVICE_CONNECT 的专用子网。您可以现在创建,也可以稍后在启用 private link 之前创建。2
确保网络连通性
Cloud NAT Gateway
请确保已为该 VPC 部署 Cloud NAT gateway。它可为没有外部 IP 地址的实例提供出站连接能力,并且有两项内容依赖于它:
- Tailscale。 ClickHouse BYOC 组件会向 Tailscale control plane 注册,由其为私有管理操作提供安全的零信任网络,而无需开放入站公网访问。
- 容器镜像。 部署运行的部分镜像并未镜像到 BYOC 注册表中 (包括社区镜像) ,需从其上游注册表拉取。
3
设置 BYOC 基础设施
当您点击 Set up Infrastructure 时,ClickHouse Cloud 会在预配前自动运行预检验证。它会检查管理服务账号是否具有所需权限、是否已启用所需的 Google Cloud API,并会验证您自带的 VPC:网络和子网能否解析、子网的主范围和 Pod 辅助范围是否足够大,以及是否有 Cloud NAT gateway 覆盖该网络。如果存在任何缺失项,设置将会中止,并列出需要修复的具体问题。
- 在 VPC configuration 下,选择 Use existing VPC。
- 输入您的 VPC network name。
- 输入您为 ClickHouse 分配的 Subnet name。
- 可选填写 Secondary range names,用于指定 GKE 将子网的哪些辅助范围用于 Pod (容器组)。留空表示使用全部辅助范围;您列出的每个名称都必须已存在于该子网上。
- 如果您的 VPC 位于共享 VPC 宿主项目中,请输入 共享 VPC host project ID。当 VPC 与基础设施位于同一项目中时,请留空。请参阅下文来自宿主项目的共享 VPC。
- 点击 Set up Infrastructure 开始预配。
来自宿主项目的共享 VPC
你可以在某个服务项目中运行 BYOC,而其使用的网络位于另一个独立的共享 VPC 宿主项目中,从而实现网络的集中管理。VPC 及其子网归宿主项目所有,而 BYOC 基础设施运行在关联的服务项目中。上述要求保持不变,只是改为适用于宿主项目中的子网。 此类配置有两个特有的前置条件:- 在开始之前,先将宿主项目启用为共享 VPC 宿主,并将服务项目关联到该宿主项目。 这两步都是必需的,且彼此独立:尚未成为共享 VPC 宿主的项目必须先启用为宿主,之后才能关联服务项目。共享 VPC 的 GKE 集群要求该关联关系已经存在。预检验证会通过宿主项目的 grants 读取你的网络和子网,因此两种情况下都能通过,而预配会在随后创建 cluster 时失败。这两项操作都属于 organization 级别,需由你所在 organization 中负责管理共享 VPC 的人员执行,onboarding Terraform 无法代为完成。
- 运行 onboarding Terraform 时设置宿主项目。 向 onboarding module 传入
shared_vpc_host_project_id、shared_vpc_host_subnet_region和shared_vpc_host_private_subnet_id。shared_vpc_host_private_subnet_id指的是 GKE 节点所在的宿主子网,即你在上文中配置的那个子网,而不是下文介绍的 Private Service Connect 子网。若将其指向 PSC 子网,roles/compute.networkUser授权就会被添加到错误的子网上,预配会在随后创建 cluster 时失败。单次调用会同时向两个项目写入,因此运行它的 credentials 需要同时具备服务项目和宿主项目的 IAM 管理权限。
最后一行是唯一的写入权限,且授予对象是你自己项目的 GKE 服务代理,而非 ClickHouse。ClickHouse 管理服务账号绝不会向宿主项目写入。module 还会在宿主项目上启用
container.googleapis.com API,从而为该项目预配其自身的 GKE 服务代理。
然后在上文所述的 Shared VPC host project ID 字段中填入宿主项目。如果你需要 private link,请在宿主项目中创建一个独立的 PRIVATE_SERVICE_CONNECT 子网,与节点子网位于同一网络和同一区域。它与节点子网并存,而非取代节点子网,并且它不是你作为 shared_vpc_host_private_subnet_id 传入的子网。