1. 程式人生 > 實用技巧 >容器網路(八)Weave 網路結構分析【59】

容器網路(八)Weave 網路結構分析【59】

(十七)Weave 網路結構分析

上一節我們安裝並建立了 Weave 網路,本節將部署容器並分析網路結構。

在 host1 中執行容器 bbox1:

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 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    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
25: eth0@if26: <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
27: ethwe@if28: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1376 qdisc noqueue 
    link/ether 72:28:6a:63:a6:ea 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
root@host1:~# 

bbox1 有兩個網路介面 eth0 和 ethwe,其中 eth0 連線的是預設 bridge 網路,即網橋 docker0。

現在我們重點分析 ethwe。從命名和分配的 IP 10.32.0.1/12 可以猜測 ethwe 與 weave 相關,ethwe@if28 告訴我們與 ethwe 對應的是編號 27 的 interface。從 host1 的 ip link` 命令輸出中找到該 interface:

28: vethwepl9602@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1376 qdisc noqueue master weave state UP mode DEFAULT group default 
    link/ether a2:31:cd:31:38:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0
root@host1:~# 

vethwepl9602與ethwe是一對 veth pair,而且 vethwepl9602 掛在 host1 的 Linux bridgeweave上。

root@host1:~# brctl show
bridge name	bridge id		STP enabled	interfaces
br-283474cba87c		8000.024243ac3d30	no		
br-ba21840c1713		8000.0242f076f3a5	no		
docker0		8000.02429b0a69cd	no		vethc529fcc
weave		8000.c6160b5837f6	no		vethwe-bridge
							vethwepl9602
root@host1:~# 

除了 vethwepl9602,weave 上還掛了一個vethwe-bridge,這是什麼?讓我們更深入的分析一下,檢視ip -d link輸出:

這裡出現了多個新 interface:

vethwe-bridgevethwe-datapath 是 veth pair。

vethwe-datapath 的父裝置(master)是 datapath

datapath 是一個 openvswitch。

vxlan-6784 是 vxlan interface,其 master 也是 datapath,weave 主機間是通過 VxLAN 通訊的。

host1 的網路結構如下圖所示:

weave 網路包含兩個虛擬交換機:Linux bridgeweave和 Open vSwitchdatapath,veth pairvethwe-bridgevethwe-datapath將二者連線在一起。 weavedatapath分工不同,weave負責將容器接入 weave 網路,datapath負責在主機間 VxLAN 隧道中並收發資料。

再執行一個容器 bbox2。

root@host1:~# docker run --name bbox2 -itd busybox
db6161d808f59b933bac57a6b35f47c17892686a052787d765c6a3475231dccc
root@host1:~# 

weave DNS 為容器建立了預設域名weave.local,bbox1 能夠直接通過 hostname 與 bbox2 通訊。

root@host1:~# docker exec -it bbox1 hostname
bbox1.weave.local
root@host1:~# docker exec  -it bbox1 ping -c 2 bbox2
PING bbox1 (10.32.0.1): 56 data bytes
64 bytes from 10.32.0.1: seq=0 ttl=64 time=0.077 ms
64 bytes from 10.32.0.1: seq=1 ttl=64 time=0.055 ms
root@host1:~#

當前 host1 網路結構為: