Swarm 集群產(chǎn)生兩種不同類型的流量:
- 控制和管理層面:包括 Swarm 消息管理等,例如請(qǐng)求加入或離開Swarm第美,這種類型的流量總是被加密的烈掠。(涉及到集群內(nèi)部的hostname抑淫、ip-address幻件、subnet、gateway等)
- 應(yīng)用數(shù)據(jù)層面:包括容器與客戶端的通信等好乐。(涉及到防火墻匾竿、端口映射、網(wǎng)口映射蔚万、VIP等)
在 Swarm Service 中有三個(gè)重要的網(wǎng)絡(luò)概念:
-
Overlay networks 管理 Swarm 中 Docker 守護(hù)進(jìn)程間的通信岭妖。你可以將服務(wù)附加到一個(gè)或多個(gè)已存在的
overlay
網(wǎng)絡(luò)上,使得服務(wù)與服務(wù)之間能夠通信笛坦。 -
ingress network 是一個(gè)特殊的
overlay
網(wǎng)絡(luò)区转,用于服務(wù)節(jié)點(diǎn)間的負(fù)載均衡。當(dāng)任何 Swarm 節(jié)點(diǎn)在發(fā)布的端口上接收到請(qǐng)求時(shí)版扩,它將該請(qǐng)求交給一個(gè)名為IPVS
的模塊。IPVS
跟蹤參與該服務(wù)的所有IP地址侄泽,選擇其中的一個(gè)礁芦,并通過ingress
網(wǎng)絡(luò)將請(qǐng)求路由到它。
初始化或加入 Swarm 集群時(shí)會(huì)自動(dòng)創(chuàng)建ingress
網(wǎng)絡(luò),大多數(shù)情況下柿扣,用戶不需要自定義配置肖方,但是 docker 17.05 和更高版本允許你自定義。 -
docker_gwbridge是一種橋接網(wǎng)絡(luò)未状,將
overlay
網(wǎng)絡(luò)(包括ingress
網(wǎng)絡(luò))連接到一個(gè)單獨(dú)的 Docker 守護(hù)進(jìn)程的物理網(wǎng)絡(luò)俯画。默認(rèn)情況下,服務(wù)正在運(yùn)行的每個(gè)容器都連接到本地 Docker 守護(hù)進(jìn)程主機(jī)的docker_gwbridge
網(wǎng)絡(luò)司草。
docker_gwbridge
網(wǎng)絡(luò)在初始化或加入 Swarm 時(shí)自動(dòng)創(chuàng)建艰垂。大多數(shù)情況下,用戶不需要自定義配置埋虹,但是 Docker 允許自定義猜憎。
? Swarm Services 網(wǎng)絡(luò)
以 mongo 和 mongo-express (MongoDB 數(shù)據(jù) Web 可視化) 鏡像作為示例,演示 Swarm 下服務(wù)間的網(wǎng)絡(luò)應(yīng)用搔课。
1胰柑、創(chuàng)建 overlay
網(wǎng)絡(luò),作用范圍為 swarm
提示:
overlay
網(wǎng)絡(luò)創(chuàng)建可以在 Swarm 集群下的任意節(jié)點(diǎn)執(zhí)行爬泥,并同步更新到所有節(jié)點(diǎn)柬讨。
docker network create \
--driver overlay \
mongo_network
2、將服務(wù)附加到指定網(wǎng)絡(luò) mongo_network
示例:啟動(dòng) 2 個(gè)副本的 MongoDB 服務(wù) mongo袍啡。
docker service create \
--name mongo \
--replicas 2 \
--network mongo_network \
mongo
此處服務(wù)沒有對(duì)外發(fā)布端口踩官,外部無法連接 MongoDB。
3葬馋、服務(wù)間網(wǎng)絡(luò)通信
示例:啟動(dòng) 1 個(gè)副本的 MongoExpress 服務(wù) mongo-express卖鲤,連接到 mongo 服務(wù),并對(duì)外暴露 80 端口畴嘶,使得外部可以訪問蛋逾。
docker service create \
--name mongo-express \
--network mongo_network \
--publish published=80,target=8081 \
-e ME_CONFIG_MONGODB_SERVER="mongo" \
-e ME_CONFIG_MONGODB_PORT=27017 \
mongo-express
此時(shí),mongo-express
服務(wù)已映射到 Swarm 所有節(jié)點(diǎn)的 80 端口窗悯。雖然這個(gè)服務(wù)只部署了一個(gè)副本区匣,但是訪問任意節(jié)點(diǎn)的都能請(qǐng)求到
mongo-express。
如上圖所示蒋院,Hostname 有兩個(gè)不同的值亏钩,分別對(duì)應(yīng)到 mongo
服務(wù)下兩個(gè)副本的容器 ID。由于欺旧,在 Swarm 集群下創(chuàng)建服務(wù)姑丑,網(wǎng)絡(luò)默認(rèn)使用 VIP 模式,會(huì)為該服務(wù)生成一個(gè)虛擬IP辞友,該 IP 會(huì)在所有副本容器節(jié)點(diǎn)輪訓(xùn)漂移栅哀,這樣震肮,mongo-express
會(huì)輪訓(xùn)的連接到 mongo
的 2個(gè)副本容器。
4留拾、查看 VIP 地址
顯示網(wǎng)絡(luò)詳情
docker service inspect mongo
5戳晌、查看 MongoDB 容器地址
查看容器所在的節(jié)點(diǎn)
docker service ps mongo
查看容器IP
docker inspect 容器ID
6、總結(jié)
未完待續(xù)痴柔。沦偎。。