c4rt1y

Docker SDN之Weave实现

0x01 Weave介绍

Weave是一款较热门的Dokcer容器网络方案,具有非常良好的易用性且功能强大。Weave跨甲包含两大组件:

new-centos

Weave:用户态的shell脚本,用户按爪个Weave,将container连接到Weave虚拟网络中,并为他们分配IP。
Weaver:运行于container内,每个Weave网络内的主机都要运行,是一个Go语言实现的虚拟网络路由器。不同主机之间的网络通信依赖于Weaver路由。

0x02 环境介绍

#一共2台服务器
master.com 10.10.10.20
node01.com 10.10.10.30

#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

#两种方法设置host(每台对应每台的host地址)
echo "master.com" > /etc/hostname
hostname master.com

#下载第三方依赖环境包
yum -y install epel-release

#设置host
cat >>/etc/hosts <<EOF 
10.10.10.20 master.com 
10.10.10.30 node01.com
EOF	

#关闭selinux,需要重启
sed -i 's:SELINUX=enforcing:SELINUX=disabled:g' /etc/selinux/config

#临时关闭seLinux
setenforce 0

#docker安装
yum -y install docker

#重启
reboot

0x03 环境安装(warve实现跨主机)

##master
#下载自动安装脚本
wget -O /usr/local/bin/weave  https://raw.githubusercontent.com/zettio/weave/master/weave
#给予权限
chmod a+x /usr/local/bin/weave
#启动weave路由器
weave launch
#使用weave创建虚拟机
weave run 192.168.1.1/24 -it --name wc1 ubuntu:14.04 /bin/bash
#登陆虚拟机
docker attach wc1


#node01
#下载自动安装脚本
wget -O /usr/local/bin/weave  https://raw.githubusercontent.com/zettio/weave/master/weave
#给予权限
chmod a+x /usr/local/bin/weave
#启动weave路由器,连接master主机
weave launch 10.10.10.20
#这里记住,必须是一个C段,否则会无法互联
c1=$(weave run 192.168.1.2/24 -it ubuntu:14.04 /bin/bash)
#登陆
docker attach $c1

#尝试互ping
##master
ping 1192.168.1.2


##node01
ping 1192.168.1.1

0x04 其他特性

关于API:
  物理机之间容器互通:weave connect $OTHER_HOST
  安全性:可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信
  与宿主机网络通信:weave expose 10.0.1.102/24,这个IP会配在weave网桥上
  查看weave路由状态:weave ps
  查看weave状态:weave status
  动态添加网络:对于不是通过weave启动的容器,可以通过weave attach 10.0.1.1/24 $id来添加网络(detach删除网络)

优点:
  应用隔离:不同子网容器之间默认隔离的,即便它们位于同一台物理机上也相互不通;不同物理机之间的容器默认也是隔离的
  支持通信加密
  支持跨主机多子网
  支持container动态加入或者剥离
  通过NAT实现外网访问docker容器
  
缺点:
  不支持主动发现,必须使用weave launch或者weave connect登陆
  不支持动态分配IP

0x05 资料来源

《Docker进阶与实战.华为Docker实践小组》
《Docker 容器与容器云(第2版)》
GoTop