docker網絡--理解linux底層實現機制、docker網絡模式

1. Linux網絡基礎

Linux內核具有非常成熟和高性能的TCP / IP堆棧實現。Docker網絡使用linux內核的網絡堆棧作爲低級原語來創建高級網絡驅動程序。簡而言之,Docker網絡就是 Linux網絡。

1.1 Linux bridge

Linux的橋是Linux內核模擬的二層網橋。功能是根據MAC地址學習並轉發流量。
Linux bridge已在許多Docker網絡驅動程序中廣泛使用。Docker bridge網絡驅動 是Linux bridge的更高級別的實現。

1.2 Linux network namespace

Linux 網絡名稱空間是內核中的隔離網絡堆棧,具有自己的接口,路由和防火牆規則。被用於容器和Linux的安全性方面,用於隔離容器。

linux network namespace可確保同一主機上的兩個容器無法相互通信,甚至不能與主機本身進行通信,除非配置爲通過Docker網絡進行通信。

通常,CNM網絡驅動程序爲每個容器實現單獨的名稱空間。但是,容器可以共享相同的網絡名稱空間,甚至可以是主機的網絡名稱空間的一部分。

主機網絡名稱空間包含主機接口和主機路由表。

1.3 veth(虛擬以太網設備)

Linux VETH(虛擬以太網設備)是充當兩個網絡命名空間之間的連接線。veth是全雙工鏈接,在每個名稱空間中都有一個接口。一個接口中的流量被引向另一接口。

創建Docker網絡時,Docker網絡驅動程序利用veth在名稱空間之間提供顯式連接。

1.4 iptables

iptables是 Linux 本機數據包過濾系統,自2.4版以來已成爲Linux內核的一部分。它是功能豐富的L3 / L4防火牆,可爲包標記,僞裝和丟棄提供規則鏈。

在Docker網絡驅動程序中,iptables廣泛地用於分割網絡流量,提供主機端口映射以及標記流量以進行負載平衡決策。

2. docker網絡模式

網絡驅動 描述
host模式 通過host驅動程序,容器可以使用主機的網絡堆棧。沒有名稱空間分隔,並且容器上的主機可以直接使用主機上的所有接口。
bridge模式 bridge驅動程序使用Linux bridge。默認情況下,網橋上的容器可以相互通信。也可以通過bridge驅動程序配置對容器的外部訪問。
overlay模式 overlay驅動程序創建一個支持多主機網絡開箱即用的overlay網絡。它結合使用了本地Linux brodge和VXLAN,以覆蓋物理網絡基礎結構上的容器到容器通信。
MACVLAN模式 該macvlan驅動程序使用Linux MACVLAN橋接模式在容器接口和父主機接口(或子接口)之間建立連接。它可用於向可在物理網絡上路由的容器提供IP地址。另外,VLAN可以中繼到macvlan驅動程序以強制執行第2層容器分段。
none模式 none驅動程序提供了一個容器,擁有自己的網絡堆棧和網絡命名空間。如果沒有其他配置,容器將與主機網絡堆棧完全隔離。

2.1 Host 模式

Host 模式並沒有爲容器創建一個隔離的網絡環境。而之所以稱之爲host模式,是因爲該模式下的 Docker 容器會和 host 宿主機共享同一個網絡 namespace,故 Docker Container可以和宿主機一樣,使用宿主機的eth0,實現和外界的通信。換言之,Docker Container的 IP 地址即爲宿主機 eth0 的 IP 地址。其特點包括:

這種模式下的容器沒有隔離的 network namespace
容器的 IP 地址同 Docker host 的 IP 地址
需要注意容器中服務的端口號不能與 Docker host 上已經使用的端口號相沖突
host 模式能夠和其它模式共存
在這裏插入圖片描述

2.2 Bridge模式

Docker 容器默認使用 bridge 模式的網絡。其特點如下:

  • 使用一個 linux bridge,默認爲 docker0
  • 使用 veth 對,一頭在容器的網絡 namespace 中,一頭在 docker0 上
  • 該模式下Docker Container不具有一個公有IP,因爲宿主機的IP地址與veth pair的 IP地址不在同一個網段內
  • Docker採用 NAT 方式,將容器內部的服務監聽的端口與宿主機的某一個端口port 進行“綁定”,使得宿主機以外的世界可以主動將網絡報文發送至容器內部
  • 外界訪問容器內的服務時,需要訪問宿主機的 IP 以及宿主機的端口 port
  • NAT 模式由於是在三層網絡上的實現手段,故肯定會影響網絡的傳輸效率。
  • 容器擁有獨立、隔離的網絡棧;讓容器和宿主機以外的世界通過NAT建立通信

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

2.3 overlay模式

VXLAN 是一個新興的SDN 標準,它定義了一種新的 overlay 網絡,它主要的創造者是 VMware, Cisco 和 Arista。它被設計來消除虛擬化網絡世界中的 VLAN 數目的限制。

VXLAN定義爲MAC-in-UDP封裝,它將容器第2層幀放在底層IP / UDP標頭中。

它可以由專有硬件來實現,也可以使用純軟件實現。目前比較成熟的軟件實現的 VTEP 包括:

  • 3.9 版本及以後的帶 vxlan 內核模塊的 Linux
  • Open vSwitch
  • VMware vSphere

而Docker使用linux內核的vxlan模塊創建overlay網絡。Docker overlay的datapath完全在內核空間中,這導致更少的上下文切換,更少的CPU開銷以及應用程序和物理NIC之間的低延遲。

在這裏插入圖片描述

2.4 macvlan模式

macvlan 這種技術能將 一塊物理網卡虛擬成多塊虛擬網卡。

macvlan 是 Linux kernel 支持的新特性,支持的版本有 v3.9-3.19 和 4.0+,比較穩定的版本推薦 4.0+。它一般是以內核模塊的形式存在。

macvlan 這種技術聽起來有點像 VLAN,但它們的實現機制是完全不一樣的。macvlan 子接口和原來的主接口是完全獨立的,可以單獨配置 MAC 地址和 IP 地址,而 VLAN 子接口和主接口共用相同的 MAC 地址。VLAN 用來劃分廣播域,而 macvlan 共享同一個廣播域。

通過不同的子接口,macvlan 也能做到流量的隔離。macvlan 會根據收到包的目的 MAC 地址判斷這個包需要交給哪個虛擬網卡,虛擬網卡再把包交給上層的協議棧處理

MACVLAN用例可能包括:

  • 低延遲應用
  • 網絡設計要求容器與外部主機網絡位於同一子網中,並且使用IP作爲外部主機網絡

在這裏插入圖片描述

參考:
https://success.docker.com/article/networking#linuxnetworkfundamentals

https://www.cnblogs.com/sammyliu/p/5894191.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章