容器網絡方案介紹及對比


  • 容器網絡方案分類:
  • 容器網絡庫及容器網絡模型(Container Network Model):
  • 網絡方案介紹:
  • 網絡方案對比
  • 兄弟公司底層網絡技術選型:
  • 容器網絡方案分類:

    按照來源分類:

    1、 docker原生網絡方案

    2、 第三方網絡方案

     

    按照方案是否提供跨主機網絡:

    1、 單主機網絡方案

    2、 跨主機網絡方案

    (image

    容器網絡庫及容器網絡模型(Container Network Model):

    image

    libnetwork 是 docker 容器網絡庫,最核心的內容是其定義的 Container Network Model (CNM),這個模型對容器網絡進行了抽象,由以下三類組件組成:

    1、 Sandbox

    容器網絡棧。Linux network namespace是標准實現。包括容器interface、路由表、dns設置。

    2、 Network

    常見的實現,比如linux bridge。

    3、 Endpoint

    作用是聯通sandbox和network。

    image

    例子:

    image

    1、 sandbox,由 Network Namespace 實現,每個容器有自己的network namespace

    2、 network,由linux bridge docker0和br-5d863e9f78b6實現。

    3、 endppont,由三對veth pair實現。

     

    網絡方案介紹:

    Bridge

    1、 linux bridge,linux Bridge(網橋)是工作於二層的虛擬網絡設備,功能類似於物理的交換機。

    2、 veth pair,vth pair 是一對虛擬網卡,從一張veth網卡發出的數據包可以直接到達它的peer veth,兩者之間存在着虛擬鏈路。

    3、 特點:

    1) container獨立的network namespace,用veth pair連接到host上的linux bridge

    2) 各bridge網絡彼此獨立,不同網絡不聯通,因此同一host上的不同網絡下的container不通,不同host上的container更不通。加上路由是否就可以通了?

    Docker Overlay

    image

     特點

    1)各container獨立的network namespace

    2)各host上新起同樣的network namespace,里面生成同樣的overlay bridge

    3)container通過veth pair連到各host上的overlay bridge

    4)各host上的overlay bridge通過vxlan設備建立overlay 網絡

    5)為了使各container能訪問外網,overlay網絡方案同時在各主機上創建了bridge用於各container訪問外部網絡

    6)使用consul存儲狀態數據

    7)提供dns服務

     

    Macvlan

    macvlan 本身是 linxu kernel 模塊,其功能是允許在同一個物理網卡上配置多個 MAC 地址,即多個 interface,每個 interface 可以配置自己的 IP。macvlan 本質上是一種網卡虛擬化技術,Docker 用 macvlan 實現容器網絡就不奇怪了。

    image

    1、網卡虛擬化技術,允許一塊網卡配置多個mac地址,即多個interface

    2、本質還是單主機網絡。需要人工在各host上創建network

    3、同時在使用的時候,手動為各container分配靜態ip地址,且要避免ip沖突

    4、不提供dns服務

    5、獨占host網卡。為避免這種狀況,使用網卡虛擬化技術,將一塊網卡上配置上多個sub-interface

    6、需要真實存在的網關

     

    Flannel

    本質上是把docker默認的相互隔離的docker0網絡連起來組成了一個更大的網絡,實現了跨主機通信,所以就失去了網絡隔離性。

    flannel 沒有創建新的 docker 網絡,而是直接使用默認的 bridge 網絡。同一主機的容器通過 docker0 連接,跨主機流量通過 flannel.1 轉發。

    overlay backend方案:

    1、各主機上的interface flanne.1

    2、etcd管理各主機上的subnet

    3、不提供dns服務

    Vxlan backend方案:

    1、通過vxlan封裝解決不同host上的網絡聯通

    host-gw backend方案:

    1、通過路由表的方式解決聯通性

    image

    Weave

    weave 是 Weaveworks 開發的容器網絡解決方案。weave 創建的虛擬網絡可以將部署在多個主機上的容器連接起來。對容器來說,weave 就像一個巨大的以太網交換機,所有容器都被接入這個交換機,容器可以直接通信,無需 NAT 和端口映射。除此之外,weave 的 DNS 模塊使容器可以通過 hostname 訪問。

    weave 運行了三個容器:

    weave 是主程序,負責建立 weave 網絡,收發數據 ,提供 DNS 服務等。

    weaveplugin 是 libnetwork CNM driver,實現 Docker 網絡。

    weaveproxy 提供 Docker 命令的代理服務,當用戶運行 Docker CLI 創建容器時,它會自動將容器添加到 weave 網絡。

    1、首先要將不同node加入同一個weave網絡

    2、bridge + open vswtich,分工不同,bridge負責把容器接入weave網絡,open vswitch負責在主機間的vxlan數據轉發。

    3、bridge負責將docker網絡接入weave網絡,open vswitch負責vxlan隧道收發數據

    4、weave網絡默認使用一個大subnet

    image

    Calico

    Calico 是一個純三層的虛擬網絡方案,Calico 為每個容器分配一個 IP,每個 host 都是 router,把不同 host 的容器連接起來。與 VxLAN 不同的是,Calico 不對數據包做額外封裝,不需要 NAT 和端口映射,擴展性和性能都很好。

    1、三層網絡虛擬方案

    2、實現方式的主要技術是路由表配置,需要etcd

    3、可以使用network policy

    image

    網絡方案對比

    網絡模型

    跨主機網絡意味着將不同主機上的容器用同一個虛擬網絡連接起來。這個虛擬網絡的拓撲結構和實現技術就是網絡模型。

    Docker overlay 如名稱所示,是 overlay 網絡,建立主機間 VxLAN 隧道,原始數據包在發送端被封裝成 VxLAN 數據包,到達目的后在接收端解包。

    Macvlan 網絡在二層上通過 VLAN 連接容器,在三層上依賴外部網關連接不同 macvlan。數據包直接發送,不需要封裝,屬於 underlay 網絡。

    Flannel 我們討論了兩種 backend:vxlan 和 host-gw。vxlan 與 Docker overlay 類似,屬於 overlay 網絡。host-gw 將主機作為網關,依賴三層 IP 轉發,不需要像 vxlan 那樣對包進行封裝,屬於 underlay 網絡。

    Weave 是 VxLAN 實現,屬於 overlay 網絡。

    各方案的網絡模型描述如下:

     
    Docker Overlay
    Macvlan
    Flannel vxlan
    Flannel host-gw
    weave
    Calico
    網絡模型 Overlay:VxLAN Underlay Overlay:VxLAN Underlay:純三層 Overlay:VxLAN Unerlay:純三層

     

    Distributed Store

    Docker Overlay、Flannel 和 Calico 都需要 etcd 或 consul。Macvlan 是簡單的 local 網絡,不需要保存和共享網絡信息。Weave 自己負責在主機間交換網絡配置信息,也不需要 Distributed Store。

     

     
    Docker Overlay
    Macvlan
    Flannel vxlan
    Flannel host-gw
    weave
    Calico

    Distributed Store

    Yes No Yes Yes No Yes

     

    IPAM

    Docker Overlay 網絡中所有主機共享同一個 subnet,容器啟動時會順序分配 IP,可以通過 --subnet 定制此 IP 空間。

    Macvlan 需要用戶自己管理 subnet,為容器分配 IP,不同 subnet 通信依賴外部網關。

    Flannel 為每個主機自動分配獨立的 subnet,用戶只需要指定一個大的 IP 池。不同 subnet 之間的路由信息也由 Flannel 自動生成和配置。

    Weave 的默認配置下所有容器使用 10.32.0.0/12 subnet,如果此地址空間與現有 IP 沖突,可以通過 --ipalloc-range 分配特定的 subnet。

    Calico 從 IP Pool(可定制)中為每個主機分配自己的 subnet。

     

     
    Docker Overlay
    Macvlan
    Flannel vxlan
    Flannel host-gw
    weave
    Calico
    IPAM 單一大subnet 自定義 每個host一個subnet 每個host一個subnet 單一大subnet 每個host一個subnet

     

     

    連通與隔離

    同一 Docker Overlay 網絡中的容器可以通信,但不同網絡之間無法通信,要實現跨網絡訪問,只有將容器加入多個網絡。與外網通信可以通過 docker_gwbridge 網絡。

    Macvlan 網絡的連通或隔離完全取決於二層 VLAN 和三層路由。

    不同 Flannel 網絡中的容器直接就可以通信,沒有提供隔離。與外網通信可以通過 bridge 網絡。

    Weave 網絡默認配置下所有容器在一個大的 subnet 中,可以自由通信,如果要實現隔離,需要為容器指定不同的 subnet 或 IP。與外網通信的方案是將主機加入到 weave 網絡,並把主機當作網關。

    Calico 默認配置下只允許位於同一網絡中的容器之間通信,但通過其強大的 Policy 能夠實現幾乎任意場景的訪問控制。

    性能

    性能測試是一個非常嚴謹和復雜的工程,這里我們只嘗試從技術方案的原理上比較各方案的性能。

    最朴素的判斷是:Underlay 網絡性能優於 Overlay 網絡

    Overlay 網絡利用隧道技術,將數據包封裝到 UDP 中進行傳輸。因為涉及數據包的封裝和解封,存在額外的 CPU 和網絡開銷。雖然幾乎所有 Overlay 網絡方案底層都采用 Linux kernel 的 vxlan 模塊,這樣可以盡量減少開銷,但這個開銷與 Underlay 網絡相比還是存在的。所以 Macvlan、Flannel host-gw、Calico 的性能會優於 Docker overlay、Flannel vxlan 和 Weave。

    Overlay 較 Underlay 可以支持更多的二層網段,能更好地利用已有網絡,以及有避免物理交換機 MAC 表耗盡等優勢,所以在方案選型的時候需要綜合考慮。

     

    總結起來,各網絡方案的重點區別在於:

    1、 是用overlay網絡技術聯通各容器網絡,還是純unerlay技術+路由

    2、 再就是overlay技術網絡之間的差別,以及各undeylay技術方案之間的差別


    兄弟公司底層網絡技術選型:

    1、兄弟公司1:calico

    2、兄弟公司2:open shiftsdn(open shift定制的SDN網絡方案,可類比waeve)


    calico於waeve對比:

    1)技術復雜度:calico < waeve,calico主要基於簡單的路由技術,waeve主要基於復雜的SDN技術。

    2)性能:calico > waeve,calico不需要對數據包進行二次封裝解封,waeve需要對數據包進行二次封裝解封。

    3)擴展性:calico < waeve,waeve屬於overlay網絡,可以支持更多的網段。


    從技術復雜度和性能方面看,calico均優於waeve。從使用場景看,容器雲平台只限於內部使用,不考慮接入外部用戶,隔離及擴展性不是重點,與兄弟公司1相似。因此,底層網絡方案建議采用calico。


    免責聲明!

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



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