中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker Network的原理是什么

發布時間:2021-11-16 14:01:57 來源:億速云 閱讀:237 作者:iii 欄目:大數據

這篇文章主要介紹“Docker Network的原理是什么”,在日常操作中,相信很多人在Docker Network的原理是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker Network的原理是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Docker在容器內運行應用程序,這需要在大量不同的網絡上進行通信。這意味著Docker需要很強的網絡能力。幸運的是,Docker有容器-容器網絡的解決方案,也有連接到已存在網絡和VLANs的解決方案。后者對于將app裝箱是非常重要的,這需要和外部系統諸如VM‘s和物理機上的功能和服務進行通信。

Docker網絡是基于一個叫做Container Network Model (CNM)的開源可插拔的架構。libnetwork是Docker真實世界的CNM實現。它提供了Docker所有的核心網絡能力。驅動插入libnetwork網絡以提供特定的網絡拓撲。

為創建平滑的開箱即用的體驗,Docker用一組原生驅動來處理大多數通用的網絡需求。這包含單主機橋接網絡、多主機的overlays,插入已存在VLANs的選項。生態系統合作者擴展了這個,在未來可能提供他們自己的驅動。

最后,libnetwork提供了本機服務發現和基本容器負載平衡解決方案。

(一)、理論

在最高層次,Docker網絡由三個主要組件:Container Network Model (CNM)、libnetwork、Drivers。

CNM是設計規范。它概括出了Docker網絡的 基礎構建塊。

libenetwork是CNM的實際實現,被Dokcer使用。用Go語言編寫,實現了CNM里的核心組件。

Drivers通過實現特定的網絡拓撲(諸如基于VXLAN的overlay網絡)來擴展了模型。

Docker Network的原理是什么

1、Container Network Model (CNM)

每件事都是從設計開始。

Docker網絡的設計指導是CNM。它概括出了Docker網絡的基本構建塊,可以從https://github.com/docker/libnetwork/blob/master/docs/design.md讀取到全部規范。從更高層級上看,它定義了三個構建塊:Sandboxes、Endpoints、 Networks。
sandbox是一個隔離的網絡棧,包括以太網接口、端口、路由表和DNS配置。

Endpoints是虛擬的網絡接口(E.g. veth),和正常網絡接口一樣,他們負責建立連接。在CNM的情況下,endpoint的工作室連接sandbox到網絡。

Networks 是802.1d橋接(大多數通常成為switch)的軟件實現。因此,他們將需要通信的一系列endpoint進行分組并隔離。

Docker Network的原理是什么Docker Network的原理是什么

2、Libnetwork

CNM是設計doc,libnetwork是典型實現。是開源的,用Go編寫,跨平臺,被Docker使用。

在Docker的早起,所有的網絡代碼存在于daemon,現在所有的核心Docker網絡代碼存在于libnetwork。libnetwork實現了定義在CNM中的所有三個組件。它也實現了本地服務發現,基于ingress的容器負載 均衡、網絡控制平面和管理平面功能

3、Drivers

如果libnetwork實現了平面和管理平面,那么驅動實現了數據平面。例如連接性和隔離性完全由驅動控制,它是網絡對象的真實創建。關系如下:

Docker Network的原理是什么

Docker有幾個內置驅動,也稱之為原生驅動或本地驅動,在Linux上包括bridge, overlay和macvlan。在Windows上包括nat, overlay, transparent, and l2bridge。

第三方也可以寫Docker網絡驅動,他們稱之為遠程驅動( remote drivers)。每一個驅動負責網絡上 所有資源的真實創建和管理。

為了滿足復雜的高流動性環境的需求,libnetwork運行同時有多個網絡驅動器處于激活狀態。意味著Docker環境可以是異構網絡。
(二)、單主機橋接網絡

Docker網絡最簡單的類型是單主機橋接網絡(2層橋接網絡)。Linux上的Docker用內置的橋接驅動創建了單主機橋接網絡。下圖顯示了兩個Docker主機有同樣的本地橋接網絡叫做“mynet”。盡管網絡一樣,但他們是獨立隔離的網絡,意味著容器不能直接通信,因為他們在不同的網絡上。

Docker Network的原理是什么

每一個Docker主機都有一個缺省的單主機橋接網絡,在Linux叫“bridge”,在Windows上叫“nat”,缺省情況下,所有新容器將會附著到這個網絡。除非使用--network標志重寫。可以使用命令:docker network ls,如下所示:

Docker Network的原理是什么

通過docker network inspect<network-name|network-id>,可以查看網絡的詳細情況。
Docker Network的原理是什么
在Linux主機上,使用橋接驅動構建的Docker網絡是基于battlehardened linux橋接技術,其在Linux內核中已經存在了多余15年。這意味著高性能且極度穩定。也意味著可以使用標準的Linux工具庫。例如ip link show docker0。

Docker缺省“bridge”網絡和Linux內核中的“docker0”橋接的關系如下:

Docker Network的原理是什么Docker Network的原理是什么

由于所有新創建的容器被注冊在嵌入式的Docker DNS服務中,因此在相同網絡中的其他容器可以通過名字進行解析。
注:Linux中缺省的橋接網絡不支持通過Docker DNS服務進行名字解析,所有其他用戶定義的橋接網絡支持。

Docker Network的原理是什么

單主機橋接網絡僅用于本地開發和很小的應用程序。因為僅有一個單一容器可以綁定到主機上的任何端口。這意味著沒有其他的容器將會使用主機上的端口5000。

(三)、多主機overlay網絡

下一節將著重介紹多主機overlay網絡,所以這里只做簡短介紹。

overlay網絡是多主機的。他們允許一個單一網絡跨多個主機,使得在不同主機上的容器可以再二層進行通信。他們很適合于容器-容器通信,包括僅容器應用程序。

Docker為overlay網絡提供了一個原生驅動。這使得創建他們非常簡單,僅 在docker network create命令后 增加--d overlay 標志。

(四)、連接到已存在網絡

連接已裝箱app到外部系統和物理網絡的能力是很重要的。一個通用的例子是部分裝箱app,裝箱的部分需要一種方式去和運行在外部物理網絡和VLANs中的非裝箱部分進行通信。考慮到這一點,創建了內置的MACVLAN網絡。通過給定每一個容器他們自己的MAC和IP地址,使得容器成為已存在網絡上的一等公民。

Docker Network的原理是什么
積極的一面,MACVLAN性能 是好的,因為它不需要進行端口映射或者額外的橋接,通過主機接口就可以連接容器接口。然而,反面來看,它需要主機的NIC處于promiscuous模式,這在大多數公共云平臺式 是不允許的。因此MACVLAN非常適合你自己的企業數據中心網絡,但是不能在公共云工作。

在下屬圖片和假設例子的幫助下,讓我們更深的進行理解。

Docker Network的原理是什么


現在,我們增加一個Docker主機,如下所示:

Docker Network的原理是什么

我們現在有一個需求,將一個容器(app服務)插入到VLAN100中。這樣做,我們使用macvlan創建一個新的Docker網絡。然而,macvlan需要我們告訴它一些關于網絡的事情。比如子網信息、網關、可以分配給容器的IP范圍、主機所使用的接口或者子接口。

創建一個叫做“macvlan100”的MACVLAN網絡,將會把容器連接到VLAN 100.命令如下:

docker network create -d macvlan --subnet=10.0.0.0/24 --ip-range=10.0.00/25 --gateway=10.0.0.1 -o parent=eth0.100 macvlan100

上述命令執行完后,如下所示:
Docker Network的原理是什么

MACVLAN使用標準的Linux子接口,你可以使用你將要連接的VLAN的ID來給他們打標簽。在上述例子中,我們將要連接到VLAN 100,所以我們用.100(etho.100)來給子接口打標簽。

我們也可以使用--ip-range標志來告訴MACVLAN 網絡哪些IP地址的子集可以分配給容器。這個范圍的地址為Docker保留是很重要的,不能被其他的節點或者DHCP服務器使用。
執行命令:docker container run -d --name mactainer1 --network macvlan100 alpine sleep 1d,此時網絡結構如下:

Docker Network的原理是什么

注意:上述的基礎網絡VLAN 100并不能看到任何MACVLAN,它僅能看見帶有MAC和IP地址的容器。

現在,我們獲得了一個MACVLAN,用它將一個新容器連接到一個已存在的VLAN。Docker MACVLAN驅動是構建在同名的Linux內核上 。它支持VLAN的trunk功能。這意味著我們可以創建多個MACVLAN網絡,在相同的Docker主機上按照如下方式連接容器。

Docker Network的原理是什么

(五)、服務發現

除核心網絡之外,libnetwork也 提供了一些重要的網絡服務。

服務發現允許所有的容器和Swarm服務通過名稱來互相定位。唯一的需求是他們在相同的網絡上。這利用了Docker的嵌入式DNS服務,也為每個容器提供了一個DNS解析器。如下圖所示,c1容器通過名稱來ping c2容器。

Docker Network的原理是什么

(六)、Ingress網絡

Swarm支持兩種發布模式,可以使得服務訪問集群外主機:Ingress mode (default)、Host mode。

通過ingress模式發布的服務可以被swarm中的任何一個節點訪問—甚至節點沒有 運行服務副本。通過主機模式發布的服務僅能通過運行服務副本的節點訪問。下圖顯示了這兩種 模式的不同。

Docker Network的原理是什么

Ingress 模式是常用模式。其使用叫做Service Mesh或Swarm Mode Service Mesh的4層路由mesh,下圖顯示了外部請求到暴露在ingress模式中服務的基本流向。

Docker Network的原理是什么

到此,關于“Docker Network的原理是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霸州市| 巨鹿县| 临海市| 嘉祥县| 兖州市| 河南省| 八宿县| 泸水县| 邮箱| 宜黄县| 青神县| 攀枝花市| 西贡区| 巴里| 宜黄县| 寿阳县| 科技| 定陶县| 绥阳县| 广昌县| 孝昌县| 读书| 赤壁市| 霍山县| 且末县| 平阴县| 房产| 庄河市| 锡林郭勒盟| 休宁县| 吉木萨尔县| 阳春市| 台安县| 盐山县| 隆林| 于田县| 定襄县| 河北省| 武威市| 安龙县| 勃利县|