Docker Weave网络部署
Weave在Docker主机之间实现Overlay网络,使用业界标准VXLAN封装,基于UDP传输,也可以加密传输。
Weave Net创建一个连接多个Docker主机的虚拟网络,类似于一个以太网交换机,所有的容器都连接到这上面,互相通信。
Weave Net由多个peer组成,Weave路由器运行不同Docker主机上,是一个用户空间的进程;每个peer都有一个名称,重启保持不变。它们通过TCP连接彼此,建立后交换拓扑信息。
Weave Net可以在具有编号拓扑的部分连接的网络中路由数据包。例如,在下面网络中,peer1直接连接2和3,但是如果1需要发送数据包到4和5,则必须先将其发送到peer3。
WeaveNet中的”fastdatapath”使用Linux内核的OpenvSwichdatapath模块。该模块使WeaveNet路由器能够告知内核如何处理数据包。OpenvSwichdatapath和VXLAN功能在Linux内核版本3.12+才支持,如果内核不支持,则WeaveNet使用”usermode”数据包路径。WeaveNet会自动选择两台主机之间最快的路径传输数据,提供近原生吞吐量和延迟。
docker weave网络是将多个宿主机上的docker应用容器进行建立连接相互访问。
Weave Net 路由器相互建立 TCP 连接,通过该连接执行协议握手并随后交换 拓扑信息。如果这样配置,这些连接将被加密。对等点还建立 UDP“连接”,可能是加密的,它携带封装的网络数据包。这些“连接”是双工的,可以穿越防火墙。
文章底部扫码,免费领取Linux云计算资料大礼包!
部署
使用前提:
1.确保Linux内核版本3.8+,Docker1.10+。
2.节点之间如果有防火墙时,必须彼此放行TCP 6783和UDP 6783/6784端口,这是Weave控制和数据端口。
3.主机名不能相同,通过主机名标识子网。
复制代码
安装Weave
(两个节点均执行)
机器一 es1 10.3.148.214
机器二 es2 10.3.148.213
复制代码
cd /usr/local
git clone https://github.com/weaveworks/weave
加速地址: https://ghproxy.com/https://github.com/weaveworks/weave.git
cd /usr/local/weave/
cp weave /usr/local/bin/
复制代码
文章底部扫码,免费领取Linux云计算资料大礼包!
启动并于其他主机连接
[root@es1 local]# weave launch 10.3.148.213
ec5c1688ec0cb03927faad019271d26dbae91ba5c71a4f2a54fa808329580341
[root@es2 ~]# weave launch 10.3.148.214
0ba9bc8a550a3b711aec7b6f64ae8568eabf27ff81fea730648be3ad355cb7c8
复制代码
注意:es1主机如果和es2之间有防火墙,您必须允许流量通过 TCP 6783 和 UDP 6783/6784,它们是 Weave 的控制和数据端口。
查看docker网络
新增了一个weave网络驱动
[root@es1 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
984f097b68fa bridge bridge local
7762f55e7b2a host host local
b4bf8bcd995e none null local
e6e54df84186 weave weavemesh local
复制代码
查看 weave docker容器
[root@es1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec5c1688ec0c weaveworks/weave:latest "/home/weave/weaver …" About a minute ago Up About a minute weave
复制代码
查看weave建立连接信息
weave status connections
[root@es1 ~]# weave status connections
<- 10.3.148.213:39903 established fastdp 2e:fa:0d:f9:26:ea(es2) mtu=1376
[root@es2 ~]# weave status connections
-> 10.3.148.214:6783 established fastdp 52:b6:e3:2e:57:2d(es1) mtu=1376
复制代码
文章底部扫码,免费领取Linux云计算资料大礼包!
docker容器使用加入weave网络
第一种方法指定网络驱动
[root@es2 ~]# docker run -itd --name test3 --net=weave busybox
1bb0f311a56e88c0c8b25f496956ebc5dd7b11aeef695e3f40600505207cfe75
[root@es2 ~]# docker attach test3
/ # ip a
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
34: ethwe0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1376 qdisc noqueue
link/ether 12:78:b6:ab:0e:9c brd ff:ff:ff:ff:ff:ff
inet 10.32.0.2/12 brd 10.47.255.255 scope global ethwe0
valid_lft forever preferred_lft forever
36: eth0@if37: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
复制代码
image-20230427213248647
跨级通信测试
[root@es1 ~]# docker run -it --name test1 --net=weave busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:656 (656.0 B) TX bytes:0 (0.0 B)
ethwe0 Link encap:Ethernet HWaddr C6:9C:5A:3C:AB:A6
inet addr:10.40.0.0 Bcast:10.47.255.255 Mask:255.240.0.0
UP BROADCAST RUNNING MULTICAST MTU:1376 Metric:1
RX packets:22 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1440 (1.4 KiB) TX bytes:700 (700.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # ping 10.32.0.2
PING 10.32.0.2 (10.32.0.2): 56 data bytes
64 bytes from 10.32.0.2: seq=0 ttl=64 time=0.811 ms
64 bytes from 10.32.0.2: seq=1 ttl=64 time=1.045 ms
^C
--- 10.32.0.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.811/0.928/1.045 ms
复制代码
文章底部扫码,免费领取Linux云计算资料大礼包!
第二种方法使用docker api:
weave env的结果就是连接docker的api,运行往export设置完环境变量,后续启动的容器都会使用这个api。
[root@es1 ~]# weave env
export DOCKER_HOST=unix:///var/run/weave/weave.sock ORIG_DOCKER_HOST=
[root@es1 ~]# eval $(weave env)
加入环境变量后可以直接启动docker,默认使用weave网络
# env
DOCKER_HOST=unix:///var/run/weave/weave.sock
ORIG_DOCKER_HOST=
[root@es1 ~]# docker run -it --name test2 busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:586 (586.0 B) TX bytes:0 (0.0 B)
ethwe Link encap:Ethernet HWaddr D6:B1:6F:7A:39:CD
inet addr:10.40.0.1 Bcast:10.47.255.255 Mask:255.240.0.0
UP BROADCAST RUNNING MULTICAST MTU:1376 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:488 (488.0 B) TX bytes:42 (42.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # ping 10.32.0.1
PING 10.32.0.1 (10.32.0.1): 56 data bytes
64 bytes from 10.32.0.1: seq=0 ttl=64 time=2.321 ms
64 bytes from 10.32.0.1: seq=1 ttl=64 time=1.632 ms
^C
--- 10.32.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 1.632/1.976/2.321 ms
如果上面的文章看着比较枯燥,点击下面的链接直接观看:
千锋教育新版Docker教程, 从零学会Docker容器化核心技术,通俗易懂无废话
也可以扫码直接观看视频哦!绝对的干货满满,更多精彩视频B站搜索“千锋教育”