前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker容器跨主机通信之:OVS+GRE

Docker容器跨主机通信之:OVS+GRE

作者头像
py3study
发布2020-03-05 20:30:02
2K0
发布2020-03-05 20:30:02
举报
文章被收录于专栏:python3

一、概述

由于docker自身还未支持跨主机容器通信,需要借助docker网络开源解决方案

OVS

OpenVSwich即开放式虚拟交换机实现,简称OVS,OVS在云计算领域应用广泛,值得我们去学习使用。

OpenVSwich

OpenVSwich是一种开源软件,通过软件的方式实现二层交换机功能,专门管理多租赁云计算网络环境,提供虚拟网络中的访问策略、网络隔离、流量监控等。

既然是虚拟交换机,自然与传统的物理交换机有着相同的特性,操作中可以按照理解物理交换机的方式去操作,有助于对虚拟交换机的认识。

GRE隧道

GRE即通用路由协议封装,隧道技术是一种封装技术,将网络层协议(如IP)的数据报文进行封装,使这些封装的数据报文能够在另一个网络层协议中传输。可以看作是一个虚拟点到点连接,所以建立隧道时,要配置好隧道源地址和目的地址。

二、基于OVS+GRE的大二层通信

实验环境

操作系统

主机

主机ip

容器网段

ubuntu-16.04.4-server-amd64

主机1

172.31.15.168

172.17.43.1/24

ubuntu-16.04.4-server-amd64

主机2

172.31.4.143

172.17.42.1/24

示意图

1.png
1.png

修改Docker0的网络地址

编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:

代码语言:javascript
复制
{ "bip": "172.17.43.1/24" }

编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:

代码语言:javascript
复制
{ "bip":"172.17.42.1/24" }

重启docker服务

主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效

代码语言:javascript
复制
systemctl restart docker

创建ovs bridge

主机1和主机2 操作:

安装 openvswitch

代码语言:javascript
复制
apt install -y openvswitch-switch

创建bro网桥

代码语言:javascript
复制
ovs-vsctl add-br br0

查看bro网桥

复制代码
复制代码
代码语言:javascript
复制
root@ubuntu:~# ifconfig br0
br0       Link encap:以太网  硬件地址 1e:cc:2c:52:13:42  
          BROADCAST MULTICAST  MTU:1500  跃点数:1
          接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1 
          接收字节:0 (0.0 B)  发送字节:0 (0.0 B)
复制代码
复制代码

设置gre端口

将gre0接口加入到网桥obr0, 远程IP写对端IP(创建一个GRE隧道并添加到网桥中)

主机1 执行:

代码语言:javascript
复制
ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre option:remote_ip=172.31.4.143

注意:172.31.4.143 是主机2的ip地址。

主机2 执行:

代码语言:javascript
复制
ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre option:remote_ip=172.31.15.168

注意:172.31.15.168 是主机1的ip地址。

主机1和主机2 操作:

代码语言:javascript
复制
# 将br0网桥加入docker0网桥
brctl addif docker0 br0
# 启动br0网桥
ip link set dev br0 up
# 启动docker0网桥
ip link set dev docker0 up
# 添加路由条目
ip route add 172.17.0.0/16 dev docker0

注意:由于主机1和主机2的网络掩码为24,因此16位就可以包含这2个网络了。

查看网桥信息

代码语言:javascript
复制
root@ubuntu:~# brctl show
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242f148614e    no        br0

启动容器测试

主机1和主机2 操作:

代码语言:javascript
复制
docker run -itd --name test busybox /bin/sh

查看容器信息

主机1 执行:

代码语言:javascript
复制
docker inspect test

输出:

复制代码
复制代码
代码语言:javascript
复制
...            "Gateway": "172.17.43.1",            "GlobalIPv6Address": "",            "GlobalIPv6PrefixLen": 0,            "IPAddress": "172.17.43.2",
...
复制代码
复制代码

ping 主机2的docker ip

复制代码
复制代码
代码语言:javascript
复制
root@ubuntu:~# ping 172.17.42.2 -c 2PING 172.17.42.2 (172.17.42.2) 56(84) bytes of data.64 bytes from 172.17.42.2: icmp_seq=1 ttl=63 time=0.505 ms64 bytes from 172.17.42.2: icmp_seq=2 ttl=63 time=0.858 ms--- 172.17.42.2 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.505/0.681/0.858/0.178 ms
复制代码
复制代码

主机2 执行:

ping 主机1的docker ip

复制代码
复制代码
代码语言:javascript
复制
root@ubuntu:~# ping 172.17.43.2 -c 2PING 172.17.43.2 (172.17.43.2) 56(84) bytes of data.64 bytes from 172.17.43.2: icmp_seq=1 ttl=63 time=1.90 ms64 bytes from 172.17.43.2: icmp_seq=2 ttl=63 time=0.641 ms--- 172.17.43.2 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.641/1.274/1.907/0.633 ms
复制代码
复制代码

本文参考链接:

https://blog.csdn.net/xialingming/article/details/83093031

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
    • OVS
      • OpenVSwich
        • GRE隧道
        • 二、基于OVS+GRE的大二层通信
          • 实验环境
            • 示意图
              • 修改Docker0的网络地址
                • 重启docker服务
                  • 创建ovs bridge
                    • 设置gre端口
                      • 启动容器测试
                      相关产品与服务
                      容器镜像服务
                      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档