docker Weave实现跨宿主主机容器互联

官方地址:https://www.weave.works/

一、简介

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

1.png

2.png

特点:

1、无忧的配置

Weave网络能够简化容器网络的配置。因为weave网络中的容器使用标准的端口提供服务(如,MySQL默认使用3306),管理微服务是十分直接简单的。每个容器都可以通过域名来与另外的容器通信,也可以直接通信而无需使用NAT,也不需要使用端口映射或者复杂的linking,部署weave容器网络的最大的好处是无需修改你的应用代码。

2、服务发现

Weave网络通过在每个节点上启动一个"微型的DNS"服务来实现服务发现。你只需要给你的容器起个名字就可以使用服务发现了,还可以在多个同名的容器上提供负载均衡的功能。

3、不需要额外的集群存储

所有其它的Docker网络插件,包括Docker自带的"overlay"驱动,在你真正能使用它们之间,都需要安装额外的集群存储----一个像Consul或者Zookeepr那样的中心数据库. 除了安装,维护和管理困难外,甚至Docker主机需要始终与集群存储保持连接,如果你断开了与其的连接,尽管很短暂,你也不能够启动和停止任何容器了。

Weave网络是与Docker网络插件捆绑在一起的,这意味着你可以马上就使用它,而且可以在网络连接出现问题时依旧启动和停止容器。

关于更多Weave Docker插件的介绍,请查看 Weave Network Plugin如何工作.

4、在部分连接情况下进行操作

Weave网络能够在节点间转发流量,它甚至能够在网状网络部分连接的情况下工作。这意味着你可以在混合了传统系统和容器化的应用的环境中使用Weave网络来保持通信。

5、Weave网络很快

Weave网络自动在两个节点之间选择最快的路径,提供接近本地网络的吞吐量和延迟,而且这不需要你的干预。

关于Fast Datapath如何工作请参考 How Fast Datapath Works .

6、组播支持

Weave网络完全支持组播地址和路径。数据可以被发送给一个组播地址,数据的副本可以被自动地广播。

7、NAT 转换

使用Weave网络,部署你的应用---无论是点对点的文件共享,基于ip的voice或者其它应用,你都可以充分利用内置的NAT转换。通过Weave网络,你的app将会是可移值的,容器化的,加上它对网络标准化的处理,将又会使你少关心一件事。

8、与任何框架集成: Kubernetes, Mesos, Amazon ECS

如果你想为所有的框架使用一个工具,Weave网络是一个好的选择。比如: 除了作为Docker插件使用,你还可以将其作为一个Kubernetes插件plugin.你还可以在 Amazon ECS ,Mesos和Marathon中使用它。

二、搭建服务

主机名

系统

宿主IP

应用服务

master

CentOS7.4

192.168.56.128

容器:192.168.10.10/24

slave1

CentOS7.4

192.168.56.130

容器:192.168.10.11/24

1、网桥方式需要安装网桥管理工具

# yum install bridge-utils

2、暂时关闭防火墙,如果需要必须开启6783端口

3、都需要开启宿主路由转发

#vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

#sysctl  -p

4、、下载二进制包(所有宿主都需要)

# wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave

授权:

# chmod a+x /usr/local/bin/weave

5、初始化Weave网络

# weave launch

3.png

# docker ps -a

4.png

# brctl show

# ifconfig weave

# docker network ls

5.png

weave的这些数据是保存在每台机器上分配的名为 weavedb 的容器上的,它是一个 data volume 容器,只负责数据的持久化。

6、连接不同主机

node主机需要连接到master主机,只需要在 weave launch 后面跟上master主机的ip或者hostname就行了。两台机器就会自动建立集群,并同步所有需要的信息。

(1)在slave1执行如下命令

# weave launch 192.168.56.128

# weave connect 192.168.56.128

# weave version

查看

# weave status

6.png

6、Weave有三种方式和Docker进行集成,以便运行的容器跑在Weave网络中。

(1)使用 weave run 命令直接运行容器。

(2) 使用 weave env 命令修改 DOKCER_HOST 环境变量的值,使 docker client 和 weave 交互, weave 和 docker daemon 交互,自动为容器配置网络,对用户透明。

(3) 使用 weave plugin ,在运行容器的时候使用 --net=weave 参数。

1)使用 weave run 命令直接运行容器

weave在2.0版本之后就没有“weave run”这个命令了

2)先使用docker run启动好容器,然后使用weave attach命令给容器绑定IP地址

在master使用如下命令:

# docker run -dti --name weave01 --privileged centos:7.4.1708 /usr/sbin/init

绑定ip地址

# weave connect 192.168.56.130    //配置对方宿主的ip

# weave attach 192.168.10.10/24 ba50b215c0ec

7.png

报错如下:

8.png

# docker exec -ti ba50b215c0ec /bin/bash

9.png

在slave1使用如下命令:

#docker run -dti --name weave03 --privileged centos:7.4.1708 /usr/sbin/init

绑定IP地址到容器

# weave connect 192.168.56.128     //配置对方宿主的ip

# weave attach 192.168.10.11/24 6a26f76433b6

10.png

# docker exec -ti 6a26f76433b6 /bin/bash

11.png

备注:

上面在docker run启动容器时,可以添加--net=none参数,这个表示容器启动后不使用默认的虚拟网卡docker0自动分配的ip,而是使用weave绑定的ip;

当然也可以选择不添加这个参数去启动容器,这样,容器启动后就会有两个网卡,即两个ip(如上图):

一个是docker0自动分配的ip,这个适用于同主机内的容器间通信,即同主机的容器使用docker0分配的ip可以相互通信;另一个就是weave网桥绑定的ip。

7、测试

网络测试

12.png

应用测试

宿主master登录10容器访问宿主slave1容器11上面的mysql服务,如图

13.png

8、注意事项

在跨主机情况下,相同子网内的容器是可以相互通信的;但是处于不同子网的两个容器是不能互联的,尽管这两个容器在同一个主机下也是不能通信的!

这样的好处就是:使用不同子网进行容器间的网络隔离

使用weave注意事项:

(1)使用Docker的原生网络,在容器内部是可以访问宿主机以及外部网络的。也就是说在启动容器的时候,使用了虚拟网卡docker0分配ip,这种情况下,登陆容器后是可以ping通宿主机ip,并且可以对外联网的!

但,在宿主机上是可以ping通docker0网桥的ip,但是ping不通weave网桥的ip。这个时候可以使用

"weave expose 192.168.0.1/24"命令来给weave网桥添加IP,以实现容器与宿主机网络连通。如下

14.png

配置

在master和slave1两台机器上都添加weave网桥的ip

[root@master ~]# weave expose 192.168.10.1/2

[root@slave1 ~]# weave expose 192.168.10.1/24

补充说明:

(1)192.168.10.1/24表示weave容器网段的网关

(2)# weave hide 192.168.10.1/24表示覆盖或删当前指定的配置

查看

15.png

缺点:

(1)weave给容器指定的IP地址会随着容器的关闭或重启而失效,如需得重新配置。

(2)weave解决了网络问题,但是单机模式


猜你喜欢

转载自blog.51cto.com/13941177/2298452