濮阳杆衣贸易有限公司

主頁 > 知識庫 > 對docker中的overlay式網(wǎng)絡詳解

對docker中的overlay式網(wǎng)絡詳解

熱門標簽:智能電銷機器人真的有用么 高德地圖標注足跡怎么打標 百度地圖底圖標注 電銷智能機器人試用 撫州市城區(qū)地圖標注 激光標記地圖標注 中國地圖標注上各個省 新鄉(xiāng)牧野400電話申請 企業(yè)辦理400電話收費標準

翻譯自docker官方文檔,原文:https://docs.docker.com/network/overlay/

overlay(覆蓋)式網(wǎng)絡會在多個docker守護進程所在的主機之間創(chuàng)建一個分布式的網(wǎng)絡。這個網(wǎng)絡會覆蓋宿主機特有的網(wǎng)絡,并允許容器連接它(包括集群服務中的容器)來安全通信。顯然,docker會處理docker守護進程源容器和目標容器之間的數(shù)據(jù)報的路由。

當你初始化一個集群(swarm)或把一個docker宿主機加入一個已經(jīng)存在的集群時,宿主機上會新建兩個網(wǎng)絡:

一個叫ingress的overlay式網(wǎng)絡,用來處理和集群服務相關(guān)的控制和數(shù)據(jù)傳輸。當你創(chuàng)建一個集群服務而且沒有把它連到用戶定義的overlay式網(wǎng)絡時,它默認會連到ingress網(wǎng)絡。

一個叫docker_gwbridge的bridge式網(wǎng)絡。用來連接本docker守護進程和集群中的其他守護進程。

你可以用docker network create命令創(chuàng)建用戶定義的overlay式網(wǎng)絡,就和你創(chuàng)建用戶定義的bridge式網(wǎng)絡一樣。服務和容器可以同時連到多個網(wǎng)絡。服務和容器只能和它所在的網(wǎng)絡中的其他對象通信。

雖然集群服務和單獨的容器都能連到overlay式網(wǎng)絡,但默認的表現(xiàn)和配置兩者都是不同的。因此,本主題后面的內(nèi)容會分成三部分:應用于所有overlay式網(wǎng)絡的;應用于集群服務中的網(wǎng)絡的;應用于單獨的容器使用的overlay式網(wǎng)絡的。

適用于所有overlay網(wǎng)絡的操作

創(chuàng)建一個overlay網(wǎng)絡

✅先決條件

使用overlay網(wǎng)絡的docker守護進程需要的防火墻規(guī)則

要讓一個overlay網(wǎng)絡中的docker主機能夠相互通信,你需要打開下面的端口:

1.TCP端口2377,用來集群管理相關(guān)的通信

2.TCP和UDP端口7946,用來進行節(jié)點之間的通信

3.UDP端口4789,用來進行進行overlay網(wǎng)絡上的數(shù)據(jù)傳輸

在你能創(chuàng)建一個overlay網(wǎng)絡之前,你要么要通過docker swarm init把你的docker守護進程初始化成一個集群管理者(swarm manager),要么要通過docker swarm join把它加入到一個已存在的集群中。

不管哪種方式,默認創(chuàng)建并使用的都是叫做ingress的overlay式網(wǎng)絡。即使你不打算使用集群服務,也要這么做。

以后你可以創(chuàng)建用戶定義的overlay式網(wǎng)絡。

要創(chuàng)建一個用在集群服務中的overlay式網(wǎng)絡,用下面所示的命令:

$ docker network create -d overlay my-overlay

要創(chuàng)建一個既能用于集群服務,又能用于單獨的容器來和其他docker守護進程中的單獨的容器進行通信的網(wǎng)絡,加上--attachable標記:

$ docker network create -d overlay --attachable my-attachable-overlay

你可以指定IP地址范圍,子網(wǎng),網(wǎng)關(guān)和其他選項。細節(jié)請查看docker network create --help。

overlay網(wǎng)絡上的加密傳輸

所有的服務管理相關(guān)的傳輸都默認用GCM模式的AES算法加密。集群中的管理節(jié)點每12個小時輪換加密用的鍵(key)。

如果要加密應用數(shù)據(jù),在創(chuàng)建網(wǎng)絡時加上--opt encrypted。這個參數(shù)支持在vxlan級別的IPSEC加密。這個操作會導致不可忽略的性能下降,所以在應用到生產(chǎn)環(huán)境前要先測試。

當你開啟overlay加密后,docker會在所有網(wǎng)絡中服務被調(diào)度到的節(jié)點上創(chuàng)建IPSEC 隧道。這些隧道也會使用GCM模式的AES算法加密,并且每12個小時自動輪換加密用的鍵(key)。

❌不要把Windows節(jié)點加入到加密通信的overlay網(wǎng)絡中。

overlay網(wǎng)絡上的加密通信不支持Windows。如果Windows節(jié)點試圖連接到加密通信的overlay網(wǎng)絡,不會報錯,但這個節(jié)點會不能和其他節(jié)點通信。

集群模式的overlay網(wǎng)絡和單獨的容器

你可以用--opt encrypted --attachable或把沒有被管理的容器加入到網(wǎng)絡的方式來使用overlay網(wǎng)絡特性。

$ docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network

修改默認的ingress網(wǎng)絡

大多數(shù)用戶不需要配置ingress網(wǎng)絡。但docker17.05以及更高版本允許你這么做。如果自動選擇的子網(wǎng)段和你網(wǎng)絡中已存在的網(wǎng)絡沖突了,或你需要修改其他底層的網(wǎng)絡設置比如MTU的時候,這個功能就很有用了。

修改ingress網(wǎng)絡需要刪除再創(chuàng)建它。這就要求你在集群中創(chuàng)建服務之前完成修改。如果有發(fā)布端口的服務,在你刪除ingress網(wǎng)絡之前要先刪除這些服務。

在ingress網(wǎng)絡不存在的時候,已存在的沒有發(fā)布端口的服務能繼續(xù)提供服務,但沒有負載均衡功能。那些發(fā)布端口的服務比如發(fā)布80端口的WordPress服務會受影響。

用docker network inspect ingress檢查ingress網(wǎng)絡,然后刪除所有所在容器連到ingress的服務。這些服務是發(fā)布端口的服務比如發(fā)布80端口的WordPress服務。如果所有這些服務沒有停掉,下一步會失敗。

刪除ingress網(wǎng)絡。

$ docker network rm ingress

WARNING! Before removing the routing-mesh network, make sure all the nodes in your swarm run the same docker engine version. Otherwise, removal may not be effective and functionality of newly created ingress networks will be impaired.

Are you sure you want to continue? [y/N]

3.用ingress標記創(chuàng)建新的overlay網(wǎng)絡,加上你想要的配置。下面的例子把MTU配置成1200,把子網(wǎng)設置成10.11.0.0/16,并把網(wǎng)關(guān)設成10.11.0.2。

$ docker network create \

 --driver overlay \

 --ingress \

 --subnet=10.11.0.0/16 \

 --gateway=10.11.0.2 \

 --opt com.docker.network.mtu=1200 \

 my-ingress

注意:你也可以把ingerss網(wǎng)絡命名成其他名字,但只能有一個。如果你試圖創(chuàng)建第二個,會失敗。

4.重啟你在第一步停掉的服務。

修改docker_gwbridge接口

docker_gwbridge是一個虛擬網(wǎng)橋,用來連接overlay網(wǎng)絡(包括ingress網(wǎng)絡)和一個特定的docker守護進程的物理網(wǎng)絡。當你初始化一個集群或把一個docker宿主機加入到一個集群時,docker會自動創(chuàng)建它,但它不是一個docker設備。它存在于docker宿主機的內(nèi)核中。如果你要修改它的配置,你必須在把宿主機加入集群前完成,或暫時把宿主機從集群中脫離。

停掉docker

刪除docker_gwbridge接口

$ sudo ip link set docker_gwbridge down

$ sudo ip link del name docker_gwbridge

3.啟動docker,不要加入或初始化集群

4.用docker network create命令手動創(chuàng)建或重新創(chuàng)建docker_gwbridge網(wǎng)橋,加上你自定義的設置。下面的例子使用10.11.0.0/16子網(wǎng)。

$ docker network create \

--subnet 10.11.0.0/16 \

--opt com.docker.network.bridge.name=docker_gwbridge \

--opt com.docker.network.bridge.enable_icc=false \

--opt com.docker.network.bridge.enable_ip_masquerade=true \

docker_gwbridge

5.初始化或加入集群。由于網(wǎng)橋已經(jīng)存在,docker不會再用默認配置創(chuàng)建它了。

集群服務中的操作

在overlay網(wǎng)絡上發(fā)布端口

連到同一個overlay網(wǎng)絡的集群服務會互相暴露所有端口。如果一個端口要從服務外部可訪問到,必須在docker service create或docker service update中用-p或--publish來發(fā)布。

遺留的冒號分割的語法和新的逗號分割的語法都是支持的。

更長的語法更好,因為某種意義上它是自解釋的。

參數(shù) 描述
-p 8080:80 o或-p published=8080,target=80 把服務內(nèi)的 TCP 端口 80映射到路由中的端口8080
-p 8080:80/udp 或-p published=8080,target=80,protocol=udp 把服務內(nèi)的 UDP 端口 80映射到路由中的端口8080
-p 8080:80/tcp -p 8080:80/udp 或 -p published=8080,target=80,protocol=tcp -p published=8080,target=80,protocol=udp 把服務內(nèi)的 TCP 端口 80映射到路由中的端口8080,并把服務內(nèi)的 UDP 端口 80映射到路由中的端口8080

為集群服務繞開路由網(wǎng)

默認的,集群服務通過路由網(wǎng)來發(fā)布端口。當你連到任一集群節(jié)點(不管它有沒有運行端口所代表的服務)上的被發(fā)布的端口時,你都能重定向到運行著指定服務的節(jié)點。docker很有效的充當著你的集群服務的負載均衡器。使用路由網(wǎng)的服務運行在虛擬IP模式(VIP)下。即使一個服務運行在一個節(jié)點上(通過--global標記),也會使用路由網(wǎng)。當使用路由網(wǎng)時,不能保證哪個節(jié)點處理客戶端的請求。

要繞開路由網(wǎng),你可以用DNS Round Robin (DNSRR)模式啟動服務。通過給dnsrr設置--endpoint-mode標記。你必須在服務前端運行你自己的負載均衡器。docker宿主機上的服務名的DNS查詢會返回運行著指定服務的節(jié)點的IP地址集合。配置你的負載均衡器來使用這份列表并在節(jié)點間平衡通信。

分離控制流和數(shù)據(jù)流

默認的,控制流和集群管理者聯(lián)系并在運行在同一網(wǎng)絡上的應用間傳輸,雖然控制流是加密的。你可以配置docker,讓它用不同的網(wǎng)絡接口來處理不同的流。當你初始化或加入集群時,分別指定--advertise-addr和--datapath-addr。你必須在每個要加入集群的節(jié)點上做這個操作。

overlay網(wǎng)絡上獨立容器能用的操作

把獨立容器連到overlay網(wǎng)絡

ingress網(wǎng)絡創(chuàng)建時沒有指定--attachable標記,這意味著只有集群服務能使用它,獨立容器不能。你可以把獨立容器連到用戶定義的,創(chuàng)建時指定了--attachablebiaoji d overlay網(wǎng)絡。這給了運行在不同docker上的獨立容器一種能力,即不需在特定docker宿主機上設置路由就能通信的能力。

發(fā)布端口

參數(shù) 描述
-p 8080:80 把服務內(nèi)的 TCP 端口 80映射到路由中的端口8080
-p 8080:80/udp 把服務內(nèi)的 UDP 端口 80映射到路由中的端口8080
-p 8080:80/tcp -p 8080:80/udp 把服務內(nèi)的 TCP 端口 80映射到路由中的端口8080,并把服務內(nèi)的 UDP 端口 80映射到路由中的端口8080

以上這篇對docker中的overlay式網(wǎng)絡詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

標簽:邯鄲 忻州 延安 海西 辛集 西安 臨汾 南通

巨人網(wǎng)絡通訊聲明:本文標題《對docker中的overlay式網(wǎng)絡詳解》,本文關(guān)鍵詞  對,docker,中的,overlay,式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《對docker中的overlay式網(wǎng)絡詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于對docker中的overlay式網(wǎng)絡詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    丰台区| 德昌县| 临邑县| 芮城县| 沭阳县| 长治市| 阳泉市| 钟山县| 武义县| 安泽县| 阳朔县| 鸡西市| 右玉县| 新龙县| 尖扎县| 北流市| 临夏县| 嘉荫县| 涟源市| 八宿县| 松江区| 黎川县| 丰县| 光泽县| 吉安县| 九台市| 扎赉特旗| 色达县| 荆门市| 玛沁县| 灵台县| 嘉黎县| 上蔡县| 五原县| 普兰店市| 南木林县| 普陀区| 阳信县| 福泉市| 六盘水市| 阜康市|