如何为 Bytebase 元数据 PostgreSQL 配置 GCP Cloud SQL IAM 认证与私有 IP 连接
【免费下载链接】bytebaseDatabase governance built for humans and agents — controlling changes and access across every major database.项目地址: https://gitcode.com/GitHub_Trending/by/bytebase
当你在 GCP 上自托管 Bytebase,且元数据库(存储 Bytebase 自身元数据的 PostgreSQL)是 GCP Cloud SQL for PostgreSQL 时,可以让 Bytebase 不使用固定密码,而通过 Cloud SQL IAM 认证连接元数据库,并走实例的私有 IP。本文的操作依据是仓库中的运维手册 docs/operations/high-availability.md 的 “GCP Cloud SQL IAM authentication for metadata PostgreSQL” 一节,以及官方 Helm chart 的 helm-charts/bytebase/README.md、values.yaml 和 statefulset 模板。
前置条件
在改配置之前,先确认以下各项已满足(均为文档的明确要求):
- Kubernetes 1.24+、Helm 3.9.0+(chart 的 Prerequisites)。
- 元数据库是 GCP Cloud SQL for PostgreSQL,且能写出实例连接名,格式为
project:region:instance。 - Cloud SQL IAM 数据库用户(文档示例为
bb-meta@project-id.iam)已在实例上存在,并具有所需的 PostgreSQL 权限。 - 每个 Bytebase 进程使用的 Google principal 有权限连接该 Cloud SQL 实例,通常通过 Application Default Credentials 提供,例如 GKE Workload Identity。文档明确要求:不要把 Google 服务账号密钥放进
PG_URL。 - 私有 IP 连接要求 Bytebase 能到达实例的私有 IP——即 Bytebase 运行在与实例相同的 VPC 内(Private Service Access)。
方式一:通过bytebase.option.externalPg.url传入完整 DSN(私有 IP 推荐)
文档推荐使用 keyword/value 形式的 DSN,因为 Cloud SQL IAM 的 PostgreSQL 用户名通常包含@。在 DSN 中加入 Bytebase 的 GCP 参数即可启用 IAM 认证;私有 IP 实例(文档称其为推荐的部署形态)额外加上bytebase_gcp_cloud_sql_ip_type=private:
user=bb-meta@project-id.iam dbname=bytebase bytebase_gcp_cloud_sql_iam=true bytebase_gcp_cloud_sql_instance_connection_name=project-id:us-central1:bytebase-metadata bytebase_gcp_cloud_sql_ip_type=private其中:
bytebase_gcp_cloud_sql_iam=true:启用元数据库的 Cloud SQL IAM 认证;开启后实例连接名参数必填。bytebase_gcp_cloud_sql_instance_connection_name:实例连接名project:region:instance,需替换为你自己的 project、region 和实例名。bytebase_gcp_cloud_sql_ip_type:缺省或public表示连接公网 IP,private表示私有 IP,psc表示 Private Service Connect。
把该 DSN 作为bytebase.option.externalPg.url的值安装 chart(下面命令中的your-project、us-central1、bytebase-metadata、bb-meta均替换为你自己的值):
helm repo add bytebase-repo https://bytebase.github.io/bytebase helm repo update helm -n bytebase \ --set "bytebase.option.port"=443 \ --set "bytebase.option.externalPg.url"="user=bb-meta@your-project.iam dbname=bytebase bytebase_gcp_cloud_sql_iam=true bytebase_gcp_cloud_sql_instance_connection_name=your-project:us-central1:bytebase-metadata bytebase_gcp_cloud_sql_ip_type=private" \ --set "bytebase.option.external-url"="https://bytebase.example.com" \ --set "bytebase.version"=3.20.1 \ install bytebase-release bytebase-repo/bytebase其中bytebase.option.external-url是用户访问 Bytebase 的地址,需替换为你的实际地址;bytebase.version可省略(默认latest)或固定到具体版本。
方式二:使用 chart 的gcpCloudSqlIam字段(默认走公网 IP)
chart 也提供了细粒度字段:bytebase.option.externalPg.gcpCloudSqlIam.enabled(默认false)与bytebase.option.externalPg.gcpCloudSqlIam.instanceConnectionName(启用时必填,project:region:instance),配合pgUsername、pgDatabase使用:
helm -n bytebase \ --set "bytebase.option.port"=443 \ --set "bytebase.option.externalPg.gcpCloudSqlIam.enabled"=true \ --set "bytebase.option.externalPg.gcpCloudSqlIam.instanceConnectionName"="your-project:us-central1:bytebase-metadata" \ --set "bytebase.option.externalPg.pgUsername"="bb-meta@your-project.iam" \ --set "bytebase.option.externalPg.pgDatabase"="bytebase" \ --set "bytebase.option.external-url"="https://bytebase.example.com" \ install bytebase-release bytebase-repo/bytebase注意这条路径与私有 IP 的边界:statefulset 模板 在该模式下渲染出的PG_URL只包含user=、dbname=、bytebase_gcp_cloud_sql_iam=true和bytebase_gcp_cloud_sql_instance_connection_name=,不包含bytebase_gcp_cloud_sql_ip_type。由于缺省即连接公网 IP,实例若只有私有 IP,应改用方式一直接传完整 DSN。另外,awsRdsIam.enabled与gcpCloudSqlIam.enabled不能同时为 true,否则模板渲染直接失败,报only one metadata database IAM auth provider can be enabled。
验证部署结果
- StatefulSet 中 Bytebase 容器的存活探针是对服务端口发起的
/healthz请求(initialDelaySeconds: 300、periodSeconds: 300),Pod 稳定 Running 说明 Bytebase 已成功启动并连接元数据库。 - 调用
GET /v1/actuator/info核对文档给出的字段:version、externalUrl、replicaCount。单副本部署时replicaCount为 1;若之后把 Bytebase 扩为多副本(HA 拓扑),每个副本必须使用同一份PG_URL和同一个 external URL,并且GET /v1/subscription中ha为true时才允许多副本运行。
排查与限制
- 连接失败先核对两处授权:Cloud SQL IAM 数据库用户是否存在并具备所需 PostgreSQL 权限;Bytebase 进程所用的 Google principal 是否有连接该实例的权限(经 ADC,例如 GKE Workload Identity)。不要把服务账号密钥写入
PG_URL。 - 私有 IP 连不上:确认 Bytebase 与 Cloud SQL 实例在同一 VPC(Private Service Access);如果网络走 Private Service Connect,将
bytebase_gcp_cloud_sql_ip_type设为psc。 - Helm 报错
bytebase.option.externalPg.gcpCloudSqlIam.instanceConnectionName is required when bytebase.option.externalPg.gcpCloudSqlIam.enabled is true:方式二启用了gcpCloudSqlIam但未提供实例连接名,补上instanceConnectionName即可。 - 升级:按 helm-charts/bytebase/README.md 用
helm upgrade带上与安装时相同的--set参数(通常只改bytebase.version),避免 IAM 相关参数在升级时丢失。
【免费下载链接】bytebaseDatabase governance built for humans and agents — controlling changes and access across every major database.项目地址: https://gitcode.com/GitHub_Trending/by/bytebase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考