如何在Docker中使用Open vSwitch

如何在Docker中使用Open vSwitch

作者:翻译:杨润青 2015-11-26 10:57:56

云计算 Open vSwitch是一个虚拟交换软件,主要用于虚拟机VM环境,提供网络的虚拟化。本篇文档重点介绍如何在Docker中使用Open vSwitch。

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)。我们可以通过OVN(Open vSwitch virtual network)来将Docker的网络和Open vSwitch结合起来。

简介

对于OVN和Docker的多主机网络(multi-host networking),Docker需要分布式键值对存储的支持。假设我们这里采用consul来提供分布式键值对存储,并且你的主机IP地址为$HOST_IP。用户可以使用下面的命令来启动Docker进程:

  1. docker daemon --cluster-store=consul://127.0.0.1:8500 \ 
  2. --cluster-advertise=$HOST_IP:0 

OVN为容器提供了网络虚拟化技术。OVN和Docker的结合使用存在两种模式:underlay模式和overlay模式。

在underlay模式下,OVN要求配置OpenStack来提供容器网络。在这个模式下,用户可以创建逻辑网络,并且让运行在虚拟机中的容器、独立的虚拟机(没有容器运行在其中)和物理机器连接到同一个逻辑网络上。这是一种多租户、多主机的解决办法。

在overlay模式下,OVN可以为运行跨主机的容器们提供一个逻辑网络。这是一种单租户(是否能扩展到多租户取决于安全特性)、多主机的解决办法。在这种模式下,你并不需要预创建好的OpenStack。

值得注意的是,用户必须在他想要运行容器的虚拟机或主机上安装并运行Open vSwitch。

Overlay 模式

Overlay模式下,需要Open vSwitch 2.5版本或后续版本的支持。

1、启动核心模块

OVN架构中会有一个核心的模块来存储网络信息。因此你需要在你其中一台主机(IP地址为$CENTRAL_IP,并且已经安装和启动了Open vSwitch)上启动相关的核心服务。

首先我们让ovsdb-server监听一个TCP端口:

  1. ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640 

接下来,启动ovn-northd后台进程。这个进程负责将来自Docker的网络信息(存储在OVN_Northbound 数据库中)转换成逻辑流存储于OVN_Southbound数据库。

  1. /usr/share/openvswitch/scripts/ovn-ctl start_northd 

2、一次性配置

在每一个你打算创建容器的主机上,你需要运行以下的命令(如果你的OVS数据库被清空,你需要再次运行这个命令。除此之外,重复运行这个命令都是没有任何影响的)。

其他的主机可以通过$LOCAL_IP地址来访问到这个主机,它就相当于本地通道的端点。

$ENCAP_TYPE是指用户想使用的通道的类型。它可以是”geneve“或者”stt“。(注意,你的内核需要支持以上两个类型,用户可以通过运行以下命令来检测内核是否支持以上类型:”llsmod | grep $ENCAP_TYPE”)。

  1. ovs-vsctl set Open_vSwitch . external_ids:ovn-remote="tcp:$CENTRAL_IP:6640"  
  2. external_ids:ovn-encap-ip=$LOCAL_IP external_ids:ovn-encap-type="$ENCAP_TYPE" 

最后,启动ovn-controller(你需要在每一次启动时运行以下命令):

  1. /usr/share/openvswitch/scripts/ovn-ctl start_controller 

3、启动Open vSwitch网络驱动

在默认情况下,Docker使用Linux网桥,但它支持外扩展。为了替换Linux网桥,我们需要先启动Open vSwitch驱动。

Open vSwitch驱动使用了Python Flask模块来监听Docker的网络API请求。因此,用户需要先安装Python 的Flask模块。

  1. easy_install -U pip 
  2. pip install Flask 

在每一个你想要创建容器的主机上启动Open vSwitch驱动:

  1. ovn-docker-overlay-driver --detach 

Docker内部包含了一些模块,这些模块拥有类似于OVN的逻辑交换机和逻辑端口的概念。请读者仔细阅读Docker的文档来查找相关的命令。这里我们给出了一些案例:

1)创建用户自己的逻辑交换机

下面的命令创建了一个名为”foo“的逻辑交换机,它的网段为”192.168.1.0/24”:

  1. NID=`docker network create -d openvswitch --subnet=192.168.1.0/24 foo` 

2)显示已有逻辑交换机

  1. docker network ls 

你也可以通过以下命令从OVN的northbound数据库中查找到这个逻辑交换机:

  1. ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lswitch-list 

3)Docker创建逻辑端口,并且将这个端口附加到逻辑网络上

比如说,将一个逻辑端口添加到容器busybox的“foo”网络上:

  1. docker run -itd --net=foo --name=busybox busybox 

4)显示所有的逻辑端口

Docker现在并没有一个CLI命令来罗列所有的逻辑端口,但是你可以从OVN的数据库中找到它们:

  1. ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lport-list $NID 

5)用户也可以创建一个逻辑端口,并将它添加到一个运行中的容器上:

  1. docker network create -d openvswitch --subnet=192.168.2.0/24 bar 
  2. docker network connect bar busybox 

用户可以删除逻辑端口,或者将它们从运行容器上分离出来:

  1. docker network disconnect bar busybox 

6)用户也可以删除逻辑交换机:

  1. docker network rm bar 

Underlay模式

在这个模式下,OVN要求用户预安装好OpenStack。

1、一次性配置

一个OpenStack的租户创建了一个虚拟机,这个虚拟机拥有单张或多张网卡。如果租户想要发送虚拟机中容器的网络包,他需要获取这些网卡的port-id。Port-id可以通过以下命令获得:

  1. nova list 

然后运行:

  1. neutron port-list --device_id=$id 

在虚拟机中,下载OpenStack的RC文件,这些文件包含了租户的信息(我们用openrc.sh来指代它)。编辑这个文件,并且将之前获取到的port-id以 export OS_VIF_ID=$port-id的格式加入到文件中。文件的内容如下:

  1. #!/bin/bash 
  2. export OS_AUTH_URL=http://10.33.75.122:5000/v2.0 
  3. export OS_TENANT_ID=fab106b215d943c3bad519492278443d 
  4. export OS_TENANT_NAME="demo" 
  5. export OS_USERNAME="demo" 
  6. export OS_VIF_ID=e798c371-85f4-4f2d-ad65-d09dd1d3c1c9 

2、创建Open vSwitch网桥

如果用户的虚拟机只有一个以太网接口(比如说eth0),你需要将这个设备作为一个端口加入到Open vSwitch的”breth0”网桥上,并且移除它的IP地址,将其他相关的信息转移到这个网桥上。(如果有多个网路接口,用户自己创建Open vSwitch网桥,并且添加接口到网桥上)

如果你使用DHCP来获取IP地址,你需要关闭监听eth0的DHCP客户端,并且开启一个监听Open vSwitch breth0网桥的DHCP客户端。

你可以让以上的步骤持久化,比如说你的虚拟机是Debian/Ubuntu,你可以参考 openvswitch-switch.README.Debian,如果你的虚拟机基于RHEL,你可以阅读 README.RHEL完成持久化。

3、开启Open vSwitch网络驱动

Open vSwitch驱动使用了Python Flask模块来监听Docker的网络API调用。这个驱动还使用了OpenStack的python-neutronclient库。因此,如果你的主机还没有安装Python Flask或者python-neutronclient,你需要使用以下命令来安装:

  1. easy_install -U pip 
  2. pip install python-neutronclient 
  3. pip install Flask 

运行openrc文件:

  1. ../openrc.sh 

开启网络驱动,并且提供OpenStack租户的密码:

  1. ovn-docker-underlay-driver --bridge breth0 --detach 

从现在开始,你可以使用和overlay模式类似的Docker命令了。请阅读“man ovn-architecture”来理解OVN的技术细节。

原文链接:http://dockone.io/article/837

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/268815.html<

(0)
管理的头像管理
上一篇2025-05-07 01:43
下一篇 2025-05-07 01:44

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注