如何自动将GCP自动扩缩容GKE节点公网IP添加到SQL实例允许连接列表
可行方案整理
方案1:优先采用更稳定的无IP白名单依赖方案(推荐)
- Cloud SQL Auth Proxy:在GKE集群中以Sidecar或者Deployment形式部署Cloud SQL Auth Proxy,所有Pod访问SQL实例都通过Proxy转发,Proxy用GCP服务账号权限鉴权,完全不需要配置节点公网IP白名单,也不受扩缩容影响,是官方推荐的生产级访问方案。
- VPC内网访问:给Cloud SQL实例开启私有IP,和GKE集群放在同一VPC或者配置VPC peering,Pod直接通过内网IP访问SQL实例,不需要走公网,自然不需要配置公网IP白名单,安全性和访问延迟都更优。
方案2:如果必须保留公网IP白名单的访问方式,可通过自动化流程实现IP自动添加
核心逻辑是监听GKE节点创建事件,触发自动更新Cloud SQL的白名单配置,实现步骤如下:
- 开启GCP Audit Log日志,监听
compute.instances.insert事件(GKE节点本质是Compute Engine虚拟机,创建时会触发该事件) - 配置Eventarc规则,匹配对应GKE集群的节点创建事件,触发Cloud Function/Cloud Run服务
- 服务逻辑:
- 提取新创建节点的公网IP
- 调用Cloud SQL Admin API,将该IP添加到对应SQL实例的
authorizedNetworks配置中 - 可选:添加过期清理逻辑,监听节点删除事件,同步从白名单中移除释放的IP,避免白名单冗余
- 给执行的服务账号授予
roles/cloudsql.editor(仅修改SQL实例配置权限)和roles/compute.viewer(读取节点IP权限)的最小权限角色
注意事项
- 自动化添加白名单的方案会存在数秒到1分钟左右的延迟,节点刚创建的短时间内Pod可能还是无法连接SQL实例
- 频繁扩缩容的场景下白名单条目会快速增加,Cloud SQL单实例白名单条目有默认上限(100条,可申请上调),建议搭配节点删除的同步清理逻辑使用
内容的提问来源于stack exchange,提问作者EMG
相关产品推荐
相关产品推荐

