如何使用ssh从k8s pod连接到其他计算机

如何使用ssh从k8s pod连接到其他计算机,ssh,kubernetes,google-cloud-platform,google-compute-engine,Ssh,Kubernetes,Google Cloud Platform,Google Compute Engine,编辑:在你否决投票之前,请评论你否决投票的原因。所以下次我可以提高,谢谢 我尝试从kubernetes中的pod用ssh连接到GCE中的另一个VM,主要是因为我想在这两者之间使用rsync。目前,我使用gcloud compute scp将文件复制到本地计算机,然后使用kubectl cp 我使用kubectl exec访问pod,使用ssh-keygen设置ssh,然后将rsa_id.pub复制到指定的VM到/home/user/.ssh/,但是当我尝试ssh-v时user@ip它只是说错误连

编辑:在你否决投票之前,请评论你否决投票的原因。所以下次我可以提高,谢谢

我尝试从kubernetes中的pod用ssh连接到GCE中的另一个VM,主要是因为我想在这两者之间使用rsync。目前,我使用
gcloud compute scp
将文件复制到本地计算机,然后使用
kubectl cp

我使用
kubectl exec
访问pod,使用
ssh-keygen
设置ssh,然后将rsa_id.pub复制到指定的VM到/home/user/.ssh/,但是当我尝试
ssh-v时user@ip
它只是说错误连接超时。 我尝试在POD中安装gcloud,并能够使用
gcloud compute ssh
,我还尝试了
gcloud compute config ssh
,结果是一样的

当我用自己的计算机ssh时,它工作得很好


我认为防火墙或网络配置导致了这个问题,但我不确定如何解决它。我应该使用k8s service LoadBalancer公开ssh端口,还是应该在VPC网络中编辑防火墙规则?

从Kubernetes 1.9.x版开始,自动防火墙规则已更改,以至于Kubernetes引擎群集中的工作负载无法与同一网络上但在群集中之外的其他计算引擎VM通信。此更改是出于安全原因进行的

你可以找到解决办法

首先,查找群集的网络:

gcloud container clusters describe [CLUSTER_NAME] --format=get"(network)"
然后获取用于容器的群集的IPv4 CIDR:

gcloud container clusters describe [CLUSTER_NAME] --format=get"(clusterIpv4Cidr)"
最后,以CIDR作为源范围为网络创建防火墙规则,并允许所有协议:

gcloud compute firewall-rules create "[CLUSTER_NAME]-to-all-vms-on-network" --network="[NETWORK]" --source-ranges="[CLUSTER_IPV4_CIDR]" --allow=tcp,udp,icmp,esp,ah,sctp

对于出站ssh,您不需要设置kubernetes服务,只需修复路由或防火墙,或允许出站ssh@IjazAhmadKhan我添加了防火墙规则来允许所有的入站和出站,它仍然不工作。你能ping吗it@IjazAhmadKhan我得到了它,我忘了为我的目标VM设置防火墙规则。但我如何才能投票支持你的评论。对我来说不太合适。我还尝试使用VM外部IP进行ssh,但仍然会出现超时错误。现在我认为ssh客户端可能是个问题,因为pod可以ping其他网站。