flannel + etcd + docker 环境中双网卡问题

总所周知,跨主机的docker网络一直需要借助第三方软件来实现(后续docker也许会出自己的,但是市面上的很多第三方软件已经很成熟了,例如openvswitch等等)。本文介绍使用flannel过程中遇到的一个坑。


场景再现:

A\B\C三台主机组成集群,A是master(同时自己也是slave),拥有双网卡(网卡nic1拥有公网IP,网卡nic2拥有内网IP). B\C都是单网卡机器,仅仅拥有内网IP。

当配置好docker + flannel + etcd 集群后,B\C 主机上的容器可以互通。但是A上的容器不能与 B\C互通。


排查:

通过抓包发现如下细节:

1. A的物理网卡可以发送ping包出去

2. B的flannel0接收并回复了ping包

3. B的物理网卡没有回复ping包


综上: 问题出在flannel0 -> 物理网卡 这一段。根据flannel的原理分析,这块流程需要跟etcd交互。

初步把问题定位在etcd数据库。

检查etcd的数据库:

发现A的flannel对应的数据库配置中public ip 对应的是公网IP,而正常应该是内网IP

手工修改后ABC可以互通。

后查阅资料,发现flannel如果运行在多网卡环境中,默认会吧拥有default route的IP当作public IP.

为了指定内网IP为public IP , 需要修改flannel的配置文件/etc/sysconfig/flanneld:

iface=eth1


你可能感兴趣的:(kubernetes,docker)