Docker实现跨主机互联的方式

Docker常见的跨主机互联的几种方式

  • macvlan
  • overlay+consul
  • flannel+etcd
macvlan

macvlan

  • 优点:docker原生支持,配置简单,无需插件;适合小规模的docker环境,因为需要手动配置IP
  • 缺点:需要手动配置IP;容器和宿主机之间无法通信,无法连接外网

在运行启动Docker容器时,手动配置相同网段IP,通过macvlan可以实现主机互联

overlay+consul

overlay+consul

  • 创建容器之后会生成一个eth0和一个eth1,两个容器之间的eth0会通过vxlan封装数据(形成隧道模式)进行通信
  • 宿主机和eth1生成一个对应的网卡,这个网卡可用于对外通信,但需要开启net_ip_forward=1形成路由转发到ens33
  • 通过ens33访问互联网

主要通过consule服务将docker damon守护进程连接起来,进行统一分配IP,避免端口冲突和服务器数量多需手动的问题

etcd

etcd

  • docker damon守护进程创建容器生成eth0
  • 宿主机会生成flannel.1和flannel守护进程,对外通信eth0需要去往flannel.1
  • flannel启动时会连接etcd集群,获取网络配置信息,从而得知自身需要配置的网段
  • flannel.1通过路由转换去往ens33
  • 通过ens33联网
etcd+flannel

etcd+flannel

  • 生成C2容器自身会有IP地址mac地址,跨主机通信会携带自身IPmac地址以及对端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–>对端容器】
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值