在过去的几天里,我一直在尝试让我部署的NodeJS Kubernetes LoadBalancer应用程序连接到Google Cloud MySQL实例。SQL数据库和Kubernetes部署存在于同一个Google项目中。这两个项目选择的ORM都是Sequelize。下面是我的连接配置的一个片段:
"deployConfigs": {
"username": DB_USERNAME,
"password": DB_PASSWORD,
"database": DB_DATABASE,
"host": DB_HOST,
"port": 3306,
"dialect": "mysql",
"socketPath": "/cloudsql/INSTANCE_NAME"
}
当我使用相同的配置在本地运行应用程序时,我能够从数据库中进行查询。只要NodeJS不命中数据库,我也可以点击API来获得有效的LoadBalancer响应。
我已经将我的IP和NodeJS LoadBalancer接口的IP列入了白名单,但我仍然得到了以下响应:
{
"name": "SequelizeConnectionError",
"parent": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
},
"original": {
"errorno": "ETIMEDOUT",
"code": "ETIMEDOUT",
"syscall": "connect",
"fatal": true
}
}
我遵循了通过Kubernetes部署创建代理的说明,但我认为这不一定能解决我的问题,因为我只是想从Kubernetes应用程序连接到一个持久数据库。
同样,当在本地运行容器和在本地运行节点应用程序时,我能够成功地访问远程DB。我真的不确定为什么这在部署时不能连接。
谢谢!
发布于 2018-10-30 01:03:31
所以Kubernetes做了很多源NATing,所以我不得不在我的网络上添加一个类似这样的规则,以允许从我的集群中的任何地方传出流量:
这是非常宽松的,所以您可能只想将其添加到最初的测试目的。您还可以通过check到正在运行的pod来检查与MySQL的连接:
$ kubectl exec -it <running-pod> sh
/home/user # telnet $DB_HOST 3306
发布于 2019-01-21 13:08:08
您可能正在尝试通过云SQL实例的公网IP连接到该实例?如果是这种情况,请小心,因为这是不受支持的。看看this documentation page,看看最好的方法是什么。
你提到你已经在使用代理了,但没有提到是哪一个。如果它是Cloud SQL代理,那么它应该允许您对数据库执行任何类型的操作,它所做的就是在客户端(即pod)和Cloud SQL实例之间建立一个连接。这个代理应该可以正常工作。
不要忘了在云SQL方面设置适当的授权和所有这些东西。
https://stackoverflow.com/questions/53055647
复制相似问题