无法从外部机器连接到 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 实例接收。
希望这可以解决或澄清其他人可能遇到的这个问题。
我刚刚在桌面上安装了带有 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 实例接收。
希望这可以解决或澄清其他人可能遇到的这个问题。