久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Docker網(wǎng)絡解決方案-Weave部署記錄

 WindySky 2018-04-02

前面說到了Flannel的部署,,今天這里說下Docker跨主機容器間網(wǎng)絡通信的另一個工具Weave的使用。當容器分布在多個不同的主機上時,,這些容器之間的相互通信變得復雜起來,。容器在不同主機之間都使用的是自己的私有IP地址,不同主機的容器之間進行通訊需要將主機的端口映射到容器的端口上,,而且IP地址需要使用主機的IP地址,。Weave正是為了解決這個問題而出現(xiàn)的,它把不同主機上容器互相連接的網(wǎng)絡虛擬成一個類似于本地網(wǎng)絡的網(wǎng)絡,。

如果了解SDN技術或者部署過OpenStack的網(wǎng)絡模塊(Neutron)的話,,這里通過Weave構建的網(wǎng)絡與它們比較類似。它是在一個網(wǎng)絡的基礎上,,構建了一層由軟件定義的網(wǎng)絡層,,這個網(wǎng)絡看起來就像是一個本地的局域網(wǎng),但是實際上它的底層通過另一個網(wǎng)絡進行通信,。這個網(wǎng)絡可能會比實際物理局域網(wǎng)的可靠性要差一些,,但是從可用性角度來看,它帶來了很大的便利性:可以在位于不同位置的節(jié)點之間通信,,而好像它們在一個地方一樣,。也可以把這種網(wǎng)絡想象成一個類似于VPN似的東西。

Weave介紹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Weave是Github上一個比較熱門的Docker容器網(wǎng)絡方案,,具有非常良好的易用性且功能強大,。Weave 的框架它包含了兩大主要組件:
1)Weave:用戶態(tài)的shell腳本,用于安裝Weave,,將container連接到Weave虛擬網(wǎng)絡,。并為它們分配IP。
2)Weaver:運行于container內,,每個Weave網(wǎng)絡內的主機都要運行,,是一個Go語言實現(xiàn)的虛擬網(wǎng)絡路由器,。不同主機之間的網(wǎng)絡通信依賴于Weaver路由。
  
Weave通過創(chuàng)建虛擬網(wǎng)絡使Docker容器能夠跨主機通信并能夠自動相互發(fā)現(xiàn),。
通過weave網(wǎng)絡,,由多個容器構成的基于微服務架構的應用可以運行在任何地方:主機,多主機,,云上或者數(shù)據(jù)中心,。
應用程序使用網(wǎng)絡就好像容器是插在同一個網(wǎng)絡交換機上一樣,不需要配置端口映射,,連接等。
在weave網(wǎng)絡中,,使用應用容器提供的服務可以暴露給外部,,而不用管它們運行在何處。類似地,,現(xiàn)存的內部系統(tǒng)也可以接受來自于應用容器的請求,,而不管容器運行于何處。
一個Weave網(wǎng)絡由一系列的'peers'構成----這些weave路由器存在于不同的主機上,。每個peer都由一個名字,,這個名字在重啟之后保持不變.這個名字便于用戶理解和區(qū)分日志信息。
每個peer在每次運行時都會有一個不同的唯一標識符(UID).對于路由器而言,,這些標識符不是透明的,,盡管名字默認是路由器的MAC地址。
Weave路由器之間建立起TCP連接,,通過這個連接進行心跳握手和拓撲信息交換,,這些連接可以通過配置進行加密。
peers之間還會建立UDP連接,,也可以進行加密,,這些UDP連接用于網(wǎng)絡包的封裝,這些連接是雙工的而且可以穿越防火墻,。
Weave網(wǎng)絡在主機上創(chuàng)建一個網(wǎng)橋,每個容器通過veth pari連接到網(wǎng)橋上,,容器由用戶或者weave網(wǎng)絡的IPADM分配IP地址。

選擇Weave的原因,?

1
2
3
4
1)無憂的配置
Weave網(wǎng)絡能夠簡化容器網(wǎng)絡的配置,。因為weave網(wǎng)絡中的容器使用標準的端口提供服務(如,MySQL默認使用3306),管理微服務是十分直接簡單的,。
每個容器都可以通過域名來與另外的容器通信,,也可以直接通信而無需使用NAT,也不需要使用端口映射或者復雜的linking.
部署weave容器網(wǎng)絡的最大的好處是無需修改你的應用代碼,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2)服務發(fā)現(xiàn)
Weave網(wǎng)絡通過在每個節(jié)點上啟動一個"微型的DNS"服務來實現(xiàn)服務發(fā)現(xiàn),。你只需要給你的容器起個名字就可以使用服務發(fā)現(xiàn)了,還可以在多個同名的容器上提供負載均衡的功能。
3)不需要額外的集群存儲
所有其它的Docker網(wǎng)絡插件,,包括Docker自帶的"overlay"驅動,,在你真正能使用它們之間,都需要安裝額外的集群存儲----一個像Consul或者Zookeepr那樣的中心數(shù)據(jù)庫. 除了安裝,,維護和管理困難外,,甚至Docker主機需要始終與集群存儲保持連接,如果你斷開了與其的連接,,盡管很短暫,,你也不能夠啟動和停止任何容器了。
Weave網(wǎng)絡是與Docker網(wǎng)絡插件捆綁在一起的,,這意味著你可以馬上就使用它,,而且可以在網(wǎng)絡連接出現(xiàn)問題時依舊啟動和停止容器。
關于更多Weave Docker插件的介紹,,請查看 Weave Network Plugin如何工作.
4)在部分連接情況下進行操作
Weave網(wǎng)絡能夠在節(jié)點間轉發(fā)流量,,它甚至能夠在網(wǎng)狀網(wǎng)絡部分連接的情況下工作。這意味著你可以在混合了傳統(tǒng)系統(tǒng)和容器化的應用的環(huán)境中使用Weave網(wǎng)絡來保持通信,。
5)Weave網(wǎng)絡很快
Weave網(wǎng)絡自動在兩個節(jié)點之間選擇最快的路徑,,提供接近本地網(wǎng)絡的吞吐量和延遲,而且這不需要你的干預,。
關于Fast Datapath如何工作請參考 How Fast Datapath Works .
6)組播支持
Weave網(wǎng)絡完全支持組播地址和路徑,。數(shù)據(jù)可以被發(fā)送給一個組播地址,數(shù)據(jù)的副本可以被自動地廣播,。
7)NAT 轉換
使用Weave網(wǎng)絡,,部署你的應用---無論是點對點的文件共享,基于ip的voice或者其它應用,,你都可以充分利用內置的NAT轉換,。通過Weave網(wǎng)絡,你的app將會是可移值的,,容器化的,,
加上它對網(wǎng)絡標準化的處理,將又會使你少關心一件事,。
8)與任何框架集成: Kubernetes, Mesos, Amazon ECS, …
如果你想為所有的框架使用一個工具,,Weave網(wǎng)絡是一個好的選擇。比如: 除了作為Docker插件使用,,你還可以將其作為一個Kubernetes插件plugin.你還可以在 Amazon ECS ,Mesos和
Marathon中使用它.

weave網(wǎng)絡通信模型

1
weave通過在docker集群的每個主機上啟動虛擬的路由器,,將主機作為路由器,形成互聯(lián)互通的網(wǎng)絡拓撲,,在此基礎上,,實現(xiàn)容器的跨主機通信,。其主機網(wǎng)絡拓撲參見下圖:

 

1
2
3
4
5
如上圖所示,在每一個部署Docker的主機(可能是物理機也可能是虛擬機)上都部署有一個W(即weave router,,它本身也可以以一個容器的形式部署),。
weave網(wǎng)絡是由這些weave routers組成的對等端點(peer)構成,并且可以通過weave命令行定制網(wǎng)絡拓撲,。
每個部署了weave router的主機之間都會建立TCP和UDP兩個連接,,保證weave router之間控制面流量和數(shù)據(jù)面流量的通過??刂泼嬗蓋eave routers之間建立的TCP連接構成,,通過它進行握手和拓撲關系信息的交換通信??刂泼娴耐ㄐ趴梢员慌渲脼榧用芡ㄐ?。而數(shù)據(jù)面由weave routers之間建立的UDP連接構成,這些連接大部分都會加密,。這些連接都是全雙工的,并且可以穿越防火墻,。
當容器通過weave進行跨主機通信時,,其網(wǎng)絡通信模型可以參考下圖:

1
2
3
4
5
6
7
8
9
10
11
12
從上面的網(wǎng)絡模型圖中可以看出,對每一個weave網(wǎng)絡中的容器,,weave都會創(chuàng)建一個網(wǎng)橋,,并且在網(wǎng)橋和每個容器之間創(chuàng)建一個veth pair,一端作為容器網(wǎng)卡加入到容器的網(wǎng)絡命名空間中,,并為容器網(wǎng)卡配置ip和相應的掩碼,,一端連接在網(wǎng)橋上,最終通過宿主機上weave router將流量轉發(fā)到對端主機上,。
其基本過程如下:
1)容器流量通過veth pair到達宿主機上weave router網(wǎng)橋上,。
2)weave router在混雜模式下使用pcap在網(wǎng)橋上截獲網(wǎng)絡數(shù)據(jù)包,并排除由內核直接通過網(wǎng)橋轉發(fā)的數(shù)據(jù)流量,,例如本子網(wǎng)內部,、本地容器之間的數(shù)據(jù)以及宿主機和本地容
   器之間的流量。捕獲的包通過UDP轉發(fā)到所其他主機的weave router端,。
3)在接收端,,weave router通過pcap將包注入到網(wǎng)橋上的接口,通過網(wǎng)橋的上的veth pair,,將流量分發(fā)到容器的網(wǎng)卡上,。
    
weave默認基于UDP承載容器之間的數(shù)據(jù)包,并且可以完全自定義整個集群的網(wǎng)絡拓撲,,但從性能和使用角度來看,,還是有比較大的缺陷的:
1)weave自定義容器數(shù)據(jù)包的封包解包方式,,不夠通用,傳輸效率比較低,,性能上的損失也比較大,。
2)集群配置比較負載,需要通過weave命令行來手工構建網(wǎng)絡拓撲,,在大規(guī)模集群的情況下,,加重了管理員的負擔。

Weave的安裝與啟動

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
1)直接從github下載二進制文件安裝,。
[root@localhost ~]# wget -O /usr/local/bin/weave https://raw./zettio/weave/master/weave
[root@localhost ~]# chmod a+x /usr/local/bin/weave
     
2)啟動weave路由器,,這個路由器其實也是以容器的形式運行的。(前提是已經(jīng)啟動了docker服務進程)
[root@localhost ~]# weave launch                      
Unable to find image 'weaveworks/weaveexec:latest' locally
Trying to pull repository docker.io/weaveworks/weaveexec ...
latest: Pulling from docker.io/weaveworks/weaveexec
79650cf9cc01: Pull complete
a0a33a8311d7: Pull complete
e95af5f75fa8: Pull complete
7119d296ce72: Pull complete
7f0698aa2117: Pull complete
db711cb12a2b: Pull complete
.......
     
3)查看鏡像,,可以發(fā)現(xiàn)上面下載的weave路由容器鏡像
[root@localhost ~]# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
docker.io/weaveworks/weaveexec     latest              e4870c565dfa        11 hours ago        107.7 MB
docker.io/weaveworks/weave         latest              70bd2bf0b0eb        11 hours ago        58.22 MB
docker.io/weaveworks/weavedb       latest              9a4a497119c4        3 months ago        252 B
docker.io/centos                 latest              67591570dd29        5 months ago        191.8 MB
     
4)此時會發(fā)現(xiàn)有兩個網(wǎng)橋,,一個是Docker默認生成的,另一個是Weave生成的,。
[root@localhost ~]# brctl show                                     #yum安裝bridge-utils工具后,,就會出現(xiàn)brctl命令    
bridge name bridge id       STP enabled interfaces
docker0     8000.0242376456d7   no 
weave       8000.32298bba31f1   no      vethwe-bridge
     
查看運行的容器,發(fā)現(xiàn)weave路由容器已經(jīng)自動運行
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
c5aacecbe40e        weaveworks/weave:latest   "/home/weave/weaver -"   6 minutes ago       Up 6 minutes                            weave
     
weave關閉
[root@localhost ~]# weave stop
或者直接關閉weave容器
[root@localhost ~]# docker stop weave
[root@localhost ~]# docker rm weave
  
weave命令幫助
[root@localhost ~]#weave --help
Usage:
    
weave --help | help
      setup
      version
    
weave launch        [--password <pass>] [--trusted-subnets <cidr>,...]
                    [--host <ip_address>]
                    [--name <mac>] [--nickname <nickname>]
                    [--no-restart] [--resume] [--no-discovery] [--no-dns]
                    [--ipalloc-init <mode>]
                    [--ipalloc-range <cidr> [--ipalloc-default-subnet <cidr>]]
                    [--plugin=false] [--proxy=false]
                    [-H <endpoint>] [--without-dns] [--no-multicast-route]
                    [--no-rewrite-hosts] [--no-default-ipalloc]
                    [--hostname-from-label <labelkey>]
                    [--hostname-match <regexp>]
                    [--hostname-replacement <replacement>]
                    [--rewrite-inspect]
                    [--log-level=debug|info|warning|error]
                    <peer> ...
    
weave prime
    
weave env           [--restore]
      config
      dns-args
    
weave connect       [--replace] [<peer> ...]
      forget        <peer> ...
    
weave attach        [--without-dns] [--rewrite-hosts] [--no-multicast-route]
                      [<addr> ...] <container_id>
      detach        [<addr> ...] <container_id>
    
weave expose        [<addr> ...] [-h <fqdn>]
      hide          [<addr> ...]
    
weave dns-add       [<ip_address> ...] <container_id> [-h <fqdn>] |
                    <ip_address> ... -h <fqdn>
      dns-remove    [<ip_address> ...] <container_id> [-h <fqdn>] |
                    <ip_address> ... -h <fqdn>
      dns-lookup    <unqualified_name>
    
weave status        [targets | connections | peers | dns | ipam]
      report        [-f <format>]
      ps            [<container_id> ...]
    
weave stop
    
weave reset         [--force]
      rmpeer        <peer_id> ...
    
where <peer>     = <ip_address_or_fqdn>[:<port>]
      <cidr>     = <ip_address>/<routing_prefix_length>
      <addr>     = [ip:]<cidr> | net:<cidr> | net:default
      <endpoint> = [tcp://][<ip_address>]:<port> | [unix://]/path/to/socket
      <peer_id>  = <nickname> | <weave internal peer ID>
      <mode>     = consensus[=<count>] | seed=<mac>,... | observer
    
接下來就可以運行應用容器,,使用weave提供的網(wǎng)絡功能了,。

Weave的應用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
1)機器環(huán)境準備:
node-1    103.10.86.238 
node-2    103.10.86.239    
node-1宿主機上的應用容器my-test1: 192.168.0.2/24
node-2宿主機上的應用容器my-test2: 192.168.0.3/24
兩臺機上均安裝Docker及Weave,并均啟動好Weave路由容器(安裝及啟動操作如上),。最好關閉兩臺機器的防火墻?。ㄈ绻蜷_防火墻,需要開放6783端口)
2)在兩臺機上均啟動一個應用容器,,有以下兩種方式:
第一種方式:可以直接使用weave run命令,;
[root@node-1 ~]# weave run 192.168.0.2/24 -itd docker.io/centos /bin/bash
The 'weave run' command has been removed as of Weave Net version 2.0
Please see release notes for further information
由上可知,weave在2.0版本之后就沒有“docker run”這個命令了,,所以還是使用下面的第二種方式
第二種方式:先使用docker run啟動好容器,,然后使用weave attach命令給容器綁定IP地址
在node-1機器上啟動第一個容器my-test1,容器ip綁定為192.168.0.2
[root@node-1 ~]# docker run -itd --name=my-test1 docker.io/centos /bin/bash
06d70049141048798519bfa1292ed81068fc28f1e142a51d22afd8f3fc6d0239
[root@node-1 ~]# weave attach 192.168.0.2/24 my-test1           #使用容器名稱或容器id都可以,;即給my-test1容器綁定ip為192.168.0.2
192.168.0.2
[root@node-1 ~]# docker exec -ti my-test1 /bin/bash
[root@00efd39d3a7d /]# ifconfig              #執(zhí)行安裝yum install -y net-tools,,就會出現(xiàn)ifconfig命令
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:acff:fe11:2  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 5559  bytes 11893401 (11.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5287  bytes 410268 (400.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ethwe: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1376
        inet 192.168.0.2  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::88b0:ddff:fea2:58c5  prefixlen 64  scopeid 0x20<link>
        ether 8a:b0:dd:a2:58:c5  txqueuelen 0  (Ethernet)
        RX packets 97  bytes 7234 (7.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 66  bytes 4316 (4.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 21  bytes 2352 (2.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21  bytes 2352 (2.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
在node-2機器上啟動容器my-test2,容器ip綁定為192.168.0.3
[root@node-2 ~]# docker run -itd --name=my-test2 docker.io/centos /bin/bash
8f2ecc2449a0be1f1be2825cb211f275f9adb2109249ab0ff1ced6bbb92dd733
[root@node-2 ~]# weave attach 192.168.0.3/24 my-test2                     //weave detach 192.168.0.3/24 my-test2表示刪除這個綁定
192.168.0.3
[root@node-2 ~]# docker exec -ti my-test2 /bin/bash
[root@e0ed62d30226 /]# ifconfig                                          //或者ip addr命令查看
......
ethwe: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1376
        inet 192.168.0.3  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::3064:8fff:fe3c:909a  prefixlen 64  scopeid 0x20<link>
        ether 32:64:8f:3c:90:9a  txqueuelen 0  (Ethernet)
        RX packets 63  bytes 4734 (4.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 34  bytes 2580 (2.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
溫馨提示:
上面在docker run啟動容器時,,可以添加--net=none參數(shù),,這個表示容器啟動后不使用默認的虛擬網(wǎng)卡docker0自動分配的ip,而是使用weave綁定的ip,;
當然也可以選擇不添加這個參數(shù)去啟動容器,,這樣,容器啟動后就會有兩個網(wǎng)卡,,即兩個ip:
一個是docker0自動分配的ip,,這個適用于同主機內的容器間通信,,即同主機的容器使用docker0分配的ip可以相互通信;另一個就是weave網(wǎng)橋綁定的ip,。
3)容器互聯(lián)
默認情況下,,上面在node-1和node-2兩臺宿主機上創(chuàng)建的2個容器間都是相互ping不通的。需要使用weave connect命令在兩臺weave的路由器之間建立連接,。
[root@node-1 ~]# weave connect 103.10.86.239                            //連接的是對方宿主機的ip,,注意"weave forget ip" z則表示斷開這個連接
然后就會發(fā)現(xiàn),此時位于兩臺不同主機上的相同子網(wǎng)段內的容器之間可以相互ping通了
[root@node-1 ~]# docker exec -ti my-test1 /bin/bash
[root@00efd39d3a7d /]# ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=3.27 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.657 ms
.....
[root@node-2 ~]# docker exec -ti my-test2 /bin/bash
[root@e0ed62d30226 /]# ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.453 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.320 ms
.....
再在node-1上啟動容器my-test3,,綁定ip為192.168.0.8,,在node-2上啟動容器my-test4,綁定ip為192.168.0.10
會發(fā)現(xiàn)這四個在同一個子網(wǎng)內的容器都是可以相互ping通的,。
--------------------------------------------------------------------------------------------------------
再接著啟動與上面不在同一個子網(wǎng)內的容器
node-1上啟動容器my-test4,,綁定ip為192.168.10.10,node-2上啟動容器my-test5,,綁定ip為192.168.10.20
[root@node-1 ~]# docker run -itd --name=my-test5 docker.io/centos /bin/bash
2896b6cad7afcd57d8b9091a020f1837992bade2567752614caf3cb645b6d315
[root@node-1 ~]# weave attach 192.168.10.10/24 my-test5
192.168.10.10
[root@node-1 ~]# docker exec -ti my-test5 /bin/bash
[root@2896b6cad7af /]#
[root@node-2 ~]# docker run -itd --name=my-test6 docker.io/centos /bin/bash
b4627f0a6e657f5dc719c917349ad832e15f360f75d5743b489f8e7e18b7dc2e
[root@node-2 ~]# weave attach 192.168.10.20/24 my-test6
192.168.10.20
[root@node-2 ~]# docker exec -ti my-test6 /bin/bash
[root@b4627f0a6e65 /]# ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.417 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.324 ms
......
會發(fā)現(xiàn)在跨主機情況下,,相同子網(wǎng)內的容器是可以相互通信的;但是處于不同子網(wǎng)的兩個容器是不能互聯(lián)的,,盡管這兩個容器在同一個主機下也是不能通信的,!
這樣的好處就是:使用不同子網(wǎng)進行容器間的網(wǎng)絡隔離了。
--------------------------------------------------------------------------------------------------------
注意一個細節(jié),,在使用weave的時候:
1)如果使用Docker的原生網(wǎng)絡,在容器內部是可以訪問宿主機以及外部網(wǎng)絡的,。也就是說在啟動容器的時候,,使用了虛擬網(wǎng)卡docker0分配ip,
這種情況下,,登陸容器后是可以ping通宿主機ip,,并且可以對外聯(lián)網(wǎng)的!
這個時候,,在宿主機上是可以ping通docker0網(wǎng)橋的ip,,但是ping不通weave網(wǎng)橋的ip。這個時候可以使用
"weave expose 192.168.0.1/24"命令來給weave網(wǎng)橋添加IP,,以實現(xiàn)容器與宿主機網(wǎng)絡連通,。如下:
默認在node-1和node-2宿主機上是ping不通my-test1容器的weave網(wǎng)橋ip的
[root@node-1 ~]# ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
.......
[root@node-2 ~]# ping 192.168.0.3
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
.......
在node-1和node-2兩臺機器上都添加weave網(wǎng)橋的ip
[root@node-1 ~]# weave expose 192.168.0.1/24            //注意這里的192.168.0.1/24是上面my-test1、my-test2,、my-test3,、my-test4容器的weave網(wǎng)橋的網(wǎng)關地址
[root@node-2 ~]# weave expose 192.168.0.1/24            //weave hide 192.168.0.1/24表示覆蓋/刪除這個設置
然后再在兩臺宿主機上ping上面同網(wǎng)段內的容器,發(fā)現(xiàn)都可以ping通了
[root@node-1 ~]# ping 192.168.0.10
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.391 ms
64 bytes from 192.168.0.3: icmp_seq=5 ttl=64 time=0.363 ms
[root@node-2 ~]# ping 192.168.0.8
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.391 ms
64 bytes from 192.168.0.3: icmp_seq=5 ttl=64 time=0.363 ms
然后再給另一網(wǎng)段的容器的weave網(wǎng)橋添加ip(可以在宿主機上對不同網(wǎng)段的容器的weave網(wǎng)橋添加ip)
[root@node-1 ~]# weave expose 192.168.10.1/24
[root@node-2 ~]# weave expose 192.168.10.1/24
[root@node-1 ~]# ping 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=2.50 ms
64 bytes from 192.168.10.20: icmp_seq=2 ttl=64 time=0.318 ms
[root@node-2 ~]# ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.335 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.310 ms
2)如果不適用Docker的原生網(wǎng)絡,,即在容器啟動的時候,,添加--net=none,,這樣容器啟動后,就不會使用docker0網(wǎng)卡分配ip,。
這種情況下,,登陸容器后發(fā)現(xiàn)不能訪問宿主機以及外部網(wǎng)絡的,而在宿主機上也不能ping通容器ip,。
這個時候添加對應容器網(wǎng)段的weave網(wǎng)橋ip,,這樣可以實現(xiàn)容器與宿主機網(wǎng)絡連通。但是,,此時在容器內部依然不能訪問外部網(wǎng)絡,。
所以說,可以同時使用Docker的原生網(wǎng)絡和weave網(wǎng)絡來實現(xiàn)容器互聯(lián)及容器訪問外網(wǎng)和端口映射,。
使用外部網(wǎng)絡及端口映射的時候就使用docker0網(wǎng)橋,,需要容器互聯(lián)的時候就使用weave網(wǎng)橋。每個容器分配兩個網(wǎng)卡,。

weave的其他特性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
1)應用隔離:
不同子網(wǎng)容器之間默認隔離的,,即便它們位于同一臺物理機上也相互不通(使用-icc=false關閉容器互通);不同物理機之間的容器默認也是隔離的
  
2)安全性:
可以通過weave launch -password wEaVe設置一個密碼用于weave peers之間加密通信
  
3)查看weave路由狀態(tài):weave ps
[root@node-1 ~]# weave ps
weave:expose 06:9d:3b:91:3d:f3 192.168.0.1/24 192.168.10.1/24
2896b6cad7af 56:46:8c:14:42:e6 192.168.10.10/24
c9aa381c1203 4a:0d:16:4d:bb:c2 192.168.0.8/24
00efd39d3a7d 8a:b0:dd:a2:58:c5 192.168.0.2/24
  
[root@node-2 ~]# weave ps
weave:expose 26:b8:82:03:ff:24 192.168.0.1/24 192.168.10.1/24
b4627f0a6e65 22:10:c4:b8:87:b3 192.168.10.20/24
61722c59e3a0 d2:d5:34:1e:86:df 192.168.0.10/24
e0ed62d30226 32:64:8f:3c:90:9a 192.168.0.3/24
  
4)效率
weave 路由通過pcap捕獲包這種方式來完成封裝和解封裝這個過程,,效率應該是有問題的,。
這個過程中需要將數(shù)據(jù)包從內核態(tài)拷貝到用戶態(tài),然后按照自定義的格式完成封裝和解封裝,。
--------------------------------------------------------------------------------------------------
在已經(jīng)關閉了weave(weave stop)后,,發(fā)現(xiàn)weave網(wǎng)橋信息還在:
[root@node-2 ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242b0c9bf2d   no     
weave       8000.22a85b2682a1   no      vethwe-bridge
[root@node-2 ~]# ifconfig
........
weave: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1376
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::20a8:5bff:fe26:82a1  prefixlen 64  scopeid 0x20<link>
        ether 22:a8:5b:26:82:a1  txqueuelen 0  (Ethernet)
        RX packets 57  bytes 3248 (3.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22  bytes 1460 (1.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
刪除weave網(wǎng)橋信息(其他ifconfig命令查出的網(wǎng)絡設備刪除的方法類似):
[root@node-2 ~]# ip link set dev weave down
[root@node-2 ~]# brctl delbr weave
[root@node-2 ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242b0c9bf2d   no 
***************當你發(fā)現(xiàn)自己的才華撐不起野心時,就請安靜下來學習吧***************
分類: Docker

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多