Docker容器技術之Dokcer networking

我們知道,docker容器中的資源用namespace進行了隔離,每一個容器中都有自己獨立的一套網絡資源,docker容器如何實現單機通訊與跨主機通訊呢?本節內容將為你解答這個問題。

本節索引:

一、Docker networking相關概念

二、Docker單主機容器通信

三、Docker單主機網絡配置示例

四、Dokcer跨主機容器通信介紹

 

1

一、Docker networking相關概念

Docker單主機網絡創建過程:

1、創建一對虛擬接口,分別放到本地主機和新容器的命名空間中。

2、本地主機一端的虛擬接口連接到默認的docker0網橋或指定網橋上,并具有

一個以veth開頭的唯一名字,如veth1234

3、容器一端的虛擬接口將放到新創建的容器中,并修改名字為eth0。這個接口

只在容器的命名空間可見。

4、從網橋可用地址段中獲取一個空閑地址分配給容器的eth0(如:172.17.0.2/16),

并配置默認路由網關為docker0網卡的內部接口docker0的IP地址。

 

完成這些配置后,容器就可以使用它所能看到的eth0虛擬網卡來連接其他容器和

訪問外部網絡。

 

另外,可以在docker運行時通過–net參數來指定容器的網絡配置,有四個可選值:

–net=bridgeBridged container 橋接式容器

–net=hostJoined container 聯盟式容器

–net=noneClosed container 閉合式容器

–net=containerOpen container 開放式容器

 

四種容器networking結構對比:

2

 

 

二、Docker單主機容器通信

1、bridge模式:

docker容器默認使用bridge模式,在Docker網橋上為容器創建新的網絡棧。

 

示例:bridge模式

宿主機將會創建一塊虛擬網卡,網卡工作模式為橋接,默認地址為:172.17.0.1/16

3

以默認網絡類型(–net=bridge)運行一個容器test

docker run –name test -it –rm busybox:latest

4

也可從容器外注入配置信息,例如:

docker run –name test? -it –rm –dns 114.114.114.114 –add-host www.wxlinux.com:1.1.1.1 busybox:latest

5

 

2、host模式

讓容器使用宿主機的用戶空間,和物理機共用一套TCP/IP協議棧、IP地址;擁有完全

的本地主機接口訪問權限,可以跟主機其他root進程一樣打開低范圍端口,還可以讓

容器做一些影響整個主機系統的事情,例如重啟主機。因此使用此選項時要非常小心。

 

示例:host模式

以host網絡類型運行一個容器test

6

docker run –name test –network host -it –rm busybox:latest

7

 

 

3、none模式

讓Docker將新容器放到隔離的網絡棧中,但是不進行網絡配置。之后,用戶可以自己

進行配置

 

示例:none模式

8

 

 

4、container模式

也稱為聯盟式容器:Joined container

讓Docker將新建容器的進程放到一個已存在的容器的網絡棧中,新容器進程有自己的文件

系統、進程列表和資源限制,但會和已存在的容器共享IP地址和端口等網絡資源,兩者進

程可以直接通過lo環回接口通信

 

示例:container模式

啟動第一個容器

docker run –name test1 -it -rm busybox

9

啟動第二個容器,共享test1容器的網絡資源

10

 

 

三、Docker單主機網絡配置示例

示例一:修改容器默認網橋地址

自定義docker0橋的網絡屬性信息:/etc/docker/daemon.json文件

{

??????????? “bip”: “192.168.1.5/24”,

??????????? “fixed-cidr”: “10.20.0.0/16”,

??????????? “fixed-cidr-v6”: “2001:db8::/64”,

??????????? “mtu”: 1500,

??????????? “default-gateway”: “10.20.1.1”,

??????????? “default-gateway-v6”: “2001:db8:abcd::89”,

??????????? “dns”: [“10.20.1.2″,”10.20.1.3”]

??????? }

核心選項為bip,即bridge ip之意,用于指定docker0橋自身的IP地址;其它選項可通過此地

址計算得出。

11

systemctl restart docker

12

 

示例二:docker遠程連接其他docker(默認沒開啟)

dockerd守護進程的C/S,其默認僅監聽Unix SOcket格式的地址,/var/run/docker.sock;

如果使用TCP套接字,

vim /etc/docker/daemon.json

“hosts”: [“tcp://0.0.0.0:2375”, “unix:///var/run/docker.sock”]

也可向dockerd直接傳遞“-H|–host”選項;

 

示例:

docker主機IP:192.168.30.10

本地鏡像列表如下:

13

vim /etc/docker/daemon.json

14

重啟docker服務

systemctl restart docker

遠程訪問IP地址:192.168.30.10的鏡像

docker -H 192.168.30.10:2375 image ls

15

 

 

示例三:創建另外一個bridge網絡橋

默認docker啟動后,自帶一個docker0的網橋,地址為172.17.0.1/16

創建一個名稱為mybr0,地址為172.26.0.0/16的網橋

docker network create -d bridge –subnet “172.26.0.0/16” –gateway “172.26.0.1” mybr0

16

查看網橋

17

 

 

四、Docker跨主機容器通信介紹

18

隧道方案:

Overlay:一種網絡架構上疊加的虛擬化技術模式,其大體框架是對基礎網絡不進行大

規模修改的條件下,實現應用在網絡上的承載,并能與其它網絡業務分離,并且以基于

IP的基礎網絡技術為主。Overlay 技術是在現有的物理網絡之上構建一個虛擬網絡,上

層應用只與虛擬網絡相關。

Docker: 跨主機集群網絡解決方案的一種,可以用于連接部署在多臺主機上的 Docker

容器,使用網絡的應用程序不必去配置端口映射等信息,Weave的通信支持加密,所以

用戶可以從一個不受信任的網絡連接到主機。

Flannel:一個專為kubernetes定制的三層網絡解決方案,主要用于解決容器的跨主機通信

問題。

 

隧道方案優缺點:

優點:對底層的網絡沒有過高的要求,一般來說,只要是在一個三層可達網絡里,就能構建

出一個基于隧道的容器網絡。

缺點:隨著節點規模的增長復雜度會提升,大規模集群情況下網絡問題跟蹤復雜

 

路由方案:

Calico:是一個純三層的虛擬網絡方案,Calico 為每個容器分配一個IP,每個 host都是

router,把不同 host 的容器連接起來。與VxLAN不同的是,Calico不對數據包做額外封

裝,不需要 NAT 和端口映射,擴展性和性能都很好。

與其他容器網絡方案相比,Calico 還有一大優勢:network policy。用戶可以動態定義 ACL

規則,控制進出容器的數據包,實現業務需求。

MacVLAN:Linux操作系統內核提供的網絡虛擬化方案之一,更準確的說法是網卡虛擬化方

案。它可以為一張物理網卡設置多個mac地址,相當于物理網卡施展了影分身之術,由一

個變多個,同時要求物理網卡打開混雜模式。針對每個mac地址,都可以設置IP地址,本

來是一塊物理網卡連接到交換機,現在是多塊虛擬網卡連接到交換機。

 

路由方案優缺點:

優點:從三層或者兩層實現跨主機容器互通,沒有NAT,效率比較高,和目前的網絡能夠融合

在一起,每一個容器都可以像虛擬機一樣分配一個業務的IP。

缺點:如果幾萬新的容器IP沖擊到路由表里,導致下層的物理設備沒辦法承受;而且每一個容

器都分配一個業務IP,業務IP會消耗很快。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104693

(2)
wangxczwangxcz
上一篇 2018-08-08
下一篇 2018-08-09

相關推薦

欧美性久久久久