一、环境介绍

图片.png

二、环境搭建

        环境搭建这里就不再重复了,请大家参考上一篇文章!

        https://blog.51cto.com/hostman/2103503

        这里我们从配置flannel信息到数据库中开始

        创建一个文件flannel-config.json,写入如下内容

cat >>flannel-config.json<<EOF

{

  "Network": "10.10.0.0/16",

  "SubnetLen": 24,

  "Backend": {

    "Type": "vxlan"

  }

}

EOF

Network 定义该网络的 IP 池为 10.10.0.0/16。

SubnetLen 指定每个主机分配到的 subnet 大小为 24 位,即10.10.X.0/24。

Backend 为通信类型。 vxlan,即主机间通过 vxlan 通信,后面还会讨论host-gw。

etcdctl --endpoints=192.168.56.131:2379 set /docker-test/network/config < flannel-config.json

图片.png

docker01和docker02主机上启动flannel网络

flanneld -etcd-endpoints=http://192.168.56.131:2379 -iface=ens33 -etcd-prefix=/docker-test/network

这里的终端窗口不要关闭

三、当前网络环境

1、安装完成之后的网络结构

图片.png

图片.png

docker01主机新增一个10.10.10.0网段的网卡flannel.1

docker02主机新增一个10.10.58.0网段的网卡flannel.1

图片.png

可以看到没有netns,由以上信息可以得到,flannel目前是虚拟网卡

可以看到我们现在只是做到了【安装etcd--安装flannel--flannel关联etcd】,但是docker主机并没有关联flannel网络,那么进行如下操作:

图片.png

在docker daemon中指定flannel_subnet网段和flannel_mtu最大传输单元(使用flannel网络的docker主机都需要配置)

--bip            --mtu

docker01主机

图片.png

docker02主机

图片.png

图片.png

查看docker主机当前网络情况

图片.png

图片.png

可以看到,docker0默认的桥接网卡的地址是我们在docker daemon中配置的bip的地址

当前网络结构如下:

图片.png

四、创建flannel驱动的网络在容器中,容器排版如下:

图片.png

docker run -itd --name xbox1 busybox

docker run -itd --name xbox2 busybox

图片.png

docker run -itd --name xbox3 busybox

docker run -itd --name xbox4 busybox

图片.png

五、网络分析(container--host)以docker01为例

1、container info

    docker exec xbox1 ip link show

    docker exec xbox1 ip addr show

    docker exec xbox1 ip route show

图片.png

可以发现我们的容器中有lo口和另一个网络端口,flannel网络只会生成一个网卡

2、host info

图片.png

图片.png

图片.png

容器中:5: eth0@if6    主机中:6: vetha71e807@if5    是一对vnet_pair,并且桥接到了docker0网桥

图片.png

可以和外网通信,traceroute可以看到10.10.10.1跳转到192.168.56.2

图片.png

同主机通信,直接访问

通讯结构如下

图片.png

跨主机通信,大家动手测试!