在过去的几天里,我一直在尝试让我部署的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。我真的不确定为什么这将无法连接时部署。
谢谢!
2条答案
按热度按时间o7jaxewo1#
听起来您可能正试图通过其公共ip连接到云sql示例?如果是这样的话,那么要小心,因为这是不支持的。看看这个文档页面,找出解决这个问题的最佳方法。
你提到你已经在使用代理了,但是没有提到是哪一个。如果是云sql代理,那么它应该允许您对数据库执行任何类型的操作,它所做的只是在客户机(即pod)和云sql示例之间建立连接。这个代理应该没有任何问题。
别忘了在云sql方面设置适当的授权和所有这些东西。
1wnzp6jl2#
所以kubernetes做了很多源代码本地工作,所以我不得不在我的网络上添加这样一个规则,以允许gce集群中到处都有传出流量:
这是非常允许的,所以您可能只想添加它以用于最初的测试目的。您还可以通过在一个正在运行的pod中进行炮击来检查与mysql的连接: