如何从K8S Pod SSH到其他计算机

时间:2019-07-12 07:37:23

标签: ssh kubernetes google-cloud-platform google-compute-engine

编辑:在您投反对票之前,请评论您为什么投反对票。下次我可以改善,谢谢。

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

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

当我用自己的电脑SSH时,它可以正常工作

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

1 个答案:

答案 0 :(得分:0)

从Kubernetes 1.9.x版开始,自动防火墙规则已更改,以使Kubernetes Engine群集中的工作负载无法与位于同一网络但位于群集外部的其他Compute Engine VM进行通信。出于安全原因进行了此更改。

您可以找到解决方案HERE

首先,找到您群集的网络:

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