无法从外部机器连接到 Postgres(通过 Kubernetes Helm 安装)服务,连接被拒绝

Can't connect to Postgres (installed through Kubernetes Helm) service from external machine, connection refused

我刚刚在桌面上安装了带有 minkube 的 Kubernetes(运行 Ubuntu 18.10),然后尝试使用 Helm 在桌面计算机上安装 Postgresql。

安装helm后,我做了:

helm install stable/postgresql

成功完成后,我转发了 postgres 端口:

kubectl port-forward --namespace default svc/wise-beetle-postgresql 5432:5432 &

然后我测试了从我的桌面本地连接到它: psql --host 127.0.0.1 -U postgres 成功了。

我试图从我的笔记本电脑连接到 postgres,但失败了:

psql -h $MY_DESKTOP_LAN_IP -p 5432 -U postgres

psql: could not connect to the server: Connection refused
Is the server running on host $MY_DESKTOP_LAN_IP and accepting TCP/IP connections on port 5432?

为了确保我的桌面确实在 5432 上监听,我做了:

netstat -natp | grep 5432

(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN               17993/kubectl       
tcp6       0      0 ::1:5432                :::*                    LISTEN      17993/kubectl   

有什么帮助吗?我迷路了。

你需要配置postgresql.conf以允许外部客户端连接查找listen参数并将其设置为*,它在你的postgres数据目录下,然后添加你的笔记本电脑pg_hba.conf 中的 IP。它控制客户端对您的 postgresql 服务器的访问,更多信息请参见这里 - https://www.postgresql.org/docs/9.3/auth-pg-hba-conf.html

就我而言,解决方案是对网络有更深入的了解。

为清楚起见,我们将安装 minikube 的机器称为 "A"。 从我的 Wifi 上的其他计算机可以看到的这台机器的 IP 可能是:192.100.200.300.1 由于 Postgres 在端口 5432 上公开,我的期望是 postgres 应该在外部可见:192.100.200.300.1:5432。 但这种理解是错误的,这正是导致意外行为的原因。

问题是 minikube 运行 在虚拟机中,它有自己的 IP 地址。它不只是使用 运行ning 所在机器的 IP。 Minikube的IP与IP不一样 运行ning所在的机器。要找出 minikube 的 IP,运行:minikube ip。我们称这个 IP $MINIKUBE_IP.

然后我必须像这样设置端口转发:

kubectl port-forward --address "192.100.200.300" --namespace default svc/wise-beetle-postgresql 5000:5432 &

所以现在,如果您在 192.100.200.300:5000 上调用服务,它将被转发到 运行ning minikube 机器上的端口 5432,然后 5432 将被您的 postgres 实例接收。

希望这可以解决或澄清其他人可能遇到的这个问题。