Docker網絡淺析

Docker網絡模式linux

Docker網絡架構源自一種叫做容器網絡模型(CNM)的方案,該方案是開源的而且支持插接式鏈接。Libnetwork是Docker對CNM的一種實現,提供了Docker核心網絡架構的所有功能。不一樣的驅動能夠經過插拔的方式接入Libnetwork來提供定製化的網絡拓撲。docker

爲了實現開箱即用的效果,Docker封裝了一系列本地網絡驅動(bridge驅動,overlay驅動,macvlan驅動),覆蓋了大部分常見的網絡需求,其中包括單機橋接網絡(Single-Host Bridge Network)、多機覆蓋網絡(Multi-Host Overlay),而且支持接入現有VLAN。網絡

bridge驅動

基本原理

基於Linux內核中久經考驗達15年之久的Linux Bridge技術架構

分類

項目 默認bridge網絡 用戶自定義bridge網絡
連通性 相互之間須要經過-p或者--publish選項指明開放的端口,即便是兩個容器鏈接在相同的默認bridge網絡之上 不須要-p與--publish選項,相互之間的端口所有開放
域名解析 相互之間使用名稱通訊時須要指定--link選項,這種方式已過期而且不容易調試 無需特別指定選項,可直接經過名稱與別名通訊
熱插拔 須要中止容器的執行並從新建立容器才能離開或者加入默認bridge網絡 支持隨時加入與離開某個用戶自定義bridge網絡
熱插拔 系統中只能存在一個默認網絡,牽一髮而動全身 可定義多個用戶自定義網絡,每一個可單獨配置
熱插拔 不支持經過--link選項的方式共享環境變量,更高級的共享環境變量的方式:data volume、docker-compose、docker-configs 支持經過--link選項的方式共享環境變量

使用場景

適用於測試開發或者小規模應用環境的使用ide

特色

1,須要經過端口映射的方式,創建主機到docker端口的映射來提供跨主機間容器的服務通訊
2,成熟穩定且高性能性能

macvlan驅動

基本原理

macvlan虛擬網卡技術,是linux內核再3.9版本以後提供的新特性,容許再同一個物理網卡配置多個mac地址,Macvlan容許你在主機的一個網絡接口上配置多個虛擬的網絡接口,這些網絡interface 有本身獨立的MAC地址,也能夠配置上IP地址進行通訊。Macvlan 下的虛擬機或者容器網絡和主機在同一個網段中,共享同一個廣播域。測試

分類

VEPA(Virtual Ethernet Port Aggregator)

VEPA

全部從 Macvlan 接口發出的流量,無論目的地所有都發送給父接口,即便流量的目的地是共享同一個父接口的其它 Macvlan 接口。若是想在物理交換機層面對虛擬機或容器之間的訪問流量進行優化設定,VEPA 模式將是一種比較好的選擇。優化

Bridge

Bridge
Bridge模式爲macvlan的默認使用模式。擁有相同父接口的兩塊 Macvlan 虛擬網卡是能夠直接通信的,不須要把流量經過父網卡發送到外部網絡,廣播幀將會被泛洪到鏈接在」網橋」上的全部其餘子接口和物理接口。這比較適用於讓共享同一個父接口的 Macvlan 網卡進行直接通信的場景。設計

Private

Private
此種模式至關於VEPA模式的加強模式,其徹底阻止共享同一父接口的 Macvlan 虛擬網卡之間的通信。調試

passthru

passthru
此種模式會直接把父接口和相應的MacVLAN接口捆綁在一塊兒,這種模式每一個父接口只能和一個 Macvlan 虛擬網卡接口進行捆綁,而且 Macvlan 虛擬網卡接口繼承父接口的MAC地址。此種模式的優勢是虛擬機和容器能夠更改 MAC 地址和其它一些接口參數。

使用場景

macvlan可以將容器網絡鏈接到外部系統以及物理網絡,適用於應用中已容器化的部分須要與那些運行在物理網絡和VLAN上的未容器化部分進行通訊的場景

特色

1,Linux 主機鏈接的交換機可能會限制同一個物理端口上的 MAC 地址數量。雖然你可讓網絡管理員更改這些策略,但有時這種方法是沒法實行的(好比你要去給客戶作一個快速的 PoC 演示)。
2,許多 NIC 也會對該物理網卡上的 MAC地址數量有限制。超過這個限制就會影響到系統的性能。
3,IEEE 802.11 不喜歡同一個客戶端上有多個 MAC 地址,這意味着你的 Macvlan 子接口在無線網卡或 AP 中都沒法通訊。能夠經過複雜的辦法來突破這種限制,但還有一種更簡單的辦法,那就是使用 Ipvlan,感興趣能夠本身查閱相關資料。
4,須要主機網卡開啓混雜模式,須要內核支持

overlay驅動

基本原理

Docker使用VXLAN隧道技術建立了虛擬二層覆蓋網絡。在VXLAN的設計中,容許用戶基於已經存在的三層網絡結構建立虛擬的二層網絡,VXLAN的美妙之處在於它是一種封裝技術,能使現存的路由器和網絡架構看起來就像普通的IP/UDP包同樣,而且處理起來毫無問題。

模型圖

模型圖

VTEP(VXLAN Tunnel Endpoints):vxlan 網絡的邊緣設備,用來進行 vxlan 報文的處理(封包和解包)。vtep 能夠是網絡設備(好比交換機),也能夠是一臺機器(好比虛擬化集羣中的宿主機)
VNI(VXLAN Network Identifier):VNI 是每一個 vxlan 的標識,是個 24 位整數,一共有 2^24 = 16,777,216(一千多萬),通常每一個 VNI 對應一個租戶,也就是說使用 vxlan 搭建的公有云能夠理論上能夠支撐千萬級別的租戶
Tunnel:隧道是一個邏輯上的概念,在 vxlan 模型中並無具體的物理實體想對應。隧道能夠看作是一種虛擬通道,vxlan 通訊雙方(圖中的虛擬機)認爲本身是在直接通訊,並不知道底層網絡的存在。從總體來講,每一個 vxlan 網絡像是爲通訊的虛擬機搭建了一個單獨的通訊通道,也就是隧道

vxlan 的工做模型,它建立在原來的 IP 網絡(三層)上,只要是三層可達(可以經過 IP 互相通訊)的網絡就能部署 vxlan。在每一個端點上都有一個 vtep 負責 vxlan 協議報文的封包和解包,也就是在虛擬報文上封裝 vtep 通訊的報文頭部。物理網絡上能夠建立多個 vxlan 網絡,這些 vxlan 網絡能夠認爲是一個隧道,不一樣節點的虛擬機可以經過隧道直連。每一個 vxlan 網絡由惟一的 VNI 標識,不一樣的 vxlan 能夠不相互影響。

使用場景

不改變現有網絡基礎設施的前提下,overlay的二層網絡徹底基於現有主機的三層網絡之上實現通訊,簡易實現大規模的容器應用跨主機通訊

特色

1,VXLAN可以突破VLAN的4000數量限制支持高達16M的不一樣overlay數量,並在必要時可將廣播流量轉化爲組播流量,避免廣播數據氾濫。
2,主流的容器跨節點數據傳輸和路由方案

參考文檔

https://cizixs.com/2017/09/25/vxlan-protocol-introduction/
https://blog.z0ukun.com/?p=739

相關文章
相關標籤/搜索