我想使用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
答案 0 :(得分:1)
您可以在端口转发侦听地址上找到不错的讨论,在https://github.com/kubernetes/kubernetes/issues/43962和https://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.