Docker使用OpenVSwitch实现跨主机网络互通

初始化环境

安装EPEL

rpm -ivh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

更新系统软件包

yum update

安装必要工具

yum install htop net-tools bridge-utils

禁用SELinux

sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

重启服务器。

安装Docker

安装最新版本Docker

curl -sSL https://get.daocloud.io/docker | sh

添加到Daocloud集群监控

curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s [key]

安装OpenVSwitch

准备基础环境

yum -y install wget openssl-devel gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool

adduser ovs

su - ovs

构建安装OpenVSwitch,只需要构建一次,其他机器直接使用RPM包

mkdir -p ~/rpmbuild/SOURCES

wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz

cp openvswitch-2.3.1.tar.gz ~/rpmbuild/SOURCES/

tar xfz openvswitch-2.3.1.tar.gz

sed 's/openvswitch-kmod, //g' openvswitch-2.3.1/rhel/openvswitch.spec > openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec

rpmbuild -bb --nocheck ~/openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec

exit

安装OpenVSwitch

yum localinstall /home/ovs/rpmbuild/RPMS/x86_64/openvswitch-2.3.1-1.x86_64.rpm

检查OpenVSwitch运行情况

ovs-vsctl -V

如果开启了SELinux,还需要执行:

yum install policycoreutils-python
mkdir /etc/openvswitch
semanage fcontext -a -t openvswitch_rw_t "/etc/openvswitch(/.*)?"
restorecon -Rv /etc/openvswitch

将OpenVSwitch设为开机自动启动,并立即启动:

chkconfig openvswitch on
systemctl start openvswitch.service

配置OpenVSwitch网络

添加OpenVSwitch网桥

ovs-vsctl add-br ovsbr0

增加网桥配置:

vi /etc/sysconfig/network-scripts/ifcfg-ovsbr0

配置为:

DEVICE=ovsbr0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
HOTPLUG=no
USERCTL=no

建立基于物理网络的连接,可以使用gre或者vxlan。

GRE隧道

ovs-vsctl add-port ovsbr0 gre0 -- set interface gre0 type=gre options:remote_ip=192.168.24.2

VXLAN

ovs-vsctl add-port ovsbr0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.24.2

注意,如果开启了防火墙,需要开放相应端口。

使用PING命令来检测网络是否畅通吧:

ping 10.0.0.2
ping 10.0.0.3

配置Docker使用OpenVSwitch

停止Docker

systemctl stop docker

关闭并删除默认的docker0网桥

ip link set dev docker0 down
brctl delbr docker0
iptables -t nat -F POSTROUTING

创建自定义的docker0网桥,桥接到ovsbr0上

vi /etc/sysconfig/network-scripts/ifcfg-docker0

配置为:

DEVICE=docker0
ONBOOT=yes
TYPE=Bridge
OVS_BRIDGE=ovsbr0
USERCTL=no
BOOTPROTO=none
HOTPLUG=no
IPADDR0=10.0.1.1
PREFIX0=24
MTU=1446

重启网络,启动docker

systemctl restart network
systemctl start docker

重启网络后,需要重新建立隧道连接!

注意事项

  • MTU需要仔细设置,会影响网络速度,GRE方式设为1462,vxlan设为1450。

参考文章

Docker使用OpenVSwitch实现跨主机网络互通》有1个想法

评论已关闭。