1.作用
當在 任何 一個 swarm 節點去訪問 端口服務的時候 會通過 本節點 的 IPVS ( ip virtual service ) 到 真正的 swarm 節點上
當訪問 docker host 3 的 端口 8080 時, 會把 請求轉發到 另外兩台host 上去 , 然后把 響應返回給用戶
2. 功能
外部訪問的均衡負載
服務端口被暴露到哥哥swarm節點
內部通過 IPVS 進行均衡負載
3. 實驗
創建 一個 名為 demo 的 overlay 網絡 另外 創建 client service 和 whoami service 服務
docker network create -d overlay demo
docker service create --name whoami -p 8000:8000 --network demo -d jwilder/whoami
docker service create --name client -d --network demo busybox sh -c 'while true; do sleep 3600; done'
將 whoami 服務拓展為 兩個容器
docker service scale whoami=2
查看 whoami 的運行情況
docker service ps whoami
curl 訪問 whoami 容器 無論在哪台服務器上
curl 127.0.0.1:8000
查看 iptables 轉化的規則 發現 通過 tcp udp 訪問 8000 端口 時 轉發到 172.18.0.2
sudo iptables -nL -t nat
在 docker host (任意服務器都行) 上 查看 ip 發現
查看 docker_gwbridge 的 interface (查看 docker_gwbridge 的 網橋)
brctl show
查看 docker_gwbridge 內 所包含的 容器 (發現 外部請求的數據 發到 ingress-sbox 內了)
docker network inspect docker_gwbridge
查看並進入 ingress_sbox
sudo ls /var/run/docker/netns (查看 ingress 位置)
sudo nsenter --net=/var/run/docker/netns/ingress_sbox (進入 ingress_sbox)
在 ingress_sbox 內 查看 iptables
iptables -nL -t mangle 可看出 發送到 該 ip 地址下的8000 端口的請求被均衡負載掉了 (紅框的 MARK 內為負載均衡)
4. 演示 ipvs
在 docker host 安裝 ipvsadm
sudo yum install -y ipvsadm
進入 ingress_sbox
sudo nsenter --net=/var/run/docker/netns/ingress_sbox
使用 ipvsadmin 查看 請求到 的 有效 ip 地址 及 權重 等信息
查看 docker-node2 內的 whoami 的 網絡地址
docker ps 查詢 container id
docker exec [container id] ip a
可以看出 與 ipvsadm ls 能對應上
5.總體流程