Docker常见的跨主机互联的几种方式
- macvlan
- overlay+consul
- flannel+etcd
macvlan
- 优点:docker原生支持,配置简单,无需插件;适合小规模的docker环境,因为需要手动配置IP
- 缺点:需要手动配置IP;容器和宿主机之间无法通信,无法连接外网
在运行启动Docker容器时,手动配置相同网段IP,通过macvlan可以实现主机互联
overlay+consul
- 创建容器之后会生成一个
eth0
和一个eth1
,两个容器之间的eth0
会通过vxlan
封装数据(形成隧道模式)进行通信 - 宿主机和
eth1
生成一个对应的网卡,这个网卡可用于对外通信,但需要开启net_ip_forward=1
形成路由转发到ens33
- 通过
ens33
访问互联网
主要通过consule服务将docker damon守护进程连接起来,进行统一分配IP,避免端口冲突和服务器数量多需手动的问题
etcd
- docker damon守护进程创建容器生成eth0
- 宿主机会生成flannel.1和flannel守护进程,对外通信eth0需要去往flannel.1
- flannel启动时会连接etcd集群,获取网络配置信息,从而得知自身需要配置的网段
- flannel.1通过路由转换去往ens33
- 通过ens33联网
etcd+flannel
- 生成C2容器自身会有
IP地址
和mac地址
,跨主机通信会携带自身IP
和mac地址
以及对端IP地址
,但是没有对端mac地址
,宿主机也会生成一块对应网卡 - 通过
ARP协议
映射到宿主机的docker0
,但此时依旧没有对端mac地址
- 通过
docker0
去往flannel.1
进行第一次vxlan
封装得到对端mac地址
并加上报文头部【原因:flannel
启动时会连接etcd集群
,获取网络信息,从而能获取对端网段
以及mac地址
,通过守护进程的flanneld
将网段信息给到flannel.1
】 - 因为和对端不在同一个网段,此时无法直接使用
flannel.1
和对端通信,此时需要去往ens33
进行vxlan
第二次封装加上报文头部 - 通过
ens33
去往对端,并逐层解封装【ens33–>flannel.1–>docker0–>对端容器】