从Node.js GKE Pod连接到外部MySQL数据库

时间:2019-02-28 19:59:56

标签: mysql node.js networking kubernetes google-kubernetes-engine

我有一个nodejs express应用程序,它使用以下命令连接到mysql数据库:

const dbconfig = {
 client: 'mysql',
 connection: {
     host: config.db.host,
     user: config.db.user,
     password: config.db.password,
     database: config.db.database,
     port: config.db.port,
     charset: 'utf8',
     ssl: {
         ca: fs.readFileSync(__dirname + '/root_ca.pem')
     }
 }
}

在我的本地docker env中,此连接成功,但是将其部署到kube集群时,我无法连接至host:port。

将VPC设置为允许该主机/端口上的入口/出口流量。

还设置了服务和端点:

kind: "Service"
apiVersion: "v1"
metadata:
 name: "mysql"
spec:
 ports:
  - name: "mysql"
    protocol: "TCP"
    port: 13306
    nodePort: 0
selector: {}

---

kind: "Endpoints"
apiVersion: "v1"
metadata:
 name: "mysql"
subsets:
 - addresses:
   - ip: "34.201.17.84"
   ports:
    - port: 13306
      name: "mysql"

更新:仍然没有运气,但是更多信息表明该Pod和该节点无法到达主机。

1 个答案:

答案 0 :(得分:1)

因此,在Google支持的帮助下,我能够找到解决问题的方法。问题是,列入白名单以连接到数据库的IP地址不是负载均衡器的IP地址。因为负载平衡器是用于入口流量,而不是出口流量。

解决方法是创建一个私有群集,然后使用Google Cloud NAT服务通过单个ip(或ip范围)路由该群集的出口流量。一旦完成,我就可以成功连接到数据库,而无需额外的端点/ mysql服务。