亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:23日期:2024-11-12 11:32:29

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

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

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

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

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

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

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

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

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

✅先決條件

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

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

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

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

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

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

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

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

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

$ docker network create -d overlay my-overlay

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

刪除ingress網(wǎng)絡(luò)。

$ 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標(biāo)記創(chuàng)建新的overlay網(wǎng)絡(luò),加上你想要的配置。下面的例子把MTU配置成1200,把子網(wǎng)設(shè)置成10.11.0.0/16,并把網(wǎng)關(guān)設(shè)成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)絡(luò)命名成其他名字,但只能有一個。如果你試圖創(chuàng)建第二個,會失敗。

4.重啟你在第一步停掉的服務(wù)。

修改docker_gwbridge接口

docker_gwbridge是一個虛擬網(wǎng)橋,用來連接overlay網(wǎng)絡(luò)(包括ingress網(wǎng)絡(luò))和一個特定的docker守護進程的物理網(wǎng)絡(luò)。當(dāng)你初始化一個集群或把一個docker宿主機加入到一個集群時,docker會自動創(chuàng)建它,但它不是一個docker設(shè)備。它存在于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)橋,加上你自定義的設(shè)置。下面的例子使用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)建它了。

集群服務(wù)中的操作

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

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

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

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

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

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

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

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

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

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

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

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

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

發(fā)布端口

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

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

標(biāo)簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 日韩高清在线免费观看 | 国产xxx视频 | 欧美中文字幕在线视频 | 亚洲国产成人精品区 | 国产在线一区二区三区四区 | 免费大片在线观看 | 欧美成人h版整片合集 | 亚洲夂夂婷婷色拍ww47 | 国产伦一区二区三区四区久久 | 午夜宅男宅女 | 成人免费视频在线播放 | 91小视频在线| 正在播放国产大学生情侣 | 国产福利视频精品 | 日本性生活网站 | 交免费观看在线 | 欧美国产日韩911在线观看 | 久草美女视频 | 日韩欧美视频一区 | 九九热在线视频免费观看 | 亚洲精品一区乱码在线观看 | 国产一区欧美 | 精品一区视频 | 国产精品拍自在线观看 | 一级黄色片在线看 | 国产精品亚洲片在线va | 偷拍自拍日韩 | 国产精品亚洲欧美日韩区 | 一级特黄特黄毛片欧美的 | 国产在线一二三区 | 成年女人视频在线观看免费 | 午夜精品福利在线 | 91热久久免费精品99 | 国产成人亚洲合集青青草原精品 | 日韩精品一区二区三区小说 | 免费黄视频网站 | 一级毛片在线完整免费观看 | 香蕉在线观看视频 | 91天堂亚洲精品一区 | 特黄特黄黄色大片 | 手机看片自拍 |