【问题标题】:Can't connect to Postgres (installed through Kubernetes Helm) service from external machine, connection refused无法从外部机器连接到 Postgres(通过 Kubernetes Helm 安装)服务,连接被拒绝
【发布时间】:2019-04-14 13:48:30
【问题描述】:

我刚刚在我的桌面(运行 Ubuntu 18.10)上安装了带有 minkube 的 Kubernetes,然后尝试使用 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   

对任何人有帮助吗?我迷路了。

【问题讨论】:

  • 所以为了进一步调试,我也通过 helm 安装了 mysql,这给了我同样的问题。我无法从我的笔记本电脑访问 mysql。所以看起来我无法从外部机器访问我的任何 Kubernetes 服务。搜索这似乎是一个已知问题:github.com/kubernetes/kubernetes/issues/42413 但解决方案尚不清楚。不知道如何使用命令:iptables -P FORWARD ACCEPT。简单地在我的 kubernetes 机器上运行该命令并没有解决任何问题。
  • 您找到答案了吗?我遇到了同样的问题,因为我不确定如何使用 Helm 图表 values.yaml 文件修改 PGSQL 配置。
  • @MikeStoddart 你在用 minikube 吗?
  • 不,kubectl + k3s + k3d。
  • @MikeStoddart 我已经发布了为我解决问题的方法。查看我刚刚发布的解决方案。

标签: postgresql kubernetes kubernetes-helm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    问题在于 minikube 在 VM 中运行并且它有自己的 IP 地址。它不仅仅使用运行它的机器的 IP。 Minikube的IP和IP不一样 运行它的机器。要查找 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 上调用服务,它将被转发到运行 minikube 的机器上的端口 5432,然后您的 postgres 实例将接收到 5432。

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

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 2013-11-15
      • 1970-01-01
      • 2017-01-04
      • 2021-05-25
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      相关资源
      最近更新 更多