kubectl 端口转发到另一个端点

Mah*_*oni 5 portforwarding tunnel kubernetes

是否有与kubectlto对应的命令:

ssh -L8888:rds.aws.com:5432 example.com
Run Code Online (Sandbox Code Playgroud)

kubectlport-forward,你也可以指定--address但严格要求的IP地址。

Cro*_*rou 7

简短的回答,不。

OpenSSH中,本地端口转发是使用以下选项配置的 -L

   ssh -L 80:intra.example.com:80 gw.example.com
Run Code Online (Sandbox Code Playgroud)

此示例打开与跳转服务器的连接 gw.example.com ,并将任何到本地计算机上端口 80 的连接转发到 上的端口 80 intra.example.com

默认情况下,任何人(甚至在不同的计算机上)都可以连接到 SSH 客户端计算机上的指定端口。但是,可以通过提供 绑定地址将其限制为同一主机上的程序:

   ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读文档。

port-forwardKubernetes 中仅在集群内工作,您可以将到达指定端口的流量转发到DeploymentServicePod

kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]
Run Code Online (Sandbox Code Playgroud)

--addressflag 是指定要监听的内容,0.0.0.0意味着一切localhost都是名称,您可以设置它可以监听的 IP。文档可在此处获取,您还可以阅读使用端口转发访问集群中的应用程序


gio*_*gio 7

旧的答案是有效的。不过,一种解决方法是使用类似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


Thr*_*unt 6

如果您在 Internet 上有 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
Run Code Online (Sandbox Code Playgroud)

然后您可以从外部连接到 Kubernetes 内部的服务。如果 SSH 服务器不是您本地的,您可以使用普通端口转发从本地计算机通过 SSH 连接到它:

me@my-macbook-pro:$ ssh -L8888:localhost:8888 user@34.23.1.2
Run Code Online (Sandbox Code Playgroud)

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