Docker 容器技術 — 容器網絡

CNI

CNI(Container Network Interface,容器網絡接口)是 Google 和 CoreOS 主導制定的容器網絡標準,它是在 RKT 網絡提議的基礎上發展起來的,綜合考慮了靈活性、擴展性、IP 分配、多網卡等因素。

CNI 旨在為容器平臺提供網絡的標準化,不同的容器平臺(e.g. Kubernetes、Mesos 和 RKT)能夠通過相同的接口調用不同的網絡組件。這個協議連接了兩個組件:

容器管理系統

網絡插件

具體的事情都是插件來實現的,包括:創建容器網絡空間(network namespace)、把網絡接口(interface)放到對應的網絡空間、給網絡接口分配 IP 等。

目前采用 CNI 提供的方案一般分為兩種

隧道方案

路由方案

具體為:Flannel,Callico,Weave 和 macvlan 網絡方案。從難易度上來講,Callico 最簡單,其次 Flannel,Weave 最復雜,從網絡技術來看,Weave 和 Flannel 都是網絡封裝隧道技術,區別在于封裝的位置在網絡設備上還是主機上。

Flannel

Flannel 是 CoreOS 提出用于解決容器集群跨主機通訊的網絡解決方案。Flannel 實質上是一種 Overlay 網絡,也就是將 TCP 數據包裝在另一種網絡包里面進行路由轉發和通信,目前已支持 UDP、VXLAN、AWS VPC、GCE 路由等數據轉發方式,其中以 VXLAN 技術最為流行,很多數據中心在考慮引入容器時,也考慮將網絡切換到 Flannel 的 VXLAN 網絡中來。

Flannel 為每個主機分配一個 Subnet,容器從此 Subnet 中分配 IP,這些 IP 可在主機間路由,容器間無需 NAT 和端口映射就可以跨主機通訊。Flannel 讓集群中不同節點主機創建容器時都具有全集群唯一虛擬 IP 地址,并連通主機節點網絡。Flannel 可為集群中所有節點重新規劃 IP 地址使用規則,從而使得不同節點上的容器能夠獲得 “同屬一個內網” 且 “不重復的” 的 IP 地址,讓不同節點上的容器能夠直接通過內網 IP 通信,網絡封裝部分對容器是不可見的。源主機服務將原本數據內容 UDP 封裝后根據自己的路由表投遞給目的節點,數據到達以后被解包,然后直接進入目的節點虛擬網卡,然后直接達到目的主機容器虛擬網卡,實現網絡通信目的。

Flannel 雖然對網絡要求較高,要引入封裝技術,轉發效率也受到影響,但是卻可以平滑過渡到 SDN 網絡,VXLAN 技術可以和 SDN 很好地結合起來,值得整個網絡實現自動化部署,智能化運維和管理,較適合于新建數據中心網絡部署。

Callico

Callico 容器網絡和其他虛擬網絡最大的不同是:它沒有采用 Overlay 網絡做報文轉發,提供了純三層網絡模型。三層通信模型表示每個容器都通過 IP 直接通信,要想路由工作能夠正常,每個容器所在的主機節點必須有某種方法知道整個集群的路由信息,Callico 采用 BGP 路由協議,使得全網所有的 Node 和網絡設備都記錄到全網路由。

然而這種方式會產生很多的無效路由,對網絡設備路由規格要求較大,整網不能有路由規格低的設備。另外,Callico 實現了從源容器經過源宿主機,經過數據中心路由,然后到達目的宿主機,最后分配到目的容器,整個過程中始終都是根據 BGP 協議進行路由轉發,并沒有進行封包,解包過程,這樣轉發效率就會快得多,這是 Callico 容器網絡的技術優勢。

Weave

Weave 實質上也是 Overlay 網絡,Weave 可以把不同主機上容器互相連接的網絡虛擬成一個類似于本地網絡的網絡,不同主機之間都使用自己的私有 IP 地址,當容器分布在多個不同的主機上時,通過 Weave 可以簡化這些容器之間的通信。

Weave 網絡中的容器使用標準的端口提供服務(e.g. MySQL 默認使用 3306),管理微服務是十分直接簡單的。每個容器都可以通過域名來與另外的容器通信,也可以直接通信而無需使用 NAT,也不需要使用端口映射或者復雜的聯接。

部署 Weave 容器網絡最大的好處是無需修改你的應用代碼。Weave 通過在容器集群的每個主機上啟動虛擬路由器,將主機作為路由器,形成互聯互通的網絡拓撲,在此基礎上,實現容器的跨主機通信。

要部署 Weave 需要確保主機 Linux 內核版本在 3.8 以上,Docker1.10 以上,主機間訪問如果有防火墻,則防火墻必須彼此放行 TCP 6783 和 UDP 6783/6784 這些端口號,這些是 Weave 控制和數據端口,主機名不能相同,Weave 要通過主機名識別子網。

Weave 網絡類似于主機 Overlay 技術,直接在主機上進行報文流量的封裝,從而實現主機到主機的跨 Underlay 三層網絡的互訪,這是和 Flannel 網絡的最大區別,Flannel 是一種網絡 Overlay 方案。

Macvlan

Macvlan 是 Linux Kernel 比較新的特性,允許在主機的一個網絡接口上配置多個虛擬的網絡接口,這些網絡 interface 有自己獨立的 MAC 地址,也可以配置上 IP 地址進行通信。macvlan 下的虛擬機或者容器網絡和主機在同一個網段中,共享同一個廣播域。macvlan 和 bridge 比較相似,但因為它省去了 bridge 的存在,所以配置和調試起來比較簡單,而且效率也相對高。除此之外,macvlan 自身也完美支持 VLAN。

ServiceMesh + CNI

ServiceMesh 和 CNI 是組合的關系,ServiceMesh 并不會替代 CNI,他們工作在不同的 SDN 層次,CNI 更多工作在 L2-4 層,ServiceMesh 在 L5-7 層 Application SDN。ServiceMesh 不能獨立于 CNI 部署,與 CNI 一起提供層次化微服務應用所需要的網絡服務。根據 Gartner 報告指出,在 2020 年,幾乎 100% 容器云都將內置 ServiceMesh 技術。而目前開源的Istio 僅提供單一 Kubernetes 集群內部微服務治理,缺失異構容器云,跨云能力。

CNI 需要交付給容器云 L2-4 層細化至微服務內部的每個 POD 容器。應用終端交付所需要的 L2 網絡連接,L3 路由,L2-4 層安全隔離,容器云整體安全,負載均衡等。

ServiceMesh 更多的致力于微服務應用層面的服務治理,致力于 L5-7 層網絡服務,服務網格在每一個應用容器前部署一個 Sidecar Envoy 應用代理,提供微服務間的智能路由,分布式負載均衡,流量管理,藍綠,金絲雀發布,微服務彈性,限流熔斷,超時重試,微服務間的可視化,安全等等。

·

Docker 容器網絡

Docker 提供幾種類型的網絡,它決定容器之間、容器與外界之前的通信方式。

基礎網絡類型

查看所有容器網絡類型:

$ docker network ls NETWORK ID NAME DRIVER SCOPE c79756cf9cde bridge bridge local 204025a5abbc host host local 9b9024f5ac40 macvlan macvlan local 6478888548d8 none null local p2e02u1zhn8x overlay overlay swarm1234567

bridge 模式

bridge 模式的 Docker 網絡基于 Linux 的虛擬網絡技術來實現。Docker Container 的網絡接口默認都是虛擬接口,可以充分發揮數據在不同 Container 之間或跨主機的 Container 之間的轉發效率。這是因為 Linux 虛擬網絡技術通過在內核中的數據復制來實現虛擬接口之間的數據轉發,即:發送接口的發送緩存中的數據包將被直接復制到接收接口的接收緩存中,而無需通過外部物理網絡設備進行交換。

當 Docker Daemon 啟動后,會在宿主機上創建一個名為 docker0 的 Linux Bridge,在此宿主機上啟動的 Docker Container 都會連接到這個虛擬網橋上。Docker Daemon 會從 docker0(一個虛擬的 L2 網絡)子網中分配一個 IP 給 Container 使用,并設置 docker0 的 IP 地址為 Container 的默認網關。同時,在宿主機上創建一對 veth pair 虛擬網線設備,Docker Daemon 將 veth pair 設備的一端插入新建的 Container 中,并命名為eth0(容器的網卡),另一端插入 docker0 Linux Bridge 中,以 vethxxx 格式命名。

在這個網絡的容器之間可以相互通信,外界想要訪問到這個網絡中的 Containers 也同樣需要接入 bridge 網絡并通過 iptables 做了

$ ip a 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:46:c3:00:eb brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:46ff:fec3:eb/64 scope link valid_lft forever preferred_lft forever $ docker run -itd --name box1 busybox $ docker exec -it box1 sh / # ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host <a >艾曉園</a> forever preferred_lft forever

6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:2/64 scope link valid_lft forever preferred_lft forever / # ip r default via 172.17.0.1 dev eth0 172.17.0.0/16 dev eth0 scope link src 172.17.0.2 $ brctl show bridge namebridge idSTP enabledinterfaces docker08000.024246c300ebnovethd4ae072?

DNAT 規則,實現內外部地址轉換。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372