不同nat设备后的网络节点如何组成一个k8s集群

freesnow 发布于 2019/02/21 12:53
阅读 1K+
收藏 0

华为云11月刊推送:DIY微信问答机器人,高性能计算代码的20个技巧!>>>

我最近碰到不同nat设备后的节点组k8s集群的问题。

我使用的环境是3个不同账号下的aliyun ECS,每个机器都有自己的外网IP,但是只有一个绑定了内网ip的内网网卡,没有外网网卡。我使用kubeadm部署的k8s集群,网络组件使用的canal,网络通信就是flannel。我修改了每台主机上的kubelet启动参数,添加了--node-ip <外网IP>参数,否则k8s系统组件都不能正常运行。之后,创建了deploy,pod可以分布到多个机器上,但是不同机器上的pod之间不能通信。

我用tcpdump抓包发现,在podA中ping podB时,在podA所在的主机上,可以抓到发往podB所在主机的内网IP的包,但是因为主机之间内网不同,所以该包并不能到达podB所在主机。所以我猜测是flanneld向etcd注册信息的时候,注册的是内网ip,但是应该注册外网IP才对。但是不知道怎么才能让flanneld正确注册。

k8s版本为1.12.2,etcd镜像版本为3.2.24,flannel镜像版本为v0.9.1

请问有没有哪位大神可以提供一下思路

加载中
0
regend
regend

如果每个账号下有多个ecs,可以用faderation  联邦集群

freesnow
freesnow
回复 @regend : 防火墙都关了。我昨天在flannel的文档里看到新版本支持一个flannel.alpha.coreos.com/public-ip-overwrite的注解,用于多个nat设备后的节点之间组网,使用之后,flannel就可以正常通信了。谢谢你的回答了
regend
regend
回复 @freesnow : master和node上的防火墙都关了吗,看看有没有pod运行失败的~照理应该是正常的
freesnow
freesnow
回复 @regend : kubectl get node -o wide看到的EXTERNAL-IP是<none>,worker节点的INTERNAL-IP的值是外网IP,master节点的INTERNAL-IP是<none>。内部IP之所以是外网IP,是因为我给kubelet的启动参数加了--node-ip指定了外网ip
freesnow
freesnow
回复 @regend : 在pod里ping不通DNS的service,但是可以ping通pod所在node上的coredns的pod
regend
regend
回复 @freesnow : 然后再看看kubectl get node里 对应的nodename对应的host是不是外网地址
下一页
返回顶部
顶部