此文主要以《实战Docker到Kubernetes技术系列视频教程》为基础,记录ovs+docker网络的配置实验过程。

本人对网络不甚了解。只是纯粹按照课程要求,配置成功。具体的原理请自行深入学习。

网络架构图

ovs+docker网络配置_第1张图片

实验目的

这里有三个不同网络,主机网络192.168.18网段,两台host上的docker0的网络也是不同子网。
需要实现两台不同主机的docker0可以实现通信。即在18.131机器上,可以ping通 172.17.43.1;18.128机器可以ping通172.17.42.1。

实验过程

  1. 两台虚拟机
    分别配置网卡ip为192.168.18.131192.168.18.128
    设置firewalld stop,selinux disabled
  2. 安装openvswitch软件
    下载相关rpm包,yum install 安装
    设置openvswitch服务自启动,并处于运行状态。
  3. 安装docker软件
    按照官方文档安装,设置自启动,并处于运行状态
  4. 设置docker0ip
    默认docker0是没有设置ip的。使用此网页的方法设置docker0 ip。
    即添加文件/etc/docker/daemon.json
    [root@host1 ~]# cat /etc/docker/daemon.json 
    {
    "bip": "172.17.43.1/24"
    }
  5. 使用ovs相关命令,添加br0网桥,br0及gre1 port
    在机器18.131上运行:
    ovs-vsctl add-br br0
    ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre option:remote_ip=192.168.18.128

    注意:上面的remote_ip需设置为对端的ip。
    执行完毕后,使用ovs-vsctl show可看到如下输出:

    [root@host1 ~]# ovs-vsctl show
    52566796-f849-4b18-a546-0c0b8853432a
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "gre1"
            Interface "gre1"
                type: gre
                options: {remote_ip="192.168.18.131"}
    ovs_version: "2.5.0"

    之后,执行brctl相关命令,将br0添加到docker0

    brctl addif docker0 br0
    ip link set dev br0 up
    ip link set dev docker0 up
    iptables -t nat -F; iptables -F
  6. 添加路由
    18.128上执行
    ip route add 172.17.0.0/16 dev docker0
    route add -net 172.17.0.0/16 gw 192.168.18.131

    添加路由完成后,ip route的截图如下
    ovs+docker网络配置_第2张图片

  7. 确定docker0处于up状态
    我的实验环境中,docker0网卡一直处于down的状态,我的解决方式是,运行起一个容器,docker0网口就up了。
  8. 现在执行ping操作,发现两个不同host上的docker0网口可以通信了。
    ovs+docker网络配置_第3张图片