Dockercon 2016 -- Weaveworks
Micro SDNs by Weaveworks
"Micro SDNs"建立在传统的SDN和经典网络之上,它和传统的区别在于软件的网络是在软件启动的时候自己配置好,还是首先人为配置好网络后再创建应用。通过"Micro SDNs"的方式可以减少很多软件部署时的错误,并能让软件得到快速的迭代。
Weaveworks' Weave Net是容器化部署的网络解决方案。Weaveworks的Micro SDN方案对开发者来说不仅易用,而且在生产环境保证高的可用性和健壮性。
Weave Net的容器网络的解决方案类似于因特网,不依赖于中心化的数据存储,Weave的路由会通过交换信息自动学习连接状态,而且Weave Net是目前唯一可以处理多播的网络传输的容器网络方案。
Weave Net可以和Weave Scope一起使用,它可以用实时图的方式展示目前集群的主机,容器,进程,以及他们之间的通信关系。
Weave实践:
准备机器
使用Docker Machine ECS在阿里云上生成两台阿里云的ECS虚拟机
安装和使用weave net
下载weave脚本
curl -L git.io/weave -o /usr/local/bin/weave
# 这个地方有可能被墙掉,可以用这个地址:http://docker-build.oss-cn-hangzhou.aliyuncs.com/weave
chmod a+x /usr/local/bin/weave
启动weave:
weave launch
设置Docker Host为weave的代理地址:
eval "$(weave env)"
在weave中启动三个容器并通过容器名或DNS通信:
~# docker run -itd --name test1 busybox
~# docker run -it --name test2 busybox ping test1 -c 2
PING test1 (172.20.0.3): 56 data bytes
64 bytes from 172.20.0.3: seq=0 ttl=64 time=0.132 ms
64 bytes from 172.20.0.3: seq=1 ttl=64 time=0.111 ms
--- test1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.111/0.121/0.132 ms
~# docker run -it --name test3 busybox ping test1.weave.local -c 2
PING test1.weave.local (172.20.0.3): 56 data bytes
64 bytes from 172.20.0.3: seq=0 ttl=64 time=0.231 ms
64 bytes from 172.20.0.3: seq=1 ttl=64 time=0.142 ms
--- test1.weave.local ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.142/0.186/0.231 ms
在另外一台主机上运行weave,并通过weave的网络跨主机互连
~# weave launch <第一台主机的ip>
~# eval $(weave env)
~# docker run -it --name test2_2 busybox ping test1 -c 2
PING test1 (172.20.0.3): 56 data bytes
64 bytes from 172.20.0.3: seq=0 ttl=64 time=0.132 ms
64 bytes from 172.20.0.3: seq=1 ttl=64 time=0.111 ms
--- test1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.111/0.121/0.132 ms
使用weave scope管理机器,容器和进程网络
在刚才创建的两台机器上安装weave scope
sudo wget -O /usr/local/bin/scope https://git.io/scope
sudo chmod a+x /usr/local/bin/scope
sudo scope launch
通过<机器IP>:4040访问weave scope:
可以看到容器,进程,机器的连接管理
点击容器之后能够查看容器的配置,进程,连接,以及对容器执行一些操作
下面我们运行两个容器,并通过Scope查看他们的连接和管理他们:
~# docker run -itd --name s1 busybox nc -llp 80
~# docker run -it --name s2 busybox telnet s1 80
可以看到两个容器网络是互相连接的,并且点击容器可以看到进程的连接详情:
Weave Net原理
Weave在每台机器上运行Weave Router的进程,容器间互相访问的请求会转发到Weave Router上,Weave Router会根据每个机器上不同网段的配置将请求转换为udp的包转发到对应的宿主机上,接收到的Weave Router解包后将请求转发到对应的容器。
同时,Weave Router同时有DNS的模块,它会记录并广播容器的DNS别名和IP地址到集群中的机器,容器便可以通过DNS互相发现和负载均衡。