我试图从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外部的数据库,在同一主机上运行?
答案 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内部实现的,那么应用程序代码将完全解耦,外部负载均衡!