Docker容器跨主機訪問之overlay網絡


Docker跨主機網絡

overlay

准備overlay網絡實驗環境

      以容器的方式運行consul

sudo docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

      容器啟動后,可以通過http://10.211.55.20:8500來訪問consul 

      接下來修改兩個主機的docker daemon配置文件,其配置文件的路徑如下

/ect/stsytmd/system/multi-user.target.wants/docker.service 

      -H來允許遠程主機連接

      --cluster-store指定consul的地址

      --cluster-advertise告知consul自己的連接地址

      修改完配置文件后重啟docker daemon

sudo systemctl daemon-reload

sudo systemctl restart docker.service 

      兩個主機將自動注冊到consul數據庫中 

 

創建overlay網絡

      在第一台主機上創建overlay網絡overlay_net1 

      -d overlay指定driver為overlay

      用docker network ls來查看網絡 

      overlay_net1的SCOPE為global,而其他網絡為local,在第二台主機上查看存在的網絡 

      結果表明,在第二台主機上也能看到overlay_net1。這是因為創建overlay_net1時第一台主機將網絡信息存入了consul,第二台主機從consul中讀取到了新的網絡數據,之后overlay_net1的任何變化都會同步到兩台主機

      用docker network inspect overlay_net1來查看創建的overlay的詳細信息 

 

overlay中運行容器

      用前面創建的overlay網絡創建一個容器,並查看容器的網絡配置信息

      test15容器有兩個網絡接口eth0和eth1。eth0的IP為10.0.0.2,連接的是overlay網絡。eth1的IP為172.18.0.2,容器默認路由是走eth1。docker會創建一個bridge網絡“docker_gwbridge”,為所有連接到overlay網絡的容器提供訪問外網的能力 

      可以用docker network inspect來查看它的詳細信息 

      這樣容器就可以通過docker_gwbridge訪問外網 

      如果外網要訪問容器,可以通過主機端口映射,例如

sudo docker run -p 80:80 -d --net overlay_net1 --name web1 httpd

 

overlay實現跨主機通信

      前面在一台主機上運行了容器test15,現在在另一台主機上運行容器test16,並查看容器的網絡信息 

      test16的IP為10.0.0.3,在test16容器里面直接ping容器test15,由結果可以看出這兩個容器間可以通信,同時docker也實現了DNS服務 

      可以用以下方法來查看overlay網絡的namespace,可以看出兩個主機上有相同的namespace 

 

overlay的隔離

      不同的overlay網絡是相互隔離的。這里創建第二個overlay網絡,並運行容器test17 

      ping失敗,可見不同overlay網絡之間是隔離的,即便是通過docker_gwbridge也不能通信 

      要實現test15與test17通信,可以將test17也連接到overlay_net1中 

 


免責聲明!

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



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