通过堡垒机上的cloud-sql-proxy连接CloudSQL遇IAP隧道问题
问题诊断与解决方案
核心问题分析
你的IAP隧道无法连接堡垒机3306端口,核心原因有两点:
- Cloud SQL Proxy监听范围限制:默认情况下
cloud-sql-proxy仅监听127.0.0.1,仅允许堡垒机本地进程访问,而IAP隧道的连接请求属于外部(相对堡垒机本地)请求,无法命中监听端口。 - 进程生命周期不稳定:直接在启动脚本中运行
./cloud-sql-proxy,进程会依附于脚本会话,脚本执行完成后进程可能被终止,无法长期稳定运行。
修复步骤
1. 修改Cloud SQL Proxy监听地址
在Terraform的startup_script中,给cloud-sql-proxy添加--address 0.0.0.0参数,让它监听堡垒机的所有网络接口:
./cloud-sql-proxy --private-ip --address 0.0.0.0 ${var.project}:${var.db_instance_region}:${var.db_instance_name}
2. 确保进程后台稳定运行
直接运行进程会在脚本会话结束后终止,推荐两种稳定运行方案:
方案A:用nohup后台启动
修改启动命令,让进程脱离终端并持久运行:
nohup ./cloud-sql-proxy --private-ip --address 0.0.0.0 ${var.project}:${var.db_instance_region}:${var.db_instance_name} > /var/log/cloud-sql-proxy.log 2>&1 &
nohup:让进程脱离终端会话,脚本结束后仍能继续运行- 输出重定向到日志文件,方便后续排查问题
方案B:配置systemd服务(推荐,可靠性更高)
替换启动脚本中的启动逻辑,用systemd管理进程,实现崩溃自动重启:
#!/bin/bash sudo apt-get update $(gcloud info --format="value(basic.python_location)") -m pip install numpy URL="https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.6.1" curl "$URL/cloud-sql-proxy.linux.amd64" -o /usr/local/bin/cloud-sql-proxy chmod +x /usr/local/bin/cloud-sql-proxy # 创建systemd服务配置文件 cat << EOF | sudo tee /etc/systemd/system/cloud-sql-proxy.service [Unit] Description=Cloud SQL Proxy Service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/cloud-sql-proxy --private-ip --address 0.0.0.0 ${var.project}:${var.db_instance_region}:${var.db_instance_name} Restart=always User=root [Install] WantedBy=multi-user.target EOF # 加载配置并启动服务 sudo systemctl daemon-reload sudo systemctl enable cloud-sql-proxy sudo systemctl start cloud-sql-proxy
3. 验证配置
应用Terraform变更重新部署堡垒机后,执行以下检查:
- 检查进程状态(systemd方案):
sudo systemctl status cloud-sql-proxy - 确认端口监听:
ss -tulpn | grep 3306,应显示监听0.0.0.0:3306
4. 重新测试IAP隧道
再次执行隧道命令:
gcloud compute start-iap-tunnel bastion-vm 3306 --local-host-port=localhost:3310 --zone=europe-west2-a --project=my-project
此时本地localhost:3310即可正常访问Cloud SQL实例。
额外优化建议
- 权限最小化:当前堡垒机服务账号使用
roles/editor权限过大,建议仅授予roles/cloudsql.client权限即可满足proxy运行需求。 - 防火墙加固:保持防火墙规则仅允许IAP固定IP段
35.235.240.0/20访问3306端口,避免不必要的暴露。
内容的提问来源于stack exchange,提问作者markwalker_
相关产品推荐
相关产品推荐

