跨宿主机容器间的通讯macvlan overlay

跨宿主机容器间的通讯之macvlan
#macvlan类似与虚拟机的桥接网络
#创建网络(这里的网关由于我的是mac本所以是10.0.0.2,windows的是10.0.0.254)
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.2 -o parent=eth0 macvlan_1
#启动容器
10.0.0.11:
docker run -it --network macvlan_1 --ip 10.0.0.105 alpine:latest
10.0.0.12:
docker run -d -it --network macvlan_1 --ip 10.0.0.106 wordpress:latest
跨宿主机容器间的通讯之overlay
#docker03: consul存储ip地址的分配
echo "192.168.13.251  mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://192.168.13.251/file/docker_rpm.tar.gz
tar xf docker_rpm.tar.gz 
cd docker_rpm/
yum localinstall *.rpm -y
cd
wget http://192.168.13.251/file/docker_progrium_consul.tar.gz
systemctl start docker
systemctl enable docker
docker load -i docker_progrium_consul.tar.gz 
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

#docker01和02:
#11:
vim  /etc/docker/daemon.json
{
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.11:2376"
}

systemctl restart docker
#12:
vim  /etc/docker/daemon.json
{
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.12:2376"
}

systemctl restart docker
#11:
docker network create -d overlay --subnet 172.26.0.0/16 --gateway 172.26.0.1  ol1
docker run -it -d --network ol1 -p 80:80 --name wyd01 alpine_kod:v3
#12:
docker run -d -it --network ol1 --name wyd02 alpine /bin/sh
进去容器相互ping对方名字测试。ping通就行。
每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
overlay通讯原理
#发送数据包流程
容器Container1 发送数据包 到容器 Container2。

1、容器Container1会通过Container eth0 将这个数据包发送到 10.0.0.1 的网关。
2、网关将数据包发送出去后到达b20网桥。
3、b20网桥针对VXLAN设备,主要用于捕获对外的数据包通过VETP进行数据包封装。
4、封装好将VXLAN格式数据包交给eth0,通过UDP方式交给Container2的eth0。
5、Container2收到数据包后通过VETP将数据包解封装。
6、网桥通过网关将解封装的数据包转发给Container eth0,完毕通信。