Docker的原生网络支持非常有限,且没有跨主机的集群网络方案。目前实现Docker网络的开源方案有Weave、Kubernetes、Flannel、Pipework以及SocketPlane等,其中Weave被评价为目前最靠谱的,那么这里就对Weave的基本原理及使用方法做个总结

简介

Weave是由Zett.io公司开发的,它能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息。外部设备能够访问Weave网络上的应用程序容器所提供的服务,同时已有的内部系统也能够暴露到应用程序容器上。Weave能够穿透防火墙并运行在部分连接的网络上,另外,Weave的通信支持加密,所以用户可以从一个不受信任的网络连接到主机。

安装与启动

# sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
# sudo chmod a+x /usr/local/bin/weave

启动weave路由器,这个路由器其实也是以容器的形式运行的。

# weave launch
Unable to find image 'zettio/weave' locally
......

此时会发现有两个网桥,一个是Docker默认生成的,另一个是Weave生成的。 

 
接下来就可以运行应用容器,使用weave提供的网络功能了。

简单使用

准备 
1. host1: 10.0.2.6 
2. host2: 10.0.2.8 
3. host1上的应用容器1: 192.168.0.2/24 host1上的应用容器2: 192.168.1.2/24 
4. host2上的应用容器1: 192.168.0.3/24 
两台机上均安装Docker及Weave,并均启动好Weave路由容器。

在两台机上均启动一个应用容器。可以直接使用weave run命令,也可以先使用docker run启动好容器,然后使用weave attach命令给容器绑定IP地址。

# weave run 192.168.0.2/24 -itd ubuntu bash

或者

# docker run -itd ubuntu bash
# weave attach 192.168.0.2/24 $ID

此时发现两个容器之间是不通的,需要使用weave connect命令在两台weave的路由器之间建立连接。

# weave connect 10.0.2.8

会发现,此时位于两台不同主机上的容器之间可以相互ping通了。但是处于不同子网的两个容器是不能互联的,这样我们就可以使用不同子网进行容器间的网络隔离了。

我们会发现,如果不使用Docker的原生网络,在容器内部是不能访问宿主机以及外部网络的。此时我们可以使用weave expose 192.168.0.1/24来给weave网桥添加IP,以实现容器与宿主机网络连通。但是,此时在容器内部依然不能访问外部网络。 
我们可以同时使用Docker的原生网络和weave网络来实现容器互联及容器访问外网和端口映射。使用外部网络及端口映射的时候就使用docker0网桥,需要容器互联的时候就使用weave网桥。每个容器分配两个网卡。


其他特性

  • weave其他特性

    • 应用隔离:不同子网容器之间默认隔离的,即便它们位于同一台物理机上也相互不通;不同物理机之间的容器默认也是隔离的
    • 物理机之间容器互通:weave connect $OTHER_HOST
    • 动态添加网络:对于不是通过weave启动的容器,可以通过weave attach 10.0.1.1/24 $id来添加网络(detach删除网络)
    • 安全性:可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信
    • 与宿主机网络通信:w eave expose 10.0.1.102/24,这个IP会配在weave网桥上
    • 查看weave路由状态:weave ps
    • 通过NAT实现外网访问docker容器

问题

    1. 容器重启问题 
      如果使用weave,则就不能再使用docker自带的auto-restart feature(如docker run –restart=always redis),因为weave是在docker之外为容器配置的网络,容器重启的时候docker本身不会做这些事情。因而,还需额外的工具来管理容器的状态(比如systemd, upstart等),这些工具要调用weave命令(weave run/start/attach)来启动容器。
 

weave的更多相关文章

  1. 【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别

    From the previous posts, I have analysed 4 different Docker multi-host network solutions - Calico, F ...

  2. 使用weave管理docker网络

    weave简介 Weave creates a virtual network that connects Docker containers deployed across multiple hos ...

  3. weave 建立跨节点docker网络

    weave的工作原理上与利用openvswitch建立vxlan基本一样,都是通过用三层的协议封装二层的报文来进行扩展,weave使用的是udp.weave封装了docker,在操作上为我们隐藏了很多 ...

  4. 【Networking】flannel,pipework,weave,udp,vxlan,ovs等资料

    Add Open vSwitch-based multitenant backend for use with OpenShift / Kubernetes:  https://github.com/ ...

  5. FW:使用weave管理docker网络

    Posted on 2014-11-12 22:20 feisky 阅读(1761) 评论(0) 编辑 收藏 weave简介 Weave creates a virtual network that ...

  6. Google物联网操作系统协同框架Weave深度解析

    1.       Google Weave框架 在2015年的Google I/O大会上,负责Android业务的桑达.皮查伊(SundarPichai)宣布了Google最新的物联网战略.这包括一个 ...

  7. 使用weave实现跨主机docker容器互联

    关于weave的原理不做细致的说明,如果想了解weave可以登陆官网:https://www.weave.works/ In this post,使用阿里云3台ECS服务器进行weave搭建,并测试搭 ...

  8. 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器

    Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...

  9. 如何使用 Weave 网络?- 每天5分钟玩转 Docker 容器技术(63)

    weave 是 Weaveworks 开发的容器网络解决方案.weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来.对容器来说,weave 就像一个巨大的以太网交换机,所有容器都被接入这个交 ...

随机推荐

  1. Linux系统下Apache2.4.17的安装过程

    Linux系统下安装Apache Server2.4.17.还是先声明一下,Linux命令我不进行讲解,因为我不是讲Linux命令的.有需要注意的地方,我会上图,没什么值得的注意的地方,我就不上图了. ...

  2. jqury ajax 标准

    参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 ...

  3. 一张图让你看懂各开源License[转]

    你是否遇到过开源License,精炼而又晦涩的文字通常要读半天才能理解,而且大多数License差别不大,容易混淆.下面这张图让你段时间迅速掌握各种开源的License. 图片来源:阮一峰的博客. f ...

  4. iOS stringByEvaluatingJavaScriptFromString的参数长度限制

    我不是十分确定传给stringByEvaluatingJavaScriptFromString的javascript脚本长度有限制 请看我下面代码: int l = 166235; data = [d ...

  5. 【56测试】【字符串】【dp】【记忆化搜索】【数论】

    第一题:神秘大门 大意: 两个字符串A,B,按字典序最大的顺序输出B 的每个字符在A 中的位置,如果B不全在A中,输出No,否则Yes. 解: 这道题就是一遍的扫描,因为要按字典序最大的输出,所以从后 ...

  6. java中的传值与传引用

    java函数中的传值和传引用问题一直是个比较“邪门”的问题,其实java函数中的参数都是传递值的,所不同的是对于基本数据类型传递的是参数的一份拷贝,对于类类型传递的是该类参数的引用的拷贝,当在函数体中 ...

  7. redhat6.4安装storm集群-4节点

    0.搭建ftp服务器并建立yum源 1.在每个节点上安装java并设置环境变量 2.在三个节点上安装zookeeper 3.安装zeromq 过程中发现运行./configure时出现问题: conf ...

  8. 持续集成-sourcetree的安装、使用记录

    1.参考 http://blog.sina.com.cn/s/blog_672143a30102vold.html 2.问题-安装sourcetree后,打开时提示下载但是连接不上相应链接 自行下载g ...

  9. Win7下通过eclipse远程连接CDH集群来执行相应的程序以及错误说明

    最近尝试这用用eclipse连接CDH的集群,由于之前尝试过很多次都没连上,有一次发现Cloudera Manager是将连接的端口修改了,所以才导致连接不上CDH的集群,之前Apache hadoo ...

  10. DOM优化

    一:DOM与浏览器: 重排:改变页面的内容. 重绘:浏览器显示的内容. 添加顺序:尽量在appendchild之前. 合并DOM操作-利用csstext, 缓存布局信息 文档碎片. 二 DOM 与事件 ...