文章目录
- 建立基于OpenvSwitch的GRE隧道
-
-
-
- [1. 使用VMware安装2个CentOS 7虚拟机,安装时记得都开启CPU虚拟化,第一台命名为"Docker",第二台命名为"KVM"。](#1. 使用VMware安装2个CentOS 7虚拟机,安装时记得都开启CPU虚拟化,第一台命名为“Docker”,第二台命名为“KVM”。)
- [2. 安装完虚拟机后,进入虚拟机,修改网络配置(onboot改为yes)并重启网络服务,查看相应IP地址,并使用远程连接软件进行连接。](#2. 安装完虚拟机后,进入虚拟机,修改网络配置(onboot改为yes)并重启网络服务,查看相应IP地址,并使用远程连接软件进行连接。)
- [3. 把老师所给Packages包、centos的docker镜像以及cirros镜像使用winSCP传送至虚拟机(centos6.5传送至docker虚拟机,cirros传送至KVM虚拟机),并解压Packages包至/opt目录下。](#3. 把老师所给Packages包、centos的docker镜像以及cirros镜像使用winSCP传送至虚拟机(centos6.5传送至docker虚拟机,cirros传送至KVM虚拟机),并解压Packages包至/opt目录下。)
- [4. 两台虚拟机都配置默认镜像yum源,并且把Packages包也一起配置到本地yum源当中。](#4. 两台虚拟机都配置默认镜像yum源,并且把Packages包也一起配置到本地yum源当中。)
- [5. 修改主机名,方便区分。第一台虚拟机(命名为Docker那台)修改主机名为docker,第二台虚拟机(命名为KVM那台)修改主机名为kvm。如下图所示。](#5. 修改主机名,方便区分。第一台虚拟机(命名为Docker那台)修改主机名为docker,第二台虚拟机(命名为KVM那台)修改主机名为kvm。如下图所示。)
-
- 配置虚拟机Docker
-
-
- [6. 修改网络配置,新增一行NM_CONTROLLER=no,如下图所示:](#6. 修改网络配置,新增一行NM_CONTROLLER=no,如下图所示:)
- [7. 关闭防火墙](#7. 关闭防火墙)
- [8. 开启内核转发](#8. 开启内核转发)
- [9. 安装openvswitch、bridge-utils、tunctl、docker-io服务](#9. 安装openvswitch、bridge-utils、tunctl、docker-io服务)
- [10. 更新下路由,看是否有最新路由版本。](#10. 更新下路由,看是否有最新路由版本。)
- [11. 启动openvswitch服务以及docker服务。](#11. 启动openvswitch服务以及docker服务。)
- [12. 检查OVS是否安装好。](#12. 检查OVS是否安装好。)
- [13. 创建br0网桥,并创建名字为br-int的OVS开放虚拟交换机,并重启网络。](#13. 创建br0网桥,并创建名字为br-int的OVS开放虚拟交换机,并重启网络。)
- [14. 安装net-tools,并给br0设置地址为30.1.0.1/24](#14. 安装net-tools,并给br0设置地址为30.1.0.1/24)
- [15. 把br0桥接到br-int上](#15. 把br0桥接到br-int上)
- [17. 在OVS交换机br-int上创建gre接口,地址指向kvm虚拟机IP](#17. 在OVS交换机br-int上创建gre接口,地址指向kvm虚拟机IP)
- [18. 启动br0和br-int;](#18. 启动br0和br-int;)
- [19. 添加一条路由信息,使30.2.0.0网段的路由指向kvm虚拟机的ens33网卡](#19. 添加一条路由信息,使30.2.0.0网段的路由指向kvm虚拟机的ens33网卡)
- [20. 修改docker配置信息。配置完成后启动docker。](#20. 修改docker配置信息。配置完成后启动docker。)
- [21. 把开始上传的镜像包导入docker,并添加tag。](#21. 把开始上传的镜像包导入docker,并添加tag。)
- [22. 启动docker,并查看docker的CONTAINER ID](#22. 启动docker,并查看docker的CONTAINER ID)
- [23. 进入docker,查看docker的IP](#23. 进入docker,查看docker的IP)
-
- 配置虚拟机KVM
-
-
- [24. 进入网络配置目录,复制一个网络配置文件,命名为ifcfg-br-ex,并修改其配置,如下图所示](#24. 进入网络配置目录,复制一个网络配置文件,命名为ifcfg-br-ex,并修改其配置,如下图所示)
- [25. 修改ens33网卡配置,如下图所示](#25. 修改ens33网卡配置,如下图所示)
- [25. 关闭防火墙规则](#25. 关闭防火墙规则)
- [26. 开启内核转发](#26. 开启内核转发)
- [27. 关闭防火墙](#27. 关闭防火墙)
- [28. 更新路由到最新版本](#28. 更新路由到最新版本)
- [28. 安装openvswitch、qemu-kvm、libvirt、dnsmasq、net-tools服务](#28. 安装openvswitch、qemu-kvm、libvirt、dnsmasq、net-tools服务)
- [29. 开启openvswitch服务,并新建br-int虚拟交换机](#29. 开启openvswitch服务,并新建br-int虚拟交换机)
- [30. 给br-int设置ip地址为30.2.0.1/24并开启,添加br-ex网桥,把ens33嫁接到br-ex网桥上并重启网络。](#30. 给br-int设置ip地址为30.2.0.1/24并开启,添加br-ex网桥,把ens33嫁接到br-ex网桥上并重启网络。)
- [31. 在br-int上新添加gre接口,使其指向docker虚拟宿主机](#31. 在br-int上新添加gre接口,使其指向docker虚拟宿主机)
- [32. 新增一条路由信息,指向docker虚拟宿主机的IP地址](#32. 新增一条路由信息,指向docker虚拟宿主机的IP地址)
- [33. 配置dnsmasq;](#33. 配置dnsmasq;)
- [34. 重新启动dnsmasq;](#34. 重新启动dnsmasq;)
- [35. 新建ovs-ifup和if-down脚本。](#35. 新建ovs-ifup和if-down脚本。)
- [36. 给两个脚本赋予执行权限](#36. 给两个脚本赋予执行权限)
- [37. 为防止冲突,删除tap0接口](#37. 为防止冲突,删除tap0接口)
- [38. 启动kvm虚拟机](#38. 启动kvm虚拟机)
- [39. 使用给的账号密码登录进入](#39. 使用给的账号密码登录进入)
- [40. 查看kvm虚拟机ip地址](#40. 查看kvm虚拟机ip地址)
-
- 测试连通性
-
-
- [1.kvm虚拟宿主机ping docker虚拟宿主机网桥br0的IP(30.1.0.1),证明两个主机间连通。](#1.kvm虚拟宿主机ping docker虚拟宿主机网桥br0的IP(30.1.0.1),证明两个主机间连通。)
- [2.docker虚拟宿主机ping kvm虚拟宿主机网桥br0的IP(30.2.0.1),证明两个主机间连通。](#2.docker虚拟宿主机ping kvm虚拟宿主机网桥br0的IP(30.2.0.1),证明两个主机间连通。)
- [3.docker中ping kvm虚拟宿主机IP。](#3.docker中ping kvm虚拟宿主机IP。)
- [4.docker中ping docker宿主机IP。](#4.docker中ping docker宿主机IP。)
- 5.kvm虚拟机中ping通docker
- 6.docker虚拟机中ping通kvm
-
-
建立基于OpenvSwitch的GRE隧道
![](https://file.jishuzhan.net/article/1789315373015764994/5c316c694b501306c8479fcc05e4a807.webp)
实验前准备:编辑虚拟机网络配置,使VMnet8处在192.168.10.0网段。
1. 使用VMware安装2个CentOS 7虚拟机,安装时记得都开启CPU虚拟化,第一台命名为"Docker",第二台命名为"KVM"。
2. 安装完虚拟机后,进入虚拟机,修改网络配置(onboot改为yes)并重启网络服务,查看相应IP地址,并使用远程连接软件进行连接。
3. 把老师所给Packages包、centos的docker镜像以及cirros镜像使用winSCP传送至虚拟机(centos6.5传送至docker虚拟机,cirros传送至KVM虚拟机),并解压Packages包至/opt目录下。
4. 两台虚拟机都配置默认镜像yum源,并且把Packages包也一起配置到本地yum源当中。
镜像yum源配置教程详见:CentOS如何配置本地yum源。
Packages包本地yum源配置详见:实训5-1
5. 修改主机名,方便区分。第一台虚拟机(命名为Docker那台)修改主机名为docker,第二台虚拟机(命名为KVM那台)修改主机名为kvm。如下图所示。
docker那台:
KVM那台:
配置虚拟机Docker
6. 修改网络配置,新增一行NM_CONTROLLER=no,如下图所示:
7. 关闭防火墙
![](https://file.jishuzhan.net/article/1789315373015764994/ca38a2e87829321bd7797d12dbcb6400.webp)
![](https://file.jishuzhan.net/article/1789315373015764994/22575d7769fe0020c93e59693e0dfec8.webp)
8. 开启内核转发
小知识:为什么我们需要开启内核转发?
linux服务器经常被用来提供防火墙、路由器、NAT等功能,在这些场景下,linux内核需要将网卡上收到的报文转发给其他网络设备。linux内核提供了ip_forward参数用于开关内核的报文转发功能,只有这个开关被打开时,内核才会执行报文的转发。
9. 安装openvswitch、bridge-utils、tunctl、docker-io服务
10. 更新下路由,看是否有最新路由版本。
![](https://file.jishuzhan.net/article/1789315373015764994/dbb5d4228918d6e08addcb9d8c5c0cba.webp)
11. 启动openvswitch服务以及docker服务。
12. 检查OVS是否安装好。
![](https://file.jishuzhan.net/article/1789315373015764994/3e20996eafac555059e078245725e57d.webp)
13. 创建br0网桥,并创建名字为br-int的OVS开放虚拟交换机,并重启网络。
14. 安装net-tools,并给br0设置地址为30.1.0.1/24
15. 把br0桥接到br-int上
![](https://file.jishuzhan.net/article/1789315373015764994/b25b4bbc69270ff1b3c1cf3ae43f739c.webp)
17. 在OVS交换机br-int上创建gre接口,地址指向kvm虚拟机IP
bash
ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.10.*(这里为KVM宿主机IP地址)
18. 启动br0和br-int;
![](https://file.jishuzhan.net/article/1789315373015764994/8f5a890ca58240bbc3af09af697b5685.webp)
19. 添加一条路由信息,使30.2.0.0网段的路由指向kvm虚拟机的ens33网卡
bash
ip route add 30.2.0.0/24 via 192.168.10.*(这里为kvm虚拟宿主机IP地址) dev ens33
20. 修改docker配置信息。配置完成后启动docker。
21. 把开始上传的镜像包导入docker,并添加tag。
![](https://file.jishuzhan.net/article/1789315373015764994/a4e6a01f7eb6ff1c10e85be1234735a3.webp)
22. 启动docker,并查看docker的CONTAINER ID
![](https://file.jishuzhan.net/article/1789315373015764994/8e2add0604d15381ed45eb2c4ad7add2.webp)
![](https://file.jishuzhan.net/article/1789315373015764994/bb615d506b95551350ce86527528233b.webp)
23. 进入docker,查看docker的IP
![](https://file.jishuzhan.net/article/1789315373015764994/8f72417566893b09f147ffdd6ee0b9c3.webp)
![](https://file.jishuzhan.net/article/1789315373015764994/1dd5cf18d34e2b12cac668986495b972.webp)
配置虚拟机KVM
24. 进入网络配置目录,复制一个网络配置文件,命名为ifcfg-br-ex,并修改其配置,如下图所示
25. 修改ens33网卡配置,如下图所示
25. 关闭防火墙规则
![](https://file.jishuzhan.net/article/1789315373015764994/923d9dfaf02ea8568d1530bab30d86e4.webp)
26. 开启内核转发
![](https://file.jishuzhan.net/article/1789315373015764994/e8e743d7e89990aedaadfe4ada353d50.webp)
27. 关闭防火墙
(执行 setenforce 0 时,它会关闭 SELinux 防火墙。SELinux 是一个内核模块,它提供了访问控制安全策略,以防止未授权的进程访问系统资源。)
28. 更新路由到最新版本
![](https://file.jishuzhan.net/article/1789315373015764994/06e91b9b0a6a702a87733c02656841fa.webp)
28. 安装openvswitch、qemu-kvm、libvirt、dnsmasq、net-tools服务
29. 开启openvswitch服务,并新建br-int虚拟交换机
![](https://file.jishuzhan.net/article/1789315373015764994/84d008734481d8cb6143cdcfa7679df6.webp)
30. 给br-int设置ip地址为30.2.0.1/24并开启,添加br-ex网桥,把ens33嫁接到br-ex网桥上并重启网络。
31. 在br-int上新添加gre接口,使其指向docker虚拟宿主机
bash
ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.10.*(这里为docker虚拟宿主机的IP地址)
32. 新增一条路由信息,指向docker虚拟宿主机的IP地址
![](https://file.jishuzhan.net/article/1789315373015764994/9977049d6cfa20eac91e6f957acadc0d.webp)
33. 配置dnsmasq;
bash
/usr/sbin/dnsmasq --strict-order --bind-interfaces --interface=br-int --except-interface=lo --pid-file=/var/run/qdhcp.pid --leasefile-ro --dhcp-range=30.2.0.3,30.2.0.254,255.255.255.0,12h --conf-file=
34. 重新启动dnsmasq;
![](https://file.jishuzhan.net/article/1789315373015764994/d7369283f6fd4aa9fa4b6c6656cc00fd.webp)
35. 新建ovs-ifup和if-down脚本。
![](https://file.jishuzhan.net/article/1789315373015764994/34ac5db3a251ea90d5bb766507c39181.webp)
36. 给两个脚本赋予执行权限
![](https://file.jishuzhan.net/article/1789315373015764994/b7c4ac5bbcd9aa5585911ba9d7dd5228.webp)
37. 为防止冲突,删除tap0接口
![](https://file.jishuzhan.net/article/1789315373015764994/de4a3207e7fd0b0fe86e7ccdddcc0382.webp)
38. 启动kvm虚拟机
bash
/usr/libexec/qemu-kvm -m 512 -drive file=cirros-0.3.3-x86_64-disk.img,if=virtio -net nic,model=virtio -net tap,script=ovs-ifup -nographic -vnc :1
![](https://file.jishuzhan.net/article/1789315373015764994/3e79211ea8a760b9368bceb3e706fb7b.webp)
39. 使用给的账号密码登录进入
![](https://file.jishuzhan.net/article/1789315373015764994/7a9e1f196171a225471b9eff4a7f0870.webp)
40. 查看kvm虚拟机ip地址
![](https://file.jishuzhan.net/article/1789315373015764994/f07f1a505969ec3daba0cdd0e3e7338e.webp)
测试连通性
1.kvm虚拟宿主机ping docker虚拟宿主机网桥br0的IP(30.1.0.1),证明两个主机间连通。
![](https://file.jishuzhan.net/article/1789315373015764994/1b2c45e47d31e18711f482f5833bf12e.webp)
2.docker虚拟宿主机ping kvm虚拟宿主机网桥br0的IP(30.2.0.1),证明两个主机间连通。
![](https://file.jishuzhan.net/article/1789315373015764994/512544b10d79e4bed7a2e800dd45d11d.webp)
3.docker中ping kvm虚拟宿主机IP。
![](https://file.jishuzhan.net/article/1789315373015764994/a4a1de5739605ca449098da0a28a16a0.webp)
4.docker中ping docker宿主机IP。
![](https://file.jishuzhan.net/article/1789315373015764994/dccc82ad7cfc3367c0eaec25096105af.webp)
5.kvm虚拟机中ping通docker
![](https://file.jishuzhan.net/article/1789315373015764994/fc1dd58233b49ff4320c66cac529d483.webp)
6.docker虚拟机中ping通kvm
![](https://file.jishuzhan.net/article/1789315373015764994/7d91aa968bb16631581b63470fa5700c.webp)