天天看點

docker建立overylay網絡容器互通不了

@toc

背景

在用docker swarm想做跨主機容器互通的時候遇到容器互不通的問題,研究了好久

首先配置swarm叢集

docker swarm init   #管理節點上執行
docker swarm join --token SWMTKN-1-0iq85hac12m20vmc19s5xzlmnxi77ab74dn4adpuoa44bi0xmj-58e2jqov91fu2v7vw5vzp6coj 10.10.10.203:2377 #工作切點上執行           

給出試驗docker-compose檔案

version: "3.7"
networks:
  network-nginx:
    driver: overlay
services:
    nginx1:
      image: nginx:1.19.2
      ports:
        - 8801:80
      networks:
        - network-nginx
      deploy:
        mode: replicated
        replicas: 1
        restart_policy:
          condition: on-failure
    nginx2:
      image: nginx:1.19.2
      ports:
        - 8800:80
      networks:
        - network-nginx
      deploy:
        mode: replicated
        replicas: 1
        restart_policy:
          condition: on-failure
           

執行部署

docker stack deploy -c docker-compose-nginx.yml nginx

檢視部署結果

root@localhost-203-root-all docker-swarm]# docker stack ls

NAME SERVICES ORCHESTRATOR

nginx 2 Swarm

分别登陸兩個節點容器進行curl

結果是在nginx1容器curl nginx2:80卡住不響應

在nginx2容器curl nginx1:80同樣卡住不響應

檢視網絡

docker network ls
tepstma6heze   nginx_network-nginx     overlay   swarm           

發現兩個節點都有建立網絡

接下來做了以下檢查

  1. 檢查防火牆開放端口,發現curl主控端顯露的端口是可以
  2. 關閉selinux
  3. 檢視轉發是否開啟 cat /proc/sys/net/ipv4/ip_forward
  4. 更換另一台主機
  5. 手工單獨建立overla網絡測試

    建立overlay網絡進行測試

    安裝consul,因為需要将overlay網絡的配置資訊儲存在consul,才能在叢集傳遞
    docker run -id -p 8500:8500 harbor.xxx.com/xxx/consul:1.7.3
    配置/usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd後面增加--cluster-store=consul://10.10.10.203:8500 --cluster-advertise=ens192:2376

    修改配置後

    systemctl daemon-reload

    systemctl restart docker

    建立overlay網絡
    docker network create -d overlay --subnet 10.10.20.0/24 --attachable net
    這時在兩個節點檢視網絡都有了
    運作busybox測試

    結果仍然是網絡問題