17、《每天5分鐘玩轉Docker容器技術》學習--Multi-host網絡

------------------------------------重要說明------------------------------------

本文內容都是參考Cloudman系列進行學習,是個人學習過程記錄,與原版不同!

原版請參考cloudman《每天5分鐘玩轉Docker容器技術》Cloudman博客如下:

http://blog.51cto.com/cloudman

------------------------------------重要說明------------------------------------

前面已經學習了 Docker 的幾種網絡方案:none、host、bridge 和 joined 容器,它們解決了單個 Docker Host 內容器通信的問題。本章的重點則是討論跨主機容器間通信的方案。

跨主機網絡方案包括:

1.docker 原生 overlay 和 macvlan

圖片.png 

2.第三方方案:常用的包括 flannel、weave 和 calico

圖片.png
 

docker 網絡是一個非常活躍的技術領域,不斷有新的方案開發出來,那麼要問個非常重要的問題了:

如此衆多的方案是如何與 docker 集成在一起的?

答案是:libnetwork 以及 CNM

1. libnetwork & CNM

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

a) Sandbox

Sandbox 是容器的網絡棧,包含容器的 interface、路由表和 DNS 設置。 Linux Network Namespace 是 Sandbox 的標準實現。Sandbox 可以包含來自不同 Network 的 Endpoint。

b) Endpoint

Endpoint 的作用是將 Sandbox 接入 Network。Endpoint 的典型實現是 veth pair,後面我們會舉例。一個 Endpoint 只能屬於一個網絡,也只能屬於一個 Sandbox。

c) Network

Network 包含一組 Endpoint,同一 Network 的 Endpoint 可以直接通信。Network 的實現可以是 Linux Bridge、VLAN 等。

d) CNM 示例

圖片.png

如圖所示兩個容器,一個容器一個 Sandbox,每個 Sandbox 都有一個 Endpoint 連接到 Network 1,第二個 Sandbox 還有一個 Endpoint 將其接入 Network 2.

libnetwork CNM 定義了 docker 容器的網絡模型,按照該模型開發出的 driver 就能與 docker daemon 協同工作,實現容器網絡。docker 原生的 driver 包括 none、bridge、overlay 和 macvlan,第三方 driver 包括 flannel、weave、calico 等。

圖片.png

下面我們以 docker bridge driver 爲例討論 libnetwork CNM 是如何被實現的。

------------------------------------重要說明------------------------------------

本文內容都是參考Cloudman系列進行學習,是個人學習過程記錄,與原版不同!

原版請參考cloudman《每天5分鐘玩轉Docker容器技術》Cloudman博客如下:

http://blog.51cto.com/cloudman

------------------------------------重要說明------------------------------------

書籍:

1.《每天5分鐘玩轉Kubernetes》
https://item.jd.com/26225745440.html

2.《每天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html

3.《每天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html



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