一、主机网络
前面讲了容器内部网络,但是容器最终是要部署在主机上,跨主机间的网络访问又是怎么样的,跨主机网络主要有两种方案。
二、 Underlay
使用现有底层网络,为每一个容器配置可路由的网络IP。也就是说容器网络和主机网络没什么区别,主机都能识别容器ip。
2.1 部署
- 采用Linux 网桥设备(sbrctl),通过物理网络连通容器;
- 创建新的网桥设备 mydr0;
- 将主机网卡加入网桥;
- 把主机网卡的地址配置到网桥,并把默认路由规则转移到网桥mydr0;
- 启动容器;
- 创建veth对,并且把一个 peer 添加到网桥 mydr0;
- 配置容器把veth的另一个peer分配给容器网卡;
2.1 架构图
Underlay网络使用现有底层网络,为每一个容器配置可路由的网络IP。但是有一个局限性,我们知道容器会使用很多的ip,如果使用Underlay网络,会占用很多底层网络的ip,所以,使用Underlay网络需要提前合理规划ip分配。
三、Overlay
Overlay网络是通过网络封包技术实现的。
3.1 VXLAN
在每个主机上都有一个VTEP设备,用于对原始数据包的封包和解包。
VTEP设备对容器发送的原始数据包进行了以下“包装”:
- VXLAN Header
增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN网络中不同的租户。此外,还包含VXLAN
Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特)。 - UDP Header VXLAN头和原始以太帧一起作为UDP的数据。UDP头中,目的端口号(VXLAN
Port)固定为4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。 - Outer IP Header 封装外层IP头。其中,源IP地址(Outer Src.
IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。 - Outer MAC Header 封装外层以太头。其中,源MAC地址(Src. MAC
Addr.)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC
Addr.)为到达目的VTEP的路径中下一跳设备的MAC地址。
3.2 Flannel
Flannel网络插件使用的就是VXLAN技术
flanneld相当于VTEP设备,用来封包解包。