首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法从已部署的Kubernetes NodeJS应用程序连接到谷歌MySQL

无法从已部署的Kubernetes NodeJS应用程序连接到谷歌MySQL
EN

Stack Overflow用户
提问于 2018-10-30 00:14:11
回答 2查看 577关注 0票数 1

在过去的几天里,我一直在尝试让我部署的NodeJS Kubernetes LoadBalancer应用程序连接到Google Cloud MySQL实例。SQL数据库和Kubernetes部署存在于同一个Google项目中。这两个项目选择的ORM都是Sequelize。下面是我的连接配置的一个片段:

代码语言:javascript
运行
AI代码解释
复制
"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列入了白名单,但我仍然得到了以下响应:

代码语言:javascript
运行
AI代码解释
复制
{
"name": "SequelizeConnectionError",
"parent": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
  },
"original": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
  }
}

我遵循了通过Kubernetes部署创建代理的说明,但我认为这不一定能解决我的问题,因为我只是想从Kubernetes应用程序连接到一个持久数据库。

同样,当在本地运行容器和在本地运行节点应用程序时,我能够成功地访问远程DB。我真的不确定为什么这在部署时不能连接。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-10-30 01:03:31

所以Kubernetes做了很多源NATing,所以我不得不在我的网络上添加一个类似这样的规则,以允许从我的集群中的任何地方传出流量:

这是非常宽松的,所以您可能只想将其添加到最初的测试目的。您还可以通过check到正在运行的pod来检查与MySQL的连接:

代码语言:javascript
运行
AI代码解释
复制
$ kubectl exec -it <running-pod> sh
/home/user # telnet $DB_HOST 3306
票数 0
EN

Stack Overflow用户

发布于 2019-01-21 13:08:08

您可能正在尝试通过云SQL实例的公网IP连接到该实例?如果是这种情况,请小心,因为这是不受支持的。看看this documentation page,看看最好的方法是什么。

你提到你已经在使用代理了,但没有提到是哪一个。如果它是Cloud SQL代理,那么它应该允许您对数据库执行任何类型的操作,它所做的就是在客户端(即pod)和Cloud SQL实例之间建立一个连接。这个代理应该可以正常工作。

不要忘了在云SQL方面设置适当的授权和所有这些东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53055647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档