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

Access OpenShift forwarded ports from remote host

我想连接到在 OpenShift (3.9) 中运行的 PostgreSQL (9.6) 集群,使用 here 所述的端口转发。为此,我在跳转主机(在 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。)

UPDATE 结合 SSH 隧道和 OpenShift (Kubernetes) 端口转发的方法显然可以解决这个问题。这是在下面接受的答案中提供的 link 中提出的建议。

在跳跃主机上(第 1 节):

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

在跳跃主机上(第 2 节):

oc port-forward $pod 5433:5432

在远程主机上:

psql -U postgres -h jump-host

我个人认为 port-forward 只允许本地访问[0],所以没有比你说的更简单的方法了。即使可以启用远程访问,但您应该在 node 上配置 iptables 以允许 5432 端口。因此,如果您希望从远程访问 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.

您可以在 https://github.com/kubernetes/kubernetes/issues/43962 and https://github.com/kubernetes/kubernetes/pull/46517.

上找到关于端口转发侦听地址的不错的讨论和一些临时解决方案

在 PR 被合并、发布到上游 kubernetes 和 openshift 更新到那个版本之后,你将有一个简单的方法来实现这个(我猜从现在起至少半年)。现在,您遇到了变通办法。