容器学习之跨主机通信原生解决方案overlay

本文详细介绍了如何使用Docker17版本的overlay方案实现容器跨主机通信,通过Consul环境配置,搭建并测试了host1和host2之间的网络连接,展示了overlay网络的工作原理和流量走向。
摘要由CSDN通过智能技术生成

        今天分享一下容器跨主机通信的解决方案。容器跨主机的原生解决方案有overlay和macvlan,第三方的解决方案常用的包括 flannel、weave 和 calico。这篇文章主要分享一下我对overlay方案的理解。

        overlay的实现是通过不同vxlan形成隧道,把不同主机连接在一起,实现跨主机通信。今天的我们用docker17版本进行实验,共需要3台虚拟机,一台用作配置consul环境,另外两台用作主机之间的通信。

在一台虚拟机上启动consul容器

通用192.168.216.51:8500web页面可以查看consul环境

 在host1和host2上配置连接consul数据库的信息,/usr/lib/systemd/system/docker.service 

--cluster-store 指定consul服务器地址和端口,--cluster-advertise 指定本机网卡和端口号。
配置完成后重启docker服务,systemctl daemon-reload,systemctl restart docker.service
重启docker进程后在consul的web页面可以看到host1和host2的信息
到这里实验环境就已经准备就绪了,接下来在host1或者host2上创建overlay网络
        可以看到我们在host1创建了ov_net1网络,因为类型为global的所以在host2上也可以看到,
这是因为创建 ov_net1 时 host1 将 overlay 网络信息存到consul,host2 从 consul 读取到了新网络的数据。之后 ov_net 1的任何 变化都会同步到 host1 和 host2。
通过docker network inspect ov_net1查看网络的详细信息
在host1运行一个 centos容器,名字为centos1,使用 ov_net1网络:
docker run -itd --name centos1 --network ov_net1 centos:7.6.1810

可以看到容器已经运行起来,为了后续显示容器的网络信息,在容器内安装iproute和net-tools软件包

可以看到容器centos1的网络信息和路由信息

从上图中我们可以看到容器有eth0和eth1两张网卡,eth0的IP为10.0.0.2,eth1的IP为172.18.0.2,容器的默认路由是走eth1,那么eth1是怎么生成的,我们接着往下看

        查询docker_gwbridge可以看到相关的网络信息,子网为172.18.0.0/16,网关为172.18.0.1,同时从上一张图中我们可以看到容器的eth1的IP为172.18.0.2。接下来我们查看容器访问www.baidu.com的路由信息,可以看到容器会经过172.18.0.1 和192.168.216.2,其中172.18.0.1即为docker_gwbridge,这说明docker_gwbridge,为所有连接到 ov_net1(overlay)网络的容器提供访问外网的能力。

在host2运行一个 centos容器,名字为centos2,使用 ov_net1网络:

docker run -itd --name centos2 --network ov_net1 centos:7.6.1810

现在测试host1上容器centos1和host2上容器centos2通信情况

通过ip netns可以查看容器的命名空间,ln -s /var/run/docker/netns /var/run/netns创建软连接,可以看到有两个netns,id:1和id:0

查看id:0 netns中网络信息

查看id:1 netns中网络信息,对比容器的网络信息可以确定该命名空间是容器centos1的

查看host1的网络信息

在host1上查看vxlan id是256

在host2上查看vxlan id是256

说明host1和host2的ov_net1通过vxlan id=256实现主机通信。

        接下来我们分析一下跨主机通信网络流量走向,图2中可以看到容器centos1的eth0的IP为10.0.0.2,eth0的对端设备是8号---看图1,8号设备是veth0---veth0的master是br0--图1的6号设备vxlan0--host2容器centos2的br0的vxlan0

        再看一下容器centos1访问外网的流量走向,看图2的9号设备,对端是10号设备---看到图3,10号设备是vethf85ef---docker_gwbridge---3号设备,ens33---出网

借助的下面的简图可以很好的理解,图中的bbox1和bbox2是不同主机上的容器

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值