19、《每天5分鐘玩轉Docker容器技術》學習--Overlay Network內部結構詳解

一、docker注意事項

    1、不要私自創建docker用戶和組。

    2、做實驗時,給虛擬機做快照,儘量在安裝完成操作系統、ssh、vim、docker、docker images下載之後。(之前的寫了一半的章,表示。。。)

    3、docker daemon文件注意如下;

        /etc/systemd/system/docker.service.d/xxx..conf

        /lib/systemd/system/docker.service

        /etc/docker

二、環境描述

圖片.png

以容器方式運行 Consul:

圖片.png

通過 http://192.168.56.131:8500 訪問 Consul

圖片.png

修改 docker02 和 docker03 的 docker daemon 的配置文件,將docker02和docker03註冊到consul數據庫中

注意:docker v1.11版本之後,以systemd方式管理docker,默認沒有創建配置文件,需要自己創建/etc/systemd/system/docker.service.d/docker.conf,詳情參考官網文檔:

https://docs.docker.com/engine/admin/systemd/

https://docs.docker.com/engine/admin/

啓動參數說明:https://docs.docker.com/engine/reference/commandline/dockerd/

       sudo mkdir /etc/systemd/system/docker.service.d
  實際情況中使用docker-machine安裝的docker host都會有此文件,使用apt-get或yum安裝的一般都不會有,如果沒有此文件,並且創建此文之後有如下報錯

圖片.png

圖片.png

可以修改/lib/systemd/system/docker.service

圖片.png

將docker01和docker02主機進行更改,添加如下內容:

--cluster-store=consul://192.168.56.131:8500   指定需要連接的consul數據庫;

--cluster-advertise=ens33:2376  指定通過哪個網口進行連接;

重啓 docker daemon

systemctl daemon-reload

systemctl restart docker

圖片.png

三、overlay實驗

        可以看到將兩臺docker主機docker01和docker02添加到了docker-mgr主機的consul數據庫中

 第一步:在docker01主機中創建overlay網絡over_net01

圖片.png

圖片.png

docker02主機中確認

圖片.png

第二步:網卡信息確認以docker01主機爲例

圖片.png

從這裏可以確認docker0網卡的IP地址爲172.17.0.1,是172.17.0.0網段

第三步:運行容器在over_net01網絡中,本次實驗容器排布如下

圖片.png

第四步:創建容器

圖片.png

圖片.png

做任何事情都有先後順序,我們從container--host的順序來解釋網絡情況,篇幅較長,跟住別丟

第五步:容器網絡信息以xbox1爲例

圖片.png

6: eth0@if7        10.0.0.2/24

9: eth1@if10      172.18.0.2/16

圖片.png

有兩條路由,分別是:

10.0.0.0            下一跳         10.0.0.2                6: eth0@if7

172.18.0.0       下一跳         172.18.0.2            9: eth1@if10

第六步:docker01主機端的網卡信息

圖片.png

圖片.png

8: docker_gwbridge            172.18.0.1/16            overlay網絡新創建了一個網絡

10: veth5b93e51@if9           虛擬網卡                可以得知此網卡橋接至docker_gwbridge

14: vethada8f0e@if13          虛擬網卡               可以得知此網卡橋接至docker_gwbridge

第七步:容器和主機之間的網卡關係

eth1網卡在第五步時我們分析到xbox1有兩個網卡,可以得到如下信息:

6: eth0@if7        10.0.0.2/24

9: eth1@if10      172.18.0.2/16

至此第一條網絡梳理可以明確,如下:

容器中:        9: eth1@if10      172.18.0.2/16            -------            docker主機中:            10: veth5b93e51@if9             172.18.0.1           -----            8: docker_gwbridge

這是橋接的基礎知識,不瞭解的同學請儘快掌握,這是docker網絡學習的基礎

這裏測試下容器是否可以訪問外網,這裏以訪問www.baidu.com爲例

圖片.png

可以訪問外網,那又是如何出去的呢?通過traceroute進行測試

圖片.png

可以發現容器是通過172.18.0.0網段出去,即通過docker_gwbridge出去,其中192.168.56.2是vmware的NAT網卡地址,發現172.18.0.1直接跳轉了192.168.56.2,這裏是NAT,又通過NAT跳轉到192.168.1.1,路由器的地址,然後出去到運營商,最後到www.baidu.com

至此,容器的其中一個網卡的數據走向已經明確,具體如下:

圖片.png

eth0網卡

那eth0網卡又是什麼情況呢?我們並沒有看到eth0網卡的信息?

這裏涉及到另外一個概念容器的namespace,不妨我們大膽的想象,另一條網絡就是通過namespace進行的,依據這個想象,我們進行驗證

圖片.png

docker network inspect over_net01

圖片.png

信息查看,這次我們依據host-------namespace的順序進行

圖片.png

可以看到信息

10: veth5b93e51@if9            link-netnsid 1

14: vethada8f0e@if13            link-netnsid 2

圖片.png

圖片.png

圖片.png

是不是發現    7: veth2@if6    這個網卡有點眼熟?這正是我們eth0網卡的連一個虛擬網卡,我們繼續往下看

圖片.png

發現所有網卡都被橋接到了br0上,正是這樣,我們容器之間通信可以完成了

具體結構如下:

圖片.png

至此overlay網絡單節點關係梳理清楚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章