从远程主机访问OpenShift转发的端口

时间:2018-10-02 11:55:09

标签: postgresql openshift iptables portforwarding

我想使用here中所述的端口转发连接到在OpenShift(3.9)内运行的PostgreSQL(9.6)集群。为此,我在跳转主机(OpenShift群集外部)上设置并进行完整性检查,如下所示:

oc port-forward $pod 5432:5432
netstat -ln | grep 5432 # "tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN"
psql -U postgres -h localhost # OK
psql -U postgres -h $(hostname -i) # error: "connection refused"

因此,似乎端口转发仅侦听localhost,而不侦听主机的其他IP地址。最终,我想通过另一个远程主机上的跳转主机连接到数据库,因此localhost无法满足要求。

如何设置(OpenShift)端口转发,使其也允许从远程主机访问转发的端口?我想Iptables(结合OpenShift端口转发)可以解决问题,但是我还不知道如何以及是否有更简单的方法。 (跳转主机运行Debian 9.5。)

更新一种将SSH隧道和OpenShift(Kubernetes)端口转发相结合的方法显然可以解决此问题。这是在下面接受的答案中提供的链接中建议的。

在跳转主机(第一个会话)上:

ssh -N -L $(hostname -i):5432:localhost:5433 $(whoami)@$(hostname)

在跳转主机(第二届会议)上:

oc port-forward $pod 5433:5432

在远程主机上:

psql -U postgres -h jump-host

2 个答案:

答案 0 :(得分:1)

您可以在端口转发侦听地址上找到不错的讨论,在https://github.com/kubernetes/kubernetes/issues/43962https://github.com/kubernetes/kubernetes/pull/46517上找到一些临时解决方案。

在PR被合并,在上游kubernetes中发布并对该版本进行openshift更新之后,您将有一个简单的方法来实现这一目标(我想从现在起至少半年)。目前,您仍无法解决。

答案 1 :(得分:0)

我个人认为port-forward仅允许本地访问[0],因此没有比您说的更简单的方法。即使可以启用远程访问,也应配置iptables以允许5432上的node端口。因此,如果您希望从远程访问Pod,则应使用 Route Service,就像Pods之间的通信一样。

[0] Port Forwarding

You can use the CLI to forward one or more local ports to a pod. This allows you to listen on a given or random port locally, and have data forwarded to and from given ports in the pod.