无法从GKE使用内部IP连接Google Cloud MySQL Cloud SQL实例
排查与解决步骤
1 基础配置核对
- 确认MySQL实例私有IP绑定的VPC,与GKE集群所在VPC完全一致,私有服务连接为VPC级资源,跨VPC默认无法互通
- 在Cloud SQL实例详情的「连接」页面核对已分配的私有IP地址,排除Pod内连接时输入IP错误的问题
- 确认MySQL实例运行状态正常,无正在进行的维护任务或故障告警
2 VPC网络与私有服务连接排查
- 检查VPC私有服务连接的分配地址段,确认MySQL实例的私有IP属于已分配的地址范围之内
- 核对VPC防火墙规则:确认没有出站规则拦截GKE Pod网段到MySQL私有IP
3306端口的流量,也没有入站规则拒绝私有服务连接网段对3306端口的访问 - 可在GKE同VPC的普通VM实例上执行
mysql --host=<MySQL私有IP> -u <账号名> -p测试连接:- 若VM也无法连接,问题出在VPC或Cloud SQL侧
- 若VM可正常连接,问题出在GKE集群侧配置
3 GKE集群侧配置排查
- 确认GKE集群未配置网络策略拦截Pod到MySQL私有IP
3306端口的出站流量,可临时关闭网络策略验证连通性 - 检查集群是否配置了自定义路由、公网NAT等规则,导致到Cloud SQL私有IP的流量被转发到公网,未走私有网络链路
- 进入故障Pod内执行
nc -zv <MySQL私有IP> 3306验证端口连通性,若端口不通可执行traceroute <MySQL私有IP>排查路由跳转路径
4 Cloud SQL实例侧配置排查
- 私有IP模式下无需额外配置授权网络,若你此前为MySQL实例添加了限制范围的授权网络规则,建议先清空规则测试
- 确认使用的数据库账号允许非localhost地址登录:可通过Cloud Shell直连Cloud SQL实例,执行
SELECT host FROM mysql.user WHERE user = '你的账号名';查询,host为%才允许任意地址登录,若有可执行UPDATE mysql.user SET host='%' WHERE user='你的账号名'; FLUSH PRIVILEGES;修改 - 检查实例是否开启了「要求SSL连接」,若开启则连接时必须携带SSL证书,否则会被拒绝,可临时关闭SSL配置验证连接是否正常
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

