八、容器網路
(一)跨主機網路概述
? 前面已經學習了 Docker 的幾種網路方案:none、host、bridge 和 joined 容器,它們解決了單個 Docker Host 內容器通信的問題,本章的重點則是討論跨主機容器間通信的方案,
跨主機網路方案包括:
- docker 原生的 overlay 和 macvlan,
- 第三方方案:常用的包括 flannel、weave 和 calico,
docker 網路是一個非常活躍的技術領域,不斷有新的方案開發出來,那么要問個非常重要的問題了:如此眾多的方案是如何與 docker 集成在一起的?
答案是:libnetwork 以及 CNM,
(1)libnetwork & CNM
libnetwork 是 docker 容器網路庫,最核心的內容是其定義的 Container Network Model (CNM),這個模型對容器網路進行了抽象,由以下三類組件組成:
①Sandbox
? Sandbox 是容器的網路堆疊,包含容器的 interface、路由表和 DNS 設定, Linux Network Namespace 是 Sandbox 的標準實作,Sandbox 可以包含來自不同 Network 的 Endpoint,
②Endpoint
? Endpoint 的作用是將 Sandbox 接入 Network,Endpoint 的典型實作是 veth pair,后面我們會舉例,一個 Endpoint 只能屬于一個網路,也只能屬于一個 Sandbox,
③network
? Network 包含一組 Endpoint,同一 Network 的 Endpoint 可以直接通信,Network 的實作可以是 Linux Bridge、VLAN 等,
下面是 CNM 的示例:

如圖所示兩個容器,一個容器一個 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 等,

下面我們以 docker bridge driver 為例討論 libnetwork CNM 是如何被實作的

這是前面我們討論過的一個容器環境:
- 兩個 Network:默認網路 “bridge” 和自定義網路 “my_net2”,實作方式是 Linux Bridge:“docker0” 和 “br-21840c1713,
- 三個 Enpoint,由 veth pair 實作,一端(vethxxx)掛在 Linux Bridge 上,另一端(eth0)掛在容器內,
- 三個 Sandbox,由 Network Namespace 實作,每個容器有自己的 Sanbox,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229371.html
標籤:其他
上一篇:Ghost ,博客系統代名詞
