golang数据源访问k8s内部数据库连接时产生的问题

背景

  • 集群:Docker Desktop 内置 K8s(新版内部使用 kind),配置的是LoadBalancer,并不是NodePort
  • MySQL Service 在 K8s 内正常 Running,后端写数据正常
  • 问题:GoLand ide数据源连不上 localhost:11309

根因

新版 Docker Desktop K8s 改用 kind,LoadBalancer 类型无法分配 External-IP(一直 <pending>),所以 localhost:11309 不可达。旧版可以直连,新版必须走其他方式。

可行方案

解决方法:port-forward(推荐)

笔者亲测可行

1
kubectl port-forward service/webook-mysql 13309:11309
  • GoLand 配 localhost:13309
  • 终端保持开启,关闭后连接即断
  • 可用脚本放到后台或开机自启,减少手动操作

NodePort 直连

这是笔者了解到的另外一种方法,但是没有成功,也觉得这个每次电脑重启啥的都得去专门查一下ip,有点麻烦,大家也可以自行尝试一下

  • 将 Service 类型改为 NodePort(端口范围 30000~32767)
  • 查看 NodePort:kubectl get svc webook-mysql
  • 查看 kind 节点 IP:docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' desktop-control-plane
  • GoLand 配 IP:NodePort
  • 注意:kind 节点 IP 重启后会变化

注:

这个问题不会影响k8s里面webook的正常使用,golang ide数据源连接mysql还是为了查看一些数据方便一些,也可以用sqlyog等工具

1
2
3
4
5
webook Pod(后端代码)→ MySQL Service(集群内部)→ MySQL Pod
↑ 正常工作,不受影响

GoLand 数据源(你本机 IDE)→ 需要额外打通才能连上
↑ 只是查数据方便,不是必须