kubectl 端口转发到另一个端点

问题描述 投票:0回答:4

是否有与

kubectl
对应的命令为:

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

kubectl
port-forward
您也可以指定
--address
但这严格需要 IP 地址。

kubernetes portforwarding tunnel
4个回答
18
投票

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


7
投票

简短回答,否。

OpenSSH 中,使用

-L
选项配置本地端口转发:

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

此示例打开与

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

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

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

您可以在此处阅读文档。

Kubernetes 中的

port-forward
仅在集群内工作,您可以将到达指定端口的流量转发到
Deployment
Service
Pod

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 [email protected]

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

me@my-macbook-pro:$ ssh -L8888:localhost:8888 [email protected]

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


0
投票

我们可以使用

socat
将数据中继到RDS实例。

在 EKS pod 中,运行以下命令:

socat -d -d -d TCP4-LISTEN:8888,reuseaddr,fork,max-children=150 TCP4:<rds-dns>.rds.amazonaws.com:5432 & tail -f /dev/null;

然后使用

port-forward

kubectl port-forward <pod-name> 8888:8888

然后您可以作为本地数据库连接到

localhost:8888

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.