5、docker的网络模式

注明:本文为转载,大部分内容源于 https://www.cnblogs.com/yy-cxd/p/6553624.html

单机内的多容器通讯

1、Bridge模式(默认)

        特点:容器中有独立的网卡,IP,端口范围

        eth0(宿主机) 通过转发的方式 将数据发 docker0 虚拟网卡----docker实际是在iptables做了DNAT规则

        eth0(容器) 通过桥接的方式 接收docker0 发送来的数据

2、Host模式

        特点:每个容器不会有独立的网卡,其IP、端口范围与宿主机共享;文件系统、进程列表等还是和宿主机隔离

        演示:docker run -tid --net=host --name docker_host1 ubuntu-base:v3

3、Container模式

        特点:新创建的容器与一个已存在的容器共享一个网卡、而不是与宿主机共享;

        演示:

        #docker run -tid --net=container:docker_bri1 --name docker_con1 ubuntu-base:v3

4、none模式

        特点:Docker容器拥有自己的网卡,但不会进行配置。需要用户自己进入容器手动进行配置;

        演示:

        docker run -tid --net=host --name docker_host1 ubuntu-base:v3


跨主机间的多容器通讯

1、直接路由(默认)

        特点:主机中的容器使用了Bridge模式;主机间的通讯宿主机eth0网卡,以switch方式进行数据传送

2、Pipwork(桥接的方式)

        特点:每个容器的IP与宿主机同网段,通过局域网(LAN)的方式进行不同主机间的通讯。

        介绍:

        Pipework是一个简单易用的Docker容器网络配置工具。由200多行shell脚本实现。通过使用ip、brctl、ovs-vsctl等命令来为Docker容器配置自定义的网桥、网卡、路由等。

        使用新建的bri0网桥代替缺省的docker0网桥

        bri0网桥与缺省的docker0网桥的区别:bri0和主机eth0之间是veth pair

3、Flannel(隧道的方式) 参考资料:http://dockone.io/article/618

        特点:Flannel为主机分配网段、etcd保存集群中的路由表(网段与宿主机IP关系);数据传输使用UDP协议,数据包的目标IP为目标宿主机IP。

        介绍:Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。

        过程:每个主机上安装并运行etcd和flannel;

        在etcd中规划配置所有主机的docker0子网范围;

        每个主机上的flanneld根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;

        当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP);

        将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装;

        由于目的IP是宿主机IP,因此路由是可达的;

        VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。

你可能感兴趣的:(5、docker的网络模式)