docker網絡學習-weave

主要參考天天5分鐘玩轉docker容器技術博客。
記錄下本身的實驗過程。
若是想學習,請直接參考該博客http://www.cnblogs.com/CloudMan6/

概述

Weave建立的虛擬網絡將部署在多個主機上的容器鏈接起來。html

對容器而言,weave就像一個巨大的以太網交換機,全部容器都被接入這個交換機,容器能夠直接通訊,無需nat和端口映射。git

weave的dns模塊使容器能夠經過hostname訪問docker

weave不依賴分佈是數據庫交換網絡信息,每一個主機上只需運行weave組件就能創建起跨主機的容器網絡。數據庫

搭建實驗環境

安裝部署weave

在實驗機器上執行以下命令網絡

curl -L git.io/weave -o /usr/local/bin/weave
chmod a+x /usr/local/bin/weave

在host1中啓動weave

host1中執行weave launch,啓動weave相關服務。curl

weave的全部組件以容器運行oop

root@host1:~# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
e6c28480e461        weaveworks/weave:2.3.0   "/home/weave/weaver ??   4 seconds ago       Up 4 seconds                            weave

weave會建立一個新的docker網絡weave學習

root@host1:~# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
810c1c359ba2        bridge              bridge              local
1085e045479e        host                host                local
8a7c9f8a4f9f        none                null                local
5cdb070956f9        weave               weavemesh           local

該網絡的詳情url

root@host1:~# docker network inspect 5cdb070956f9|more
[
    {
        "Name": "weave",
        "Id": "5cdb070956f9ce7ef2cdc29fc62cfe55c4128de3283b385de63074276956ff33",
        "Created": "2018-05-22T22:21:54.904364416+08:00",
        "Scope": "local",
        "Driver": "weavemesh",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "weavemesh",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.32.0.0/12"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "works.weave.multicast": "true"
        },
        "Labels": {}
    }
]

在host1中運行容器bbox1rest

root@host1:~# eval $(weave env)
root@host1:~# docker run --name bbox1 -itd busybox

首先執行 eval $(weave env) 很重要,其做用是將後續的 docker 命令發給 weave proxy 處理。若是要恢復以前的環境,可執行 eval $(weave env --restore)。

查看一下當前容器bbox1的網絡配置

root@host1:~# docker exec -it bbox1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
14: ethwe@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1376 qdisc noqueue 
    link/ether 16:8c:eb:85:98:2c brd ff:ff:ff:ff:ff:ff
    inet 10.32.0.1/12 brd 10.47.255.255 scope global ethwe
       valid_lft forever preferred_lft forever

bbox1有兩個網絡接口eth0和ethwe,其中eth0鏈接的是默認bridge網絡,即docker0.

vethwe與vethwepl2516時一對veth pair。

root@host1:~# brctl show
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242d3efdb74    no        veth7fb85fa
weave        8000.cebc0b34efc6    no        vethwe-bridge
                            vethwepl2516

網絡詳細講解可看連接

weave 網絡包含兩個虛擬交換機:Linux bridge weave 和 Open vSwitch datapath,veth pair vethwe-bridge 和 vethwe-datapath 將兩者鏈接在一塊兒。weave 和 datapath 分工不一樣,weave 負責將容器接入 weave 網絡,datapath 負責在主機間 VxLAN 隧道中並收發數據。

跨主機容器鏈接

在host2上執行以下命令:

weave launch host1_ip

*必須指定host1的ip,這樣host1和host2才能加入到同一個weave網絡

root@host2:~# eval $(weave env)
root@host2:~# docker run --name bbox3 -itd busybox

weave網絡連通性

bbox3 能夠ping通bbox1

root@host2:~# docker exec bbox3 ping bbox1
PING bbox1 (10.32.0.1): 56 data bytes
64 bytes from 10.32.0.1: seq=0 ttl=64 time=1.867 ms
64 bytes from 10.32.0.1: seq=1 ttl=64 time=1.345 ms

連接

若是要實現網絡隔離,能夠經過環境變量 WEAVE_CIDR 爲容器分配不一樣 subnet 的 IP

相關文章
相關標籤/搜索