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

您的位置:首頁技術文章
文章詳情頁

對docker中的overlay式網絡詳解

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

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

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

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

一個叫ingress的overlay式網絡,用來處理和集群服務相關的控制和數據傳輸。當你創建一個集群服務而且沒有把它連到用戶定義的overlay式網絡時,它默認會連到ingress網絡。

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

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

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

適用于所有overlay網絡的操作

創建一個overlay網絡

✅先決條件

使用overlay網絡的docker守護進程需要的防火墻規則

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

1.TCP端口2377,用來集群管理相關的通信

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

3.UDP端口4789,用來進行進行overlay網絡上的數據傳輸

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

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

以后你可以創建用戶定義的overlay式網絡。

要創建一個用在集群服務中的overlay式網絡,用下面所示的命令:

$ docker network create -d overlay my-overlay

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

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

你可以指定IP地址范圍,子網,網關和其他選項。細節請查看docker network create --help。

overlay網絡上的加密傳輸

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

如果要加密應用數據,在創建網絡時加上--opt encrypted。這個參數支持在vxlan級別的IPSEC加密。這個操作會導致不可忽略的性能下降,所以在應用到生產環境前要先測試。

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

❌不要把Windows節點加入到加密通信的overlay網絡中。

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

集群模式的overlay網絡和單獨的容器

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

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

修改默認的ingress網絡

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

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

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

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

刪除ingress網絡。

$ 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標記創建新的overlay網絡,加上你想要的配置。下面的例子把MTU配置成1200,把子網設置成10.11.0.0/16,并把網關設成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網絡命名成其他名字,但只能有一個。如果你試圖創建第二個,會失敗。

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

修改docker_gwbridge接口

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

停掉docker

刪除docker_gwbridge接口

$ sudo ip link set docker_gwbridge down

$ sudo ip link del name docker_gwbridge

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

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

$ 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.初始化或加入集群。由于網橋已經存在,docker不會再用默認配置創建它了。

集群服務中的操作

在overlay網絡上發布端口

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

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

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

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

為集群服務繞開路由網

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

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

分離控制流和數據流

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

overlay網絡上獨立容器能用的操作

把獨立容器連到overlay網絡

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

發布端口

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

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

標簽: Docker
相關文章:
主站蜘蛛池模板: 色综合综合色综合色综合 | 日日麻批免费视频播放 | 免费看毛片的软件 | 精品亚洲视频在线 | 国产乱码精品一区二区三 | 黄色激情小视频 | 俄罗斯小屁孩和大人啪啪 | 国产成人18黄网站免费网站 | 久久天堂成人影院 | 欧美3p在线观看一区二区三区 | 高清大学生毛片一级 | 99国产精品一区二区 | 国产一区二区日韩欧美在线 | 国产成人精品综合网站 | 香港三级做爰大爽视频 | 视频一本大道香蕉久在线播放 | 成年美女黄网站色大片免费看 | 黄大色黄美女精品大毛片 | 黄色体验区 | 欧美成人h版影院在线播放 欧美成人h版整片合集 | 亚洲午夜精品aaa级久久久久 | 曰曰鲁夜夜免费播放视频 | 免费精品在线观看 | 狠狠色婷婷丁香综合久久韩国 | 久久久美女视频 | 亚洲国产精品二区久久 | 精品亚洲福利一区二区 | 亚洲国产区| 亚洲精选在线观看 | 成人国产三级在线播放 | 国产1区在线观看 | 蜜桃视频成a人v在线 | 久久五月激情婷婷日韩 | 久在线视频| 久久日本经典片免费看 | 国产大片91精品免费观看男同 | 免费看片免 | 丁香婷婷亚洲 | 亚洲综合色丁香婷婷六月图片 | 国产精品videosse | 日韩欧美中文字幕一区 |