将kubectl端口转发到另一个终端点

13

是否有与kubectl相对应的命令,以执行以下操作:


ssh -L8888:rds.aws.com:5432 example.com

kubectl 工具中有 port-forward 命令,你可以使用 --address 选项指定需要绑定的 IP 地址。

注意,--address 只接受 IP 地址参数。


"kubectl port-forward" 旨在将本地端口(可选仅限于“--address”本地IP地址)转发到k8s集群中的一个pod端口。它不会将端口转发到任何目标,只是在k8s集群内部进行转发。 - Alex Vorona
3个回答

15

旧答案仍然有效。 不过,一种解决方法是使用类似https://hub.docker.com/r/marcnuri/port-forward这样的东西。

kubectl run --env REMOTE_HOST=your.service.com --env REMOTE_PORT=8080 --env LOCAL_PORT=8080 --port 8080 --image marcnuri/port-forward test-port-forward

在集群上运行它,然后进行端口转发。

kubectl port-forward test-port-forward 8080:8080


但是 kubectl 必须在远程主机或本地运行吗? - Matteo

7
简短回答,不行。

In OpenSSH, local port forwarding is configured using the -L option:

   ssh -L 80:intra.example.com:80 gw.example.com

This example opens a connection to the gw.example.com jump server, and forwards any connection to port 80 on the local machine to port 80 on intra.example.com.

By default, anyone (even on different machines) can connect to the specified port on the SSH client machine. However, this can be restricted to programs on the same host by supplying a bind address:

   ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com

您可以在此处阅读文档

Kubernetes中的端口转发仅适用于集群内部,您可以将命中指定端口的流量转发到DeploymentServicePod

kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]

--address 标志用于指定监听什么地址,0.0.0.0 表示监听所有地址,而 localhost 是主机名,你可以设置一个 IP 地址来进行监听。相关文档请参见此处,你也可以阅读使用端口转发访问集群中的应用程序


6

如果您在互联网上有一台SSH服务器,则可以使用一个解决方法:从您的Pod SSH到您的服务器,并进行反向端口转发:

# Suppose a web console is being served at 
# http://my-service-8f6717ab-e.default:8888/
# inside your cluster:

kubectl exec -it my-job-f523b248-7htj6 -- ssh -R8888:my-service-8f6717ab-e.default:8888 user@34.23.1.2

然后,您可以从Kubernetes外部连接到其中的服务。如果SSH服务器不在您的本地计算机上,则可以使用常规端口转发从本地计算机向其进行SSH连接:

me@my-macbook-pro:$ ssh -L8888:localhost:8888 user@34.23.1.2

然后将浏览器指向 http://localhost:8888/


我没有尝试过,但这是一个好主意。 - Ahmad Asjad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接