从minishift连接到主机postgres db

时间:2017-03-01 08:08:46

标签: openshift kubernetes fabric8 minikube

我试图从minishift中部署的springboot应用程序连接到postgres数据库。

postgres服务器在运行minishift的同一主机上运行。

我已经尝试将postgres服务设置为侦听特定的IP地址,并在springboot jdbc连接URL中使用相同的地址,但我仍然得到org.postgresql.util.PSQLException: Connection to 172.99.0.1:5432 refused

我也尝试过使用10.0.2.2

还尝试在/etc/postgresql/9.5/main/postgresql.conf设置:

listen_addresses = '*'  

如何连接到minishift外部的数据库,在同一主机上运行?

2 个答案:

答案 0 :(得分:0)

除了我的评论中提到的答案,它建议让你的数据库监听Docker网桥的IP地址,你可以让你的pod使用你主机的网络堆栈。这样你就可以在环回上达到Postgres。仅当可以保证pod始终与数据库在同一主机上运行时,此方法才有效。

Kubernetes文档discourages using hostNetwork。如果您了解后果,可以在this example中启用它。

答案 1 :(得分:0)

如果kubernetes中的pod无法从主机看到IP地址,那么我猜它是潜在的防火墙或网络问题。尝试打开pod中的shell ...

const queries = [];
for (var i = 0; i < 1000000; i++) {
    queries.push({query: 'INSERT INTO subscribers (id, email , name , family) VALUES (?, ?, ? , ?)',
            params: [ uuidV4() , 'email@man' + i + '.com', 'test name' , 'test family']});
}

var before = new Date().getTime();
client.batch(queries, { prepare: true }, function(err){
    var after = new Date().getTime();
    resp.send('added recounds in : ' + (after - before) );
});

然后尝试ping,telnet,curl,wget或其他什么来查看是否可以看到IP地址。

这听起来像你的minishift的网络设置有问题。使用minishift可能值得提出一个问题:https://github.com/minishift/minishift/issues/new

如果您可以在主机上找到可从docker pod访问的IP地址,则可以在主机上创建一个Kubernetes服务,然后创建一个具有数据库IP地址的服务端点;然后,您可以使用kubernetes服务的常规DNS发现(即使用服务名称作为DNS名称),然后将其解析为IP地址。随着时间的推移,您可以使用多个IP地址进行故障转移等。

请参阅:https://kubernetes.io/docs/user-guide/services/#without-selectors

然后,您可以使用服务与您的所有实际网络端点进行通信,如果端点是在kubernetes内部实现的,那么应用程序代码将完全解耦,外部负载均衡!