跨主机网络overlay和macvlan模型

时间:2023-03-08 19:50:06

overlay网络模型

无论是openstack还是docker都是先创建一个网络然后再创建虚机或者容器  并把创建的虚机或者容器运行在此网络中

Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络.VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性.

Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息  包括 Network、Endpoint、IP 等.Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件

docker network inspect 中的   "IPAM"   是指 IP Address Managemen

docker 会创建一个 bridge 网络 “docker_gwbridge”,为所有连接到 overlay 网络的容器提供访问外网的能力

overlay 网络的具体实现:

1.docker 会为每个 overlay 网络创建一个独立的 network namespace,其中会有一个 linux bridge br0,endpoint 还是由 veth pair 实现,一端连接到容器中(即 eth0),另一端连接到 namespace 的 br0 上

2.br0 除了连接所有的 endpoint,还会连接一个 vxlan 设备,用于与其他 host 建立 vxlan tunnel。容器之间的数据就是通过这个 tunnel 通信的

跨主机网络overlay和macvlan模型

不同 overlay 网络之间是隔离的     即便是通过 docker_gwbridge 也不能通信

如果需要通信  需要把其它overlay网络的容器添加一个网卡连接到overlay网络中     docker network connect overlay1  容器2  表示给容器2添加一个到overlay1的连接

overlay IPAM   docker 默认为 overlay 网络分配 24 位掩码的子网(10.0.X.0/24)所有主机共享这个 subnet,容器启动时会顺序从此空间分配 IP

MACVLAN网络模型

macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术.

macvlan 的最大优点是性能极好,相比其他实现.macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络

容器的 eth0 就是 enp0s9 通过 macvlan 虚拟出来的 interface.容器的 interface 直接与主机的网卡连接,这种方案使得容器无需通过 NAT 和端口映射就能与外网直接通信(只要有网关),在网络上与其他独立主机没有区别

跨主机网络overlay和macvlan模型

用 sub-interface 实现多 macvlan 网络

     macvlan 会独占主机的网卡,也就是说一个网卡只能创建一个 macvlan 网络.但主机的网卡数量是有限的,如何支持更多的 macvlan 网络

macvlan 不仅可以连接到 interface(如 enp0s9)     也可以连接到 sub-interface(如 enp0s9.xxx)

VLAN 是现代网络常用的网络虚拟化技术,它可以将物理的二层网络划分成多达 4094 个逻辑网络,这些逻辑网络在二层上是隔离的,每个逻辑网络(即 VLAN)由 VLAN ID 区分,VLAN ID 的取值为 1-4094

Linux 的网卡也能支持 VLAN,同一个 interface 可以收发多个 VLAN 的数据包,不过前提是要创建 VLAN 的 sub-interface

如希望 enp0s9 同时支持 VLAN10 和 VLAN20,则需创建 sub-interface enp0s9.10 和 enp0s9.20

在交换机上,如果某个 port 只能收发单个 VLAN 的数据,该 port 为 Access 模式.  如果支持多 VLAN,则为 Trunk 模式.enp0s9 要接在交换机的 trunk 口上

跨主机网络overlay和macvlan模型

不同 macvlan 网络不能在二层上通信    在三层上可以通过网关将 macvlan 连通

设置三层网关连通方式:

1.将 一台Host 配置成一个虚拟路由器并且设置网关IP

2.在路由器上设置iptables规则转发 VLAN10 和 VLAN20 的流量

跨主机网络overlay和macvlan模型

1.因为 bbox1 与 bbox4 在不同的 IP 网段,跟据 bbox1 的路由表   数据包将发送到网关 172.16.10.1 eth2.10

2.路由器从 eth2.10 收到数据包,发现目的地址是 172.16.20.11,查看自己的路由表:于是将数据包从 eth2.20 转发出去

3.通过 ARP 记录的信息,路由器能够得知 172.16.20.11 在 host2 上,于是将数据包发送给 host2

4.host2 根据目的地址和 VLAN 信息将数据包发送给 bbox4

macvlan 网络的连通和隔离完全依赖 VLAN、IP subnet 和路由,docker 本身不做任何限制,用户可以像管理传统 VLAN 网络那样管理 macvlan

跨主机网络overlay和macvlan模型

跨主机网络overlay和macvlan模型