zoukankan      html  css  js  c++  java
  • macvlan 网络隔离和连通

    上一节我们创建了两个 macvlan 并部署了容器,网络结构如下:

    本节验证 macvlan 之间的连通性。

    bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4。即:同一 macvlan 网络能通信。

    bbox1 无法 ping 通 bbox2 和 bbox4。即:不同 macvlan 网络之间不能通信。但更准确的说法应该是:不同 macvlan 网络不能 在二层上 通信。在三层上可以通过网关将 macvlan 连通,下面我们就启用网关。

    我们会将 Host 192.168.56.101 配置成一个虚拟路由器,设置网关并转发 VLAN10 和 VLAN20 的流量。当然也可以使用物理路由器达到同样的效果。首先确保操作系统 IP Forwarding 已经启用。

    输出为 1 则表示启用,如果为 0 可通过如下命令启用:

    sysctl -w net.ipv4.ip_forward=1

    在 /etc/network/interfaces 中配置 vlan sub-interface:

    auto eth2

    iface eth2 inet manual

    auto eth2.10

    iface eth2.10 inet manual

    vlan-raw-device eth2

    auto eth2.20

    iface eth2.20 inet manual

    vlan-raw-device eth2


    启用 sub-interface:

    ifup eth2.10

    ifup eth2.20


    将网关 IP 配置到 sub-interface:

    ifconfig eth2.10 172.16.10.1 netmask 255.255.255.0 up

    ifconfig eth2.20 172.16.20.1 netmask 255.255.255.0 up


    添加 iptables 规则,转发不同 VLAN 的数据包。

    iptables -t nat -A POSTROUTING -o eth2.10 -j MASQUERADE

    iptables -t nat -A POSTROUTING -o eth2.20 -j MASQUERADE


    iptables -A FORWARD -i eth2.10 -o eth2.20 -m state --state RELATED,ESTABLISHED -j ACCEPT

    iptables -A FORWARD -i eth2.20 -o eth2.10 -m state --state RELATED,ESTABLISHED -j ACCEPT


    iptables -A FORWARD -i eth2.10 -o eth2.20 -j ACCEPT

    iptables -A FORWARD -i eth2.20 -o eth2.10 -j ACCEPT


    当前网络拓扑如下图所示:

    现在 host1 上位于 mac_net10 的 bbox1 已经可以与 host2 上位于 mac_net20 的 bbox4 通信了。

    下面我们分析数据包是如何从 bbox1(172.16.10.10)到达 bbox4(172.16.20.11)的。整个过程如下图所示:

    ① 因为 bbox1 与 bbox4 在不同的 IP 网段,跟据 bbox1 的路由表:

    数据包将发送到网关 172.16.10.1。

    ② 路由器从 eth2.10 收到数据包,发现目的地址是 172.16.20.11,查看自己的路由表:

    于是将数据包从 eth2.20 转发出去。

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

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

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

    至此,macvlan 就讨论完了,恭喜大家又学完一个网络方案,下一节我们开始学习 flannel。

    二维码+指纹.png

  • 相关阅读:
    C# Unity依赖注入
    Spring学习总结
    .Net 上传文件和下载文件
    JavaWeb学习篇--Filter过滤器
    Struts2入门教程
    Ceph 时钟偏移问题 clock skew detected 解决方案--- 部署内网NTP服务
    Erasure Coding(纠删码)深入分析 转
    s3cmd : Add a config parameter to enable path-style bucket access 当ceph rgw使用域名时,需要支持 path-style bucket特性
    ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常
    直播流怎么存储在Ceph对象存储上? Linux内存文件系统tmpfs(/dev/shm) 的应用
  • 原文地址:https://www.cnblogs.com/CloudMan6/p/7400580.html
Copyright © 2011-2022 走看看