33. docker swarm 集群服務通信 之 RoutingMesh - Ingress 網絡


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.總體流程

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM