如何在不暴露服务的前提下使用GUI工具安全连接GKE内的数据库?
GKE集群内部数据库非公网暴露GUI连接方案(适配TablePlus连接MySQL Pod场景)
方案1:kubectl端口转发(最简临时方案)
适用场景:临时连接验证,不需要额外部署资源
- 确保本地已安装
kubectl,且已通过gcloud container clusters get-credentials命令完成GKE集群的访问凭证配置 - 执行端口转发命令,将本地端口和集群内MySQL Pod的3306端口绑定,如果本地3306端口被占用,可自行替换为其他空闲端口:
kubectl port-forward <your-mysql-pod-name> 3306:3306 - 也可以直接绑定MySQL Service,无需固定Pod名称:
kubectl port-forward svc/<your-mysql-service-name> 3306:3306 - 打开TablePlus新建MySQL连接,主机填
127.0.0.1,端口填刚才设置的本地端口,输入对应的MySQL用户名、密码、数据库名即可连接 - 注意:端口转发的终端会话需要保持运行,关闭后连接会自动断开
方案2:GCP IAP身份感知代理隧道(私有集群适配方案)
适用场景:GKE为私有集群,kube-apiserver/节点未配置公网IP的场景
- 确保你的GCP账号已被授予IAP安全隧道用户和对应GKE集群的访问权限
- 先通过IAP隧道获取集群访问凭证:
gcloud container clusters get-credentials <cluster-name> --zone <zone> --project <project-id> --internal-ip - 配置gcloud以使用IAP代理访问集群:
gcloud config set container/use_client_certificate False gcloud config set container/use_v1_client False - 后续操作和方案1一致,执行
kubectl port-forward命令后用TablePlus连接本地端口即可 - 优势:所有流量走GCP加密的IAP通道,不需要集群任何资源暴露公网,支持细粒度权限控制
方案3:内网堡垒主机转发(高频访问场景)
适用场景:需要频繁访问集群内部多个服务,不想每次执行端口转发命令的场景
- 在GKE集群所在的VPC内创建一台仅配置内网IP的Linux虚拟机作为堡垒机,虚拟机不需要绑定公网IP
- 你可以通过IAP隧道直接SSH登录堡垒机:
gcloud compute ssh <bastion-vm-name> --zone <zone> --tunnel-through-iap - 建立SSH本地端口转发,将集群内MySQL的访问端口映射到本地:
gcloud compute ssh <bastion-vm-name> --zone <zone> --tunnel-through-iap -- -L 3306:<mysql-service-cluster-ip>:3306 - 打开TablePlus连接本地3306端口即可
方案4:办公网专线/VPN打通(企业级长期方案)
适用场景:企业办公网已和GCP VPC通过云专线、云VPN打通的场景
- 将MySQL Service配置为
ClusterIP或者Internal LoadBalancer类型,不需要配置公网暴露 - 配置VPC路由和防火墙规则,允许办公网IP段访问MySQL Service的IP和3306端口
- 打开TablePlus,直接填写MySQL Service的内网IP作为主机地址,输入账号密码即可连接
- 优势:不需要本地运行任何转发进程,连接稳定,适合团队多人使用的场景
内容的提问来源于stack exchange,提问作者Jason M
相关产品推荐
相关产品推荐

