Weave Net( https://www.weave.works )是Docker上的虚拟网络,可以将分布式的Docker服务链接为一个虚拟的服务网络,就像在一个局域网中运行一样,而且可以穿透防火墙(需要开放相应端口),从而可以构建出基于Mesh架构的对等服务网络(https://github.com/weaveworks/mesh )。目前Weave版本是独立发展的,尚未纳入Docker官方体系。
- 关于容器SDN(软件定义网络)概念参考:容器SDN技术与微服务架构实践
- 关于容器上网络技术发展,参考:Docker网络管理的未来
1、项目源码
项目源码托管在:https://github.com/weaveworks/weave
2、快速安装
sudo curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod a+x /usr/local/bin/weave
weave setup
weave version
weave status
- 启动一个节点:
weave launch weave env
-
停止当前节点:
weave stop
详细说明在: https://www.weave.works/docs/net/latest/installing-weave/
-
指定密码:
weave launch --password xxxx
3、运行Weave,建立虚拟网络
在多个节点上安装docker和weave软件。
-
在主节点(假定IP:192.168.1.8)上运行:
weave launch --ipalloc-range 12.32.0.0/12
注意,在阿里云的虚拟服务器,必须使用
--ipalloc-range 12.32.0.0/12
等来指定要分配的IP段,默认的已被占用,不能使用。 -
在其他节点上运行:
weave launch --ipalloc-range 12.32.0.0/12 192.168.1.8
其中,192.168.1.8为刚才建立的第一个节点(需要其他节点都能访问到)。这样,一个新的节点就加入进去了。现在,运行
weave status
就可以看到有两个节点已经形成一个虚拟网络。
运行Docker容器:
- 在第一个节点运行:
eval $(weave env) weave run --name amaster -it weaveworks/ubuntu
-
在第二个节点运行:
eval $(weave env) weave run --name aworker -it weaveworks/ubuntu
然后在控制台运行ping amaster,应该可以看到响应信息。此时,amaster和aworker已经在同一个虚拟网中,所分配的IP地址在上面所指定的12.32.0.0/12范围内,该地址在外面是不能访问的。
-
注意,如果容器实例停止后重启,仍然使用
weave start aworker
,如果使用docker start将导致虚拟网地址无效。Docker的其它操作类似。
4、WeaveScope网络监控
WeaveScope可以对Docker运行网络进行监控,安装方法如下。
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
scope launch
然后,浏览器访问:http://localhost:4040(按上面的scope启动后提示信息)。
对于每一个参与scope监视的节点也需要安装scope软件,把下面内容保存到docker-compose.yml,然后运行docker-compose up -d
即可。
version: '2'
services:
probe:
image: weaveworks/scope:1.0.0
network_mode: "host"
pid: "host"
privileged: true
labels:
- "works.weave.role=system"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:rw"
command:
- "--probe.docker"
- "true"
如果对Docker基础资源(镜像、容器等)进行管理,建议安装Rancher。
5、ARM支持
在RapspberryPi(树莓派)上,使用下面方法安装weave支持软件。
- 安装Weave
Docker和Weave都可以支持ARM了【点击查看最新的ARM版源码】。
如下,可以在树莓派下的Raspi系统运行Weave:
sudo wget https://raw.githubusercontent.com/dilgerma/weave/rpi-latest-release/weave -O /usr/local/bin/weave
#或:sudo wget git.io/rpi_weave -O /usr/local/bin/weave
sudo chmod +x /usr/local/bin/weave
sudo weave setup
sudo weave launch
#...其它操作与上面的X86一样。
其它的板子和操作系统,可能需要进一步测试和移植。
- 安装Scope主控服务
sudo wget https://raw.githubusercontent.com/dilgerma/scope/master/scope -O /usr/local/bin/scope
#或:sudo wget https://git.io/scope -O /usr/local/bin/scope
chmod +x /usr/local/bin/scope
scope launch
上面的只能运行在PC上,树莓派运行报错,发现用的是X86版本的Docker镜像。 或者:#docker pull dilgerm/rpi-scope
,我没试过。
然后,浏览器访问:http://localhost:4040(按上面的scope启动后提示信息)。
- 安装Scope节点
对于每一个参与scope监视的节点也需要安装scope软件,把下面内容保存到docker-compose.yml,然后运行docker-compose up -d
即可。 因为树莓派目前的Docker-Compose版本比较老,只支持docker-compose.yml的1.0格式。
probe:
image: dilgerm/rpi-scope
net: "host"
pid: "host"
restart: "always"
labels:
- "works.weave.role=system"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:rw"
command:
- "--probe.docker"
如果使用docker-compose.yml的2.0版本,可以到:https://github.com/docker/compose/releases/ 下载最新的docker-compose版本,然后安装。
wget https://github.com/docker/compose/archive/1.9.0.zip -O docker-compose.zip
unzip docker-compose.zip
cd docker-compose
sudo pip3 install docker-py -y
sudo python3 setup.py install
使用下面的文件内容保存为docker-compose.yml:
version: '2'
services:
probe:
image: dilgerm/rpi-scope
network_mode: "host"
pid: "host"
restart: "always"
privileged: true
labels:
- "works.weave.role=system"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:rw"
command:
- "--probe.docker"
- "true"
6、weave命令参数
weave启动后,接管Docker的相关操作,从而建立一个新的虚拟网络。
weave的命令行参数如下:
weave --help | help setup version
weave launch <same arguments as 'weave launch-router'> launch-router [--password <pass>] [--trusted-subnets <cidr>,...] [--host <ip_address>] [--name <mac>] [--nickname <nickname>] [--no-restart] [--resume] [--no-discovery] [--no-dns] [--ipalloc-init <mode>] [--ipalloc-range <cidr> [--ipalloc-default-subnet <cidr>]] [--log-level=debug|info|warning|error] <peer> ... launch-proxy [-H <endpoint>] [--without-dns] [--no-multicast-route] [--no-rewrite-hosts] [--no-default-ipalloc] [--no-restart] [--hostname-from-label <labelkey>] [--hostname-match <regexp>] [--hostname-replacement <replacement>] [--rewrite-inspect] [--log-level=debug|info|warning|error] launch-plugin [--no-restart] [--no-multicast-route] [--log-level=debug|info|warning|error]
weave prime
weave env [--restore] config dns-args
weave connect [--replace] [<peer> ...] forget <peer> ...
weave run [--without-dns] [--no-rewrite-hosts] [--no-multicast-route] [<addr> ...] <docker run args> ... start [<addr> ...] <container_id> attach [<addr> ...] <container_id> detach [<addr> ...] <container_id> restart <container_id>
weave expose [<addr> ...] [-h <fqdn>] hide [<addr> ...]
weave dns-add [<ip_address> ...] <container_id> [-h <fqdn>] | <ip_address> ... -h <fqdn> dns-remove [<ip_address> ...] <container_id> [-h <fqdn>] | <ip_address> ... -h <fqdn> dns-lookup <unqualified_name>
weave status [targets | connections | peers | dns | ipam] report [-f <format>] ps [<container_id> ...]
weave stop stop-router stop-proxy stop-plugin
weave reset [--force] rmpeer <peer_id> ...
where <peer> = <ip_address_or_fqdn>[:<port>] <cidr> = <ip_address>/<routing_prefix_length> <addr> = [ip:]<cidr> | net:<cidr> | net:default <endpoint> = [tcp://][<ip_address>]:<port> | [unix://]/path/to/socket <peer_id> = <nickname> | <weave internal peer ID> <mode> = consensus[=<count>] | seed=<mac>,... | observer
https://my.oschina.net/u/2306127/blog/780040
相关推荐
Weave 创建一个虚拟网络并连接到部署在多个主机上的 Docker 容器。应用程序使用该网络就好像它们是插在同一个网络交换机上,无需任何配置和端口映射。容器内的服务可直接为容器外的应用所访问,而不需要关心容器运行...
6. **安装网络插件**:k8s 需要网络插件才能使容器通信,如 Flannel、Calico 或 Weave Net。 7. **部署应用**:现在可以使用 kubectl 命令部署应用了,如 `kubectl apply -f <your-deployment-file>.yaml`。 以上...
Weave是由Zett.io公司开发的一个开源网络方案,它可以创建一个虚拟网络,连接部署在多台主机上的Docker容器。通过Weave网络,容器就像接入了同一个物理网络交换机一样,从而能够实现透明的、跨主机的通信。 Weave...
Docker的网络模型也考虑了安全因素,可以通过网络策略来限制容器的网络访问,如使用`--net=none`创建无网络的容器,或者使用`docker network inspect`和`docker network connect`命令来调整网络连接。 总结来说,...
- Weave通过虚拟路由实现跨主机的扁平化网络,拦截并转发IP请求,使不同主机的容器可以直接通信,无需通过复杂的网络配置。 5. **Flannel(原名CoreOS Network)**: - Flannel是CoreOS(现已被Red Hat收购)推出...
用于安装和配置Puppet 模块,这是连接部署在多个主机上的 Docker 容器的虚拟网络。要求如果您从 git 存储库而不是从 forge 安装它,则必须手动管理依赖项。 该模块需要: - 验收测试所需。 如果不使用此模块(用于...
针对Docker原生网络的局限性,业界提出了多种优化方案和技术栈,例如Flannel、Calico、Weave Net等。这些方案通过引入额外的网络层或利用特定的网络技术,旨在解决容器间的跨主机通信问题、提高网络性能和安全性。 ...
为了应对这些挑战,社区发展出了一系列Docker网络优化方案,如Flannel、Weave、Calico等,它们提供更高级别的网络服务,如网络策略、负载均衡和跨主机容器通信。这些项目丰富了Docker的网络生态,使得用户可以根据...
Weave是另一种与Docker Overlay类似的网络解决方案,它简化了网络配置,提供了自动发现和自动连接的功能,使得容器网络的管理更为简便。 四、Flannel Flannel是CoreOS开发的轻量级网络解决方案,旨在为Kubernetes...
Docker支持网络驱动插件扩展,如Calico、Weave Net和Flannel等,它们提供了更高级的网络特性,如网络策略控制、IP地址管理、路由和安全性等。这些插件可以增强Docker网络的灵活性和安全性。 六、网络安全 Docker...
Docker 是一个流行的开源容器化平台,它允许开发者打包应用及其依赖环境到一个可移植的容器中,然后在任何支持Docker的平台上运行。在Docker中,网络配置是容器化应用的关键部分,因为它确保了容器之间的通信以及与...
Weave是另一种流行的网络解决方案,它创建了一个虚拟网络,连接不同主机上的Docker容器,实现自动发现和无缝集成。此外,还有CoreOS这样的容器优化操作系统,其etcd和Fleet工具分别负责服务发现和集群状态管理。 ...
1. **Bridge模式**:这是Docker默认的网络模式,它创建了一个名为`docker0`的虚拟网桥,容器通过veth对连接到该网桥,实现了容器间的通信。容器对外的访问通常通过NAT转换实现。 2. **Host网络模式**:在这种模式下...