从远程主机访问 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 更新到那个版本之后,你将有一个简单的方法来实现这个(我猜从现在起至少半年)。现在,您遇到了变通办法。
我想连接到在 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 更新到那个版本之后,你将有一个简单的方法来实现这个(我猜从现在起至少半年)。现在,您遇到了变通办法。