【编者的话】Open vSwitch是一个虚拟交换软件,主要用于虚拟机VM环境,提供网络的虚拟化。本篇文档重点介绍如何在Docker中使用Open vSwitch。
这个文档描述了如何在Docker(大于或等于1.9.0版本)中使用Open vSwitch。我们假设你已经安装好了Open vSwitch和Docker。请没有安装好的读者可以根据 INSTALL.md 和 www.docker.com 的指导来进行安装。
Docker 1.9.0开始支持多主机网络(multi-host networking)。我们可以通过OVNOpen vSwitch virtual network)来将Docker的网络和Open vSwitch结合起来。
对于OVN和Docker的多主机网络(multi-host networking),Docker需要分布式键值对存储的支持。假设我们这里采用consul来提供分布式键值对存储,并且你的主机IP地址为$HOST_IP。用户可以使用下面的命令来启动Docker进程:
docker daemon --cluster-store=consul://127.0.0.1:8500 /
--cluster-advertise=$HOST_IP:0
OVN为容器提供了网络虚拟化技术。OVN和Docker的结合使用存在两种模式—underlay模式和overlay模式。
在underlay模式下,OVN要求配置OpenStack来提供容器网络。在这个模式下,用户可以创建逻辑网络,并且让运行在虚拟机中的容器、独立的虚拟机(没有容器运行在其中)和物理机器连接到同一个逻辑网络上。这是一种多租户、多主机的解决办法。
在overlay模式下,OVN可以为运行跨主机的容器们提供一个逻辑网络。这是一种单租户(是否能扩展到多租户取决于安全特性)、多主机的解决办法。在这种模式下,你并不需要预创建好的OpenStack。
值得注意的是,用户必须在他想要运行容器的虚拟机或主机上安装并运行Open vSwitch。
Overlay模式下,需要Open vSwitch 2.5版本或后续版本的支持。
ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640接下来,启动ovn-northd后台进程。这个进程负责将来自Docker的网络信息(存储在OVN_Northbound 数据库中)转换成逻辑流存储于OVN_Southbound数据库。
/usr/share/openvswitch/scripts/ovn-ctl start_northd
ovs-vsctl set Open_vSwitch . external_ids:ovn-remote="tcp:$CENTRAL_IP:6640"最后,启动ovn-controller(你需要在每一次启动时运行以下命令):
external_ids:ovn-encap-ip=$LOCAL_IP external_ids:ovn-encap-type="$ENCAP_TYPE"
/usr/share/openvswitch/scripts/ovn-ctl start_controller
easy_install -U pip在每一个你想要创建容器的主机上启动Open vSwitch驱动:
pip install Flask
ovn-docker-overlay-driver --detachDocker内部包含了一些模块,这些模块拥有类似于OVN的逻辑交换机和逻辑端口的概念。请读者仔细阅读Docker的文档来查找相关的命令。这里我们给出了一些案例:
创建用户自己的逻辑交换机
下面的命令创建了一个名为”foo“的逻辑交换机,它的网段为”192.168.1.0/24”:
NID=`docker network create -d openvswitch --subnet=192.168.1.0/24 foo`
docker network ls你也可以通过以下命令从OVN的northbound数据库中查找到这个逻辑交换机:
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lswitch-list
Docker创建逻辑端口,并且将这个端口附加到逻辑网络上
比如说,将一个逻辑端口添加到容器busybox的“foo”网络上:
docker run -itd --net=foo --name=busybox busybox
显示所有的逻辑端口
Docker现在并没有一个CLI命令来罗列所有的逻辑端口,但是你可以从OVN的数据库中找到它们:
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lport-list $NID
docker network create -d openvswitch --subnet=192.168.2.0/24 bar用户可以删除逻辑端口,或者将它们从运行容器上分离出来:
docker network connect bar busybox
docker network disconnect bar busybox
docker network rm bar
nova list然后运行:
neutron port-list --device_id=$id在虚拟机中,下载OpenStack的RC文件,这些文件包含了租户的信息(我们用openrc.sh来指代它)。编辑这个文件,并且将之前获取到的port-id以 export OS_VIF_ID=$port-id的格式加入到文件中。文件的内容如下:
easy_install -U pip运行openrc文件:
pip install python-neutronclient
pip install Flask
../openrc.sh开启网络驱动,并且提供OpenStack租户的密码:
ovn-docker-underlay-driver --bridge breth0 --detach从现在开始,你可以使用和overlay模式类似的Docker命令了。请阅读“man ovn-architecture”来理解OVN的技术细节。
原文链接: How to Use Open vSwitch with Docker (翻译:杨润青)
===========================
译者介绍
杨润青,90后博士僧,研究方向是网络和信息安全。