跨主機網絡overlay和macvlan模型


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 網絡之間是隔離的     即便是通過 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 和端口映射就能與外網直接通信(只要有網關),在網絡上與其他獨立主機沒有區別

          

 

用 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 口上

    

   

   不同 macvlan 網絡不能在二層上通信    在三層上可以通過網關將 macvlan 連通

   設置三層網關連通方式:

      1.將 一台Host 配置成一個虛擬路由器並且設置網關IP

      2.在路由器上設置iptables規則轉發 VLAN10 和 VLAN20 的流量

    

 

   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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM