0

我试图从部署在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

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

listen_addresses = '*'  

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

4

2 回答 2

0

如果 kubernetes 中的 pod 看不到主机的 IP 地址,那么我猜它是底层防火墙或网络问题。尝试在吊舱内打开一个外壳...

kubectl exec -it mypodname bash

然后尝试 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 内部实现的,那么您的应用程序代码将完全解耦,而外部则具有负载平衡功能!

于 2017-03-02T09:50:15.410 回答
0

除了我评论中引用的答案(建议让您的数据库侦听 Docker 网桥的 IP 地址)之外,您还可以让您的 pod 使用您主机的网络堆栈。这样你就可以在环回上到达 Postgres。这只有在可以保证 pod 始终与数据库在同一主机上运行时才有效。

Kubernetes 文档不鼓励使用hostNetwork. 如果您了解后果,您可以像本例中那样启用它。

于 2017-03-01T19:16:55.303 回答