无法从部署的kubernetes nodejs应用程序连接到google mysql

ql3eal8s  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(561)

在过去的几天里,我一直在尝试让我部署的nodejs kubernetes loadbalancer应用程序连接到google云mysql示例。sql数据库和kubernetes部署存在于同一个google项目中。这两个项目的选择形式是续集。下面是我的连接配置的一个片段:

"deployConfigs": {
   "username": DB_USERNAME,
   "password": DB_PASSWORD,
   "database": DB_DATABASE,
   "host": DB_HOST,
   "port": 3306,
   "dialect": "mysql",
   "socketPath": "/cloudsql/INSTANCE_NAME"
}

当我使用相同的配置在本地运行应用程序时,我能够从数据库中进行查询。我还可以点击nodejs loadbalancer url以获得有效的api响应,只要api没有点击数据库。
我已经将我的ip以及nodejs loadbalancer api的ip列入了白名单,但仍然得到以下响应:

{
"name": "SequelizeConnectionError",
"parent": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
  },
"original": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
  }
}

我遵循了通过kubernetes部署创建代理的说明,但我不认为这一定能解决我的问题,因为我只想从kubernetes应用程序连接到持久数据库。
同样,在本地运行容器和本地运行节点应用程序时,我能够成功地命中远程db。我真的不确定为什么这将无法连接时部署。
谢谢!

o7jaxewo

o7jaxewo1#

听起来您可能正试图通过其公共ip连接到云sql示例?如果是这样的话,那么要小心,因为这是不支持的。看看这个文档页面,找出解决这个问题的最佳方法。
你提到你已经在使用代理了,但是没有提到是哪一个。如果是云sql代理,那么它应该允许您对数据库执行任何类型的操作,它所做的只是在客户机(即pod)和云sql示例之间建立连接。这个代理应该没有任何问题。
别忘了在云sql方面设置适当的授权和所有这些东西。

1wnzp6jl

1wnzp6jl2#

所以kubernetes做了很多源代码本地工作,所以我不得不在我的网络上添加这样一个规则,以允许gce集群中到处都有传出流量:

这是非常允许的,所以您可能只想添加它以用于最初的测试目的。您还可以通过在一个正在运行的pod中进行炮击来检查与mysql的连接:

$ kubectl exec -it <running-pod> sh
/home/user # telnet $DB_HOST 3306

相关问题