资讯专栏INFORMATION COLUMN

docker网络学习-weave

Wuv1Up / 1822人阅读

摘要:查看一下当前容器的网络配置有两个网络接口和,其中连接的是默认网络,即与时一对。网络详细讲解可看链接网络包含两个虚拟交换机和,和将二者连接在一起。和分工不同,负责将容器接入网络,负责在主机间隧道中并收发数据。

</>复制代码

  1. 主要参考每天5分钟玩转docker容器技术博客。
  2. 记录下自己的实验过程。
  3. 如果想学习,请直接参考该博客http://www.cnblogs.com/CloudMan6/
概述

Weave创建的虚拟网络将部署在多个主机上的容器连接起来。

对容器而言,weave就像一个巨大的以太网交换机,所有容器都被接入这个交换机,容器可以直接通信,无需nat和端口映射。

weave的dns模块使容器可以通过hostname访问

weave不依赖分布是数据库交换网络信息,每个主机上只需运行weave组件就能建立起跨主机的容器网络。

搭建实验环境 安装部署weave

在实验机器上执行如下命令

</>复制代码

  1. curl -L git.io/weave -o /usr/local/bin/weave
  2. chmod a+x /usr/local/bin/weave
在host1中启动weave

host1中执行weave launch,启动weave相关服务。

weave的所有组件以容器运行

</>复制代码

  1. root@host1:~# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. e6c28480e461 weaveworks/weave:2.3.0 "/home/weave/weaver ?? 4 seconds ago Up 4 seconds weave

weave会创建一个新的docker网络weave

</>复制代码

  1. root@host1:~# docker network ls
  2. NETWORK ID NAME DRIVER SCOPE
  3. 810c1c359ba2 bridge bridge local
  4. 1085e045479e host host local
  5. 8a7c9f8a4f9f none null local
  6. 5cdb070956f9 weave weavemesh local

该网络的详情

</>复制代码

  1. root@host1:~# docker network inspect 5cdb070956f9|more
  2. [
  3. {
  4. "Name": "weave",
  5. "Id": "5cdb070956f9ce7ef2cdc29fc62cfe55c4128de3283b385de63074276956ff33",
  6. "Created": "2018-05-22T22:21:54.904364416+08:00",
  7. "Scope": "local",
  8. "Driver": "weavemesh",
  9. "EnableIPv6": false,
  10. "IPAM": {
  11. "Driver": "weavemesh",
  12. "Options": null,
  13. "Config": [
  14. {
  15. "Subnet": "10.32.0.0/12"
  16. }
  17. ]
  18. },
  19. "Internal": false,
  20. "Attachable": false,
  21. "Ingress": false,
  22. "ConfigFrom": {
  23. "Network": ""
  24. },
  25. "ConfigOnly": false,
  26. "Containers": {},
  27. "Options": {
  28. "works.weave.multicast": "true"
  29. },
  30. "Labels": {}
  31. }
  32. ]

在host1中运行容器bbox1

</>复制代码

  1. root@host1:~# eval $(weave env)
  2. root@host1:~# docker run --name bbox1 -itd busybox

首先执行 eval $(weave env) 很重要,其作用是将后续的 docker 命令发给 weave proxy 处理。如果要恢复之前的环境,可执行 eval $(weave env --restore)。

查看一下当前容器bbox1的网络配置

</>复制代码

  1. root@host1:~# docker exec -it bbox1 ip a
  2. 1: lo: mtu 65536 qdisc noqueue qlen 1
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. 12: eth0@if13: mtu 1500 qdisc noqueue
  7. link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  8. inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
  9. valid_lft forever preferred_lft forever
  10. 14: ethwe@if15: mtu 1376 qdisc noqueue
  11. link/ether 16:8c:eb:85:98:2c brd ff:ff:ff:ff:ff:ff
  12. inet 10.32.0.1/12 brd 10.47.255.255 scope global ethwe
  13. valid_lft forever preferred_lft forever

bbox1有两个网络接口eth0和ethwe,其中eth0连接的是默认bridge网络,即docker0.

vethwe与vethwepl2516时一对veth pair。

</>复制代码

  1. root@host1:~# brctl show
  2. bridge name bridge id STP enabled interfaces
  3. docker0 8000.0242d3efdb74 no veth7fb85fa
  4. weave 8000.cebc0b34efc6 no vethwe-bridge
  5. vethwepl2516

网络详细讲解可看链接

weave 网络包含两个虚拟交换机:Linux bridge weave 和 Open vSwitch datapath,veth pair vethwe-bridge 和 vethwe-datapath 将二者连接在一起。weave 和 datapath 分工不同,weave 负责将容器接入 weave 网络,datapath 负责在主机间 VxLAN 隧道中并收发数据。

跨主机容器连接

在host2上执行如下命令:

</>复制代码

  1. weave launch host1_ip

*必须指定host1的ip,这样host1和host2才能加入到同一个weave网络

</>复制代码

  1. root@host2:~# eval $(weave env)
  2. root@host2:~# docker run --name bbox3 -itd busybox
weave网络连通性

bbox3 可以ping通bbox1

</>复制代码

  1. root@host2:~# docker exec bbox3 ping bbox1
  2. PING bbox1 (10.32.0.1): 56 data bytes
  3. 64 bytes from 10.32.0.1: seq=0 ttl=64 time=1.867 ms
  4. 64 bytes from 10.32.0.1: seq=1 ttl=64 time=1.345 ms

链接

如果要实现网络隔离,可以通过环境变量 WEAVE_CIDR 为容器分配不同 subnet 的 IP

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27300.html

相关文章

  • Docker容器利用weave实现跨主机互联

    摘要:找到规则的编号将它删除打开本地和对的端口会自动进行检测,把它关掉启动启动并连接主机,注意主机不要去连接主机等待下载剩下的支持容器启动容器,使用网桥给容器分配沟通地址容器测试容器跨主机通信成功 Docker容器利用weave实现跨主机互联 环境:showImg(https://segmentfault.com/img/bV7WcZ?w=429&h=179); 实现目的:实现主机A中容器1...

    yimo 评论0 收藏0
  • Docker容器管理

    摘要:容器管理网络连接单机网络配置虚拟网桥的特点可以设置地址相当于拥有一个隐藏的虚拟网卡的地址自动划分分配地址分配地址子网掩码每一个主机都对应一个容器网卡自定义地址自定义虚拟网桥添加虚拟网桥更改守护进程的启动配置容器互联默认允许所有容器间互联 Docker容器管理 Docker网络连接 单机Docker网络配置 linux虚拟网桥的特点: 可以设置IP地址 相当于拥有一个隐藏的虚拟网卡...

    hiyayiji 评论0 收藏0
  • Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave

    摘要:第层网络的一个值得注意的示例是以太网,其中表示为子层。与其他方案相比,相对容易安装和配置。与不同,不使用网络。网络策略是其最受追捧的功能之一。 本文将在介绍技术原理和相应术语的基础上,再集中探索与详细对比目前最流行的CNI插件:Flannel、Calico、Weave和Canal,对比介绍它们的原理、使用方法、适用场景和优缺点等。 showImg(https://segmentfaul...

    scq000 评论0 收藏0
  • Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave

    摘要:第层网络的一个值得注意的示例是以太网,其中表示为子层。与其他方案相比,相对容易安装和配置。与不同,不使用网络。网络策略是其最受追捧的功能之一。 本文将在介绍技术原理和相应术语的基础上,再集中探索与详细对比目前最流行的CNI插件:Flannel、Calico、Weave和Canal,对比介绍它们的原理、使用方法、适用场景和优缺点等。 showImg(https://segmentfaul...

    Noodles 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<