我有一个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和该节点无法到达主机。
答案 0 :(得分:1)
因此,在Google支持的帮助下,我能够找到解决问题的方法。问题是,列入白名单以连接到数据库的IP地址不是负载均衡器的IP地址。因为负载平衡器是用于入口流量,而不是出口流量。
解决方法是创建一个私有群集,然后使用Google Cloud NAT服务通过单个ip(或ip范围)路由该群集的出口流量。一旦完成,我就可以成功连接到数据库,而无需额外的端点/ mysql服务。