是否有与
kubectl
对应的命令为:
ssh -L8888:rds.aws.com:5432 example.com
kubectl
有 port-forward
您也可以指定 --address
但这严格需要 IP 地址。
旧答案是有效的。 不过,解决方法是使用类似的东西 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
简短回答,否。
在 OpenSSH 中,使用
选项配置本地端口转发:
-L
ssh -L 80:intra.example.com:80 gw.example.com
此示例打开与
跳转服务器的连接,并将本地计算机上端口 80 的任何连接转发到gw.example.com
上的端口 80。intra.example.com
默认情况下,任何人(甚至在不同的计算机上)都可以连接到 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。
文档可在此处获取,您还可以阅读使用端口转发访问集群中的应用程序。
如果您在互联网上有 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/
我们可以使用
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
。