docker 网络

这里主要介绍docker官方提供的网络模型.

docker官方主要提供bridge, macvlan, ipvlan,overlay,host. 在这里说明一下,docker提供的这些网络模型都是linux内核实现的技术.docker容器是封装的自己网络命名空间实现了与宿主机网络的隔离,还有其他的命名空间,综合在一起实现了容器的封装, 而这些技术都是linux内核实现的.docker使用的网络模型首先需要Linux内核的支持才行,比如ipvlan需要内核版本4.2+才能使用.

bridge :

桥接模式,实际是在宿主机上创建了一个桥, 然后使用Linux 提供的veth-pair技术实现了docker容器与宿主机之间的通讯.veth-pair 相当于一根网线,一端连接桥,一端在docker容器的网络命名空间内(就是所见的eth0...),只要网络数据帧到达一端,另一端也就收到了.而桥又相当与一个交换机(工作在网络模型的三层ip层).

在docker 内部访问外部网络是通过宿主机防火墙的NET转发实现的,外部不可以看到docker 的IP地址. 在docker 内对外提供服务的时候只能与宿主机进行端口绑定来提供服务(需要注意,这个时候外部通过此端口到达的数据帧都不转到docker容器内,此端口被docker容器独占), 外部访问服务的时候直接访问宿主的ip:port,实现方式也是通过防火墙的NET转发.所以当你使用iptables命令查看的时候会发现多很多条规则

macvlan:

macvlan是Linux内核实现的一种网卡虚拟化技术, 能够将一张网卡虚拟出多张网卡. macvlan在Linux内核的实现中有四种通信模式,private 模式, vepa(virtual ethernet port aggregator)模式, bridge 模式, passthru 模式. 而 docker只支持 bridge 模式.

macvlan 网络会独占物理网卡, 也就是说一张物理网卡只能创建一个macvlan 网络, 如果想创建多个macvlan网络就要使用多张物理网卡. macvlan 网络也支持VLAN 子接口, 所以可以通过VLAN技术将一个网口划分出多个子网口

通过macvlan 虚拟化出的网卡会有真实的mac和ip,利于外部直接访问dockerr容器,效率高.

ipvlan:

ipvlan 和 macvlan 类似,都是从一个物理网卡上虚拟出多个虚拟网卡的技术,区别是macvlan 有自己的mac和ip, 而 ipvlan 和父接口工用mac地址, 拥有自己独立的ip

在docker 中创建ipvlan网络模型的时候,选择ipvlan_mode=l2 的时候和macvlan 一样可有自己的mac地址, 选择ipvlan_mode=l3 的时候会和父接口共享mac地址.

overlay:

overlay(多机覆盖网络) 指的是一种网络架构上叠加的虚拟化技术模式.

在docker 中用于多个机器上的docker 容器互相访问. 

使用这用技术首要条件是多个机器之间本来就可以互相访问. overlay是使用VXLAN的隧道技术, 对docker中发出的数据包进行二次封装,然后在网络中传播,到达目的地后再解包,再发送至目的地docker 容器内.在多个机器的docker内部来看就是直接连接的.

host:
host 模式非常简单,就是docker 容器使用宿主的网络命名空间,看到的也是宿主机的网络,在docker 内修改网络,宿主机也会更改.非常不安全

 

上一篇:Docker(六)--docker网络--单机与跨主机(macvlan)容器通信


下一篇:皮蛋学习日常:为Debian10的docker配置 macvlan网络并安装openwrt作为旁路由