OpenStack必备基础理论知识点整理!

前言

  • 本文的介绍以文字为主,内容丰富详细并繁多。慎入!

一:OpenStack概述

1.1:OpenStack起源

  • OpenStack 是 Rackspace(一 家 美 国 的 云 计 算 厂 商 ) 和 美 国 国 家 航 空 航 天 局(National Aeronautics and Space Administration, 简称 NASA) 在 2010 年共同发起了OpenStack 项目。 由 Rackspace 贡献存储源码(Swift)、 NASA 贡献计算源码(Nova)。在 2010 年的 7 月发起了 OpenStack 项目。

1.2:什么是OpenStack?

  • OpenStack 是一个通过数据中心控制计算资源、 存储资源和网络资源的云平台。 同时它又是一款开源软件, 以 Apache 许可证授权的自由软件和开放源代码项目, 支持所有类型的云环境。
  • OpenStack 的目标是提供简单实施、 可扩展以及丰富的功能集的云产品, 来自全世界的云计算专家共同维护该云项目。 OpenStack 通过多种补充服务提供了 IaaS 解决方案,每一种服务均提供了相应的应用程序接口(Application Programming Interface, 简称 API),以促进各组件之间的整合。
  • OpenStack 被用来提供公有云以及私有云的建设以及管理。 作为一个开源项目, 其社区规模涵盖 130 家企业以及 1350 位开发人员。这些机构与个人都将 OpenStack 作为 IaaS 资源的通用前端。
  • OpenStack 覆盖了网络、 虚拟化、 操作系统、 服务器等各个方面。 一般情况下, 每半年左右更新一次版本。 下面表中列出了常见的 8个核心项目(即 OpenStack 服务)。

1.3:OpenStack常见的8个核心项目

服务 项目名称 解释
Compute(计算服务) Nova项目 负责实例生命周期的管理, 计算资源的单位。 对 Hypervisor 进行屏

蔽, 支持多种虚拟化技术(红帽默认为 KVM), 支持横向扩展。
Network(网络服务) Neutron项目 负责虚拟网络的管理, 为实例创建网络的拓扑结构。 是面向租户的网

络管理, 可以自定义网络, 并使租户之间互不影响。
Identity(身份认证服务) Keystone项目 类似于 LDAP 服务, 对用户、 租户和角色、 服务进行认证与授权, 并

且支持多认证机制。
Dashboard(控制面板服务) Horizon服务 提供一个 Web 管理界面, 与 OpenStack 底层服务进行交互。
Image Service(镜像服务) Glance项目 提供虚拟机镜像模板的注册与管理, 将做好的操作系统复制为镜像模

板, 在创建虚拟机时直接使用。 可支持多格式的镜像。
Block Storage(块存储服务) Cinder 负责为运行实例提供持久的块存储设备, 可进行方便的扩展, 按需付

费, 支持多种后端存储。
Object Storage(对象存储服务) Swift Swift 为 OpenStack 项目

提供基于云的弹性存储, 支持集群无单点故障。
Telemetry(计量服务) Ceilometer项目 用于度量、 监控和控制数据资源的集中来源, 为 OpenStack 用户提供

记账途径。

1.4:OpenStack的优势

  • OpenStack 在控制性、 兼容性、 可扩展性、 灵活性方面具备有优势, 它可能成为云计算领域的行业标准。
    • 控制性: 完全开源的平台, 模块化的设计, 提供相应的 API 接口, 方便与第三方技术集成, 从而满足自身业务需求。
    • 兼容性: OpenStack 兼容其他公有云, 方便用户进行数据迁移
    • 可扩展性: Openstack 采用模块化的设计, 支持主流发行版本的 Linux, 可以通过横向扩展, 增加节点、 添加资源。
    • 灵活性: 用户可以根据自己的需要建立基础设施, 也可以轻松地为自己的群集增加规模 。
  • Openstack 项目采用 Apache2 许可, 意味着第三方厂家可以重新发布源代码。行业标准: 众多 IT 领军企业都加入到 OpenStack 项目, 意味着 OpenStack 在未来可能形成云计算行业标准。

二:OpenStack的节点类型

2.1:控制节点

  • 顾名思义就是OpenStack中实现数据中心控制的节点,管理 OpenStack的所有服务组件,所有组件不管在哪里,都需要在控制节点上完成类似注册的工作
  • 控制节点必须安装三种类型的软件
    • 第一种
      • 控制接节点上必须安装的是一些相对于 Openstack服务来说的底层的软件,这些底层的软件需要为openstock组件来提供服务,这些软件有DB软件,消息队列软件, Memorycache和Etcd等
    • 第二种
      • 除了底层软件之外,控制节点上必须安装三个 OpenStack的核心组件
      • Keystone和glance是完整的安装在控制节点上的,Nova安装了一部分,Nova的安装是为了节点上的计算服务
      • Glance服务是可以控制节点上剥离的,一般 Glance占用资源小。一般大家都安装在控制节点上的
      • 控制节点是可以安装 Nova computed的,但是生产环境是不会这么干的
    • 第三种
      • 除了底层服务软件和核心组件之外,OpenStack还支持其他可选的组件,比如你的集群中有存储接口,那么在 OpenStack上需要安装管理存储节点和对应的服务组件等等,类似核心组件Nova的套路

2.2:网络节点

  • 网络节点只有Neutron组件,网络节点上的neutron安装core plugin(ML2)和service plugin(L3 service),具体的 Service Plugin可以根据你的需求选择

2.3:计算节点

  • 包含Nova部分组件和 Neutron部分组件Nova- compute.,Neutron agent

2.4:存储节点

  • 安装存储组件的节点,一般有代表性的 Cinder(块存储)和 Swift(对象存储)

三:OpenStack架构

3.1:概述

  • OpenStack由多种服务组成,每种服务具有独立的命名。在整个OpenStack架构中, Keystone提供认证服务,接收来自用户和服务的认证请求,并对其身份进行认证。
    各个服务之间通过公用的API接口进行交互。大部分服务均包含一个API进程,用于侦听API请求,根据服务的性质选择处理请求或转发请求。服务进程之间的通讯通过消息队列实现,如AMQP。
  • 在部署完成的云系统平台上,用户通过 Dashboard或 RestaRt方式在经 Keystone模块认证授权后,可以执行创建虚拟机服务。通过Nova模块创建虚拟机实例,Nova调用 Glance模块提供的镜像服务,然后调用 Neutron模块提供网络服务。根据需要可以选择给虚拟机増加存储卷,卷功能由 Cinder模块提供服务。整个过程在Ceilometer模块的资源监控下完成。同时 Cinder提供的 Volume和 Glance提供的镜像可以诵讨 Swift对象存储机制讲行保存
  • mark
  • mark
  • 通过以上解析可以看到 OpenStack 云平台服务的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四个核心模块完成的,四个辅助模块 Horizen、Ceilometer、Keystone、Swift 提供的访问、监控、权限和对象存储功能。

3.2:OpenStack- ironic裸金属

  • 简而言之,OpenStack Ironic就是一个进行裸机部署安装的项目。
    所谓裸机,就是指没有配置操作系统的计算机。从裸机到应用还需要进行以下操作:
    • (1)硬盘RAID、分区和格式化;

    • (2)安装操作系统、驱动程序;

    • (3)安装应用程序。

    • ronic实现的功能,就是可以很方便的对指定的一台或多台裸机,执行以上一系列的操作。例如部署大数据群集需要同时部署多台物理机,就可以使用Ironic来实现。

    • Ironic可以实现硬件基础设施资源的快速交付。

    • mark

三:OpenStack常见的核心项目

3.1:用户认证服务keystone

  • keystone主要涉及如下几个概念
3.1:重要概念介绍
  • 用户(user)

    • 使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证

    • 在 OpenStack中,用户是使用 OpenStack云服务的人、系统或服务。用户可以登录或使用指定的 token访问云中的资源,并可以被指派到指定的项目或角色。认证服务通过对用户身份的确认,来判断一个请求是否被允许。用户通过认证信息如密码、 API Keys等进行验证

  • 项目(project)

    • 租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。
    • 项目是各个服务中的一些可以访问的资源集合,用来分组或隔离资源或身份对象。不同服务中,项目所涉及的资源不同。在Nova服务中项目可以是云主机,在 Swift和 Glance中项目可以是镜像存储,在 Neutron中项目可以是网络资源。默认情况下,用户总是被绑定到项目中。一个项目中可以有多个用户,一个用户可以属于一个或多个项目。
  • 角色(role)

    • 角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。安全包含两部分:Authentication(认证)和 Authorization(鉴权)

    • 角色是一组用户可以访问的资源权限集合,这些资源包含虛拟机、镜像、存储资源等。
      用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色中。其区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于某个项目内的资源权限。

  • 服务(service)

    • Openstack Service,即Openstack中运行的组件服务。nova,glance都是属于一个服务,需要在keystone上进行创建,指定类型。
    • 用户使用云中的资源是通过访问服务的方式实现, OpenStack中包含许多服务,如提供计算服务的Nova、提供镜像服务的 Glance以及提供对象存储服务的 Swift。一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个用户尝试访问其项目内的 service时,该用户必须知道这个服务是否存在以及如何访问这个服务。
    • 创建服务有一个服务,就创建一个endpoint,会根据服务类型去查找那个服务。Service 决定每个 Role 能做什么事情 ,Service 通过各自的 policy.json 文件对 Role 进行访问控制
  • 令牌(token)

    • 指的是一串比特值或者字符串,用来作为访问资源的令牌。Token中含有可访问资源的范围和有效时间。
    • 是一串数字字符串,用于访问0 penStock服务的API以及资源。一个令牌可以在特定的时间内生效,并可以在任意时间释放。在 keystone中主要是引入令牌机制来保护用户对资源的访问。
  • 端点(endpoint)

    • 一个可以通过网络来访问和定位某个Openstack Service的地址,通常是一个URL。例如,Nova需要访问Glance服务去获取Image时,Nova通过访问Keystone拿到Glance的Endpoint,然后通过访问该Endpoint去获取Glance服务,我们可以通过Endpoint的region属性去定义多个region。Endpoint该使用对象分为三类:
      1. Admin URL:给admin用户使用,被从常规的访问中分离。
      2. Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。
      3. Public URL:其它用户可以访问的地址,可以被全局访问。
      4. User 通过 Endpoint 访问资源和执行操作
    • 所谓端点,是指用于访问某个服务的网络地址或URL。如果需要访问一个服务,则必须知道该服务的端点。在 keystone中包含一个端点模板,这个模板提供了所有已存在的服务的端点信息。一个端点模板包含一个URL列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有 public、 private和 admin这三种权限。其中 public类型的端点可以被全局访问, private类型的端点只能被 OpenStack内部服务访问, admin类型的端点只能被管理员访问。
    • OpenStack身份认证服务将管理认证、授权以及服务目录整合为一个访问点,同时也是用户需要和OpenStack进行交互的第一个服务。一旦认证通过,终端用户使用其身份访问OpenStack其他服务。同样的,其他服务也将利用身份认证服务确认来访用户身份是否合法以及是否具备相应的权限。此外, OpenStack身份认证服务可以集成其他的身份认证管理系统
3.1.2:keystone工作流程图
  • mark

3.2:控制台 Dashboard

  • Dashboard(项目名称为 horizon)是一个Web接口,使得云平台管理员以及用户可以管理不同的OpenStack资源以及服务。
  • Dashboard通过 Apache的 mod_uwgis搭建,并通过 python模块实现和不同的 OpenStack API进行交互,从而实现管理目的。
  • Dashboard是一个用以管理、控制OpenStack服务的Web控制面板,通过它可以实现绝大多数OpenStack的管理任务。如实例、镜像、密匙对,卷等。
  • 通过 Dashboard,管理员无需记忆繁琐复杂的OpenStack命令。除此之外,用户还可以在控制面板中使用终端或VNC直接访问实例控制台。 Dashboard可以实现以下管理任务
    • 实例管理:创建、删除实例,查看终端日志,远程连接实例,管理卷等:
    • 访问与安全管理:创建安全组,管理密匙对,设置浮动IP地址等
    • 偏好设定:对虚拟硬件模板可以进行不同程度的偏好设定
    • 镜像管理:导入、编辑或删除镜像;
    • 用户管理:创建用户、管理用户、设置配额、查看服务目录等:
    • 卷管理:管理卷和快照:
    • 对象存储处理:创建、删除容器和对象。

3.3:镜像模块Glance

3.3.1:概述
  • 镜像服务允许用户发现、注册和获取虚拟机镜像。它提供了一个 REST API,允许查询虚拟机镜像的元数据,并获取一个现存的镜像。可以将虚拟机镜像存放到各种位置,从简单的文件系统到对象存储系统,如OpenStack Swift项目,默认是存储在本地文件系统上的。
  • 其实在生产环境中这个模块本身不存储大量的数据,需要挂载后台存储 swift来存放实际的镜像数据。
  • 在OpenStack环境中,镜像是用于在计算节点生成虛拟机。脱离了镜像服务,就无法创建虚拟机,所以镜像服务是0 penstock的一个核心服务。
3.3.2:主要组件
  • glance-api
    • glance-api用于接收镜像API的调用,诸如镜像发现、恢复以及存储等。作为一个后台进程, glance-api对外提供 REST API接口,响应用户发起的镜像查询、获取和存储的调用
  • glance- registry
    • glance- registry用于存储、处理和恢复镜像的元数据,元数据包括镜像的的大小和类型等属性, registry是一个内部服务接口,不建议暴露给普通用户
  • database
    • database用于存放镜像的元数据,可以根据需要选择数据库,如 MySQL、 SQLite等。
  • storage repository for image files
    • 一般情况下, glance并不需要存储任何镜像,而是将镜像存储在后端仓库中。 Glance支持多种 repository。主要包括对象存储 Swift、块存储 Cinder、 VMware的ESX/ESXi或者vCenter、亚马逊的S3、HTTP可用服务器、Ceph等
3.3.3:镜像的格式
  • Glance支持多种镜像格式,包括磁盘格式和容器格式。 OpenStack中可以支持多种虚拟化的技术,如KVM、 Xen Server、 Hyper-V和 VMware等。用户在上传镜像时,需要指定上传镜像文件的格式。除了磁盘格式,在Glance中还有容器的格式。一般在上传镜像时只需指定容器格式为bare,即为空。因为 Glance中并没有真正使用到容器格式。容器格式用来表示虚拟机镜像文件是否包含了元数据,例如OVF格式。下面列出了G1ance中常用的几种镜像文件格式。
  • RAW
    • RAW是一种没有格式或裸格式的磁盘文件类型,RAW对数据不做任何修饰和处理,直接保存最原始的状态,所以在性能方面非常出色。由于RAW格式保存原始数据,因此更容易和其他镜像格式进行转换
  • QCOW2
    • QCOW2是QCOW的升级版本,其主要特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁盘空间大小。例如创建了100GB的QCOW2格式的磁盘,而实际只保存了2GB数据,那么将只占用了实际物理磁盘的2GB空间。与RAW相比,使用这种格式可以节省磁盘容量
  • VHD
    • VHD是微软公司产品使用的磁盘格式。 Virtual PC(微软早期虚拟化产品)和 Hyper-V使用的就是VHD格式 VirtualBox也提供了对VHD的支持。如需在 OpenStack上使用 Hyper-V类型的虚拟化,就应上传VHD格式的镜像文件
  • VMDK
    • VMDK是 VMware公司产品使用的磁盘格式。目前也是一个开放的通用格式,除了 VMware自家的产品外,QEM和 Virtualbox也提供了对VMDK格式的支持。
  • VDI
    • VDI是Oracle公司的 VirtualBox虚拟软件所使用的格式
  • ISO
    • ISO是指一种存档数据文件在光盘上的格式。
  • AKI,ARI,AMI
    • Amazon公司的AWS所使用的镜像格式。

3.4:计算模块Nova

3.4.1:Nova概述
  • Nova是负责提供计算资源的模块,也是OpenStack中的核心模块,其主要功能是负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他的相关云平台管理功能。
  • OpenStack使用计算服务来托管和管理云计算系统。 OpenStack计算服务是基础设施服务(IaaS)系统的主要组成部分,模块主要由 Python实现。
  • OpenStack计算组件请求 OpenStack Identity服务进行认证,请求 OpenStack Image服务提供磁盘镜像,为 OpenStack Dashboard提供用户和管理员接口。磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定,例如,每个项目下可以创建多少实例。OpenStack组件可以在标准硬件上横向大规模扩展,并且下载磁盘镜像启动虚拟机实例。 OpenStack计算服务的主要组件如下
3.4.2:主要组件
  • Nova-api服务
    • 接收和响应来自最终用户的计算API请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。
    • 此服务支持Openstack计算服务API 、Amazon EC2 API 以及特殊的管理API,用于接收用户管理操作请求,管理使用EC2 API通过 Web Services调用实现。
    • 然后 API Server通过消息队列( Message Queue)轮流与云基础设施的相关组件通信。作为EC2 API的另外一种选择,OpenStack也提供一个内部使用的“ OpenStack API
  • Nova-api-metadata服务
    • 接收来自虚拟机发送的元数据请求。Nova-api-metadata服务一般在安装Nova-Network服务的多主机模式下使用。
  • Nova-Compute服务
    • 一个持续工作的守护进程,通过 Hypervisor的API来创建和销毁虚拟机实例。
      • Xen Server/XCP 的XenAPI
      • KVM或QEMU的libvirt
      • Vmware的WwareAPI
    • 这个过程通常比较复杂。守护进程同意了来自队列的动作请求,转换为一系列的系统命令,如启动一个KVM实例,然后到数据库中更新它们的状态。
  • Nova- placement-api服务
    • Nova- placement-api用于追踪记录资源提供者目录和资源使用情况,这些资源包括计算、存储以及IP地址池等。
  • Nova-Conductor模块
    • Nova- Conductor模块作用于Nova- Compute服务与数据库之间,避免了由Nova- Compute服务对云数据库的直接访问。它可以横向扩展。但是,不要将它部署在运行Nova- Compute服务的主机节点上。
  • Nova- Scheduler服务
    • 接收到一个来自队列的运行虚拟机实例请求,然后决定在哪台计算服务器主机来运行该虚拟机。通过恰当的调度算法从可用资源池获得一个计算服务。Nova- Scheduler服务将根据负载、内存、可用域的物理距离、CPU构架等信息,并运行调度算法,最终做出调度决策。
    • 最终OpenStack计算模块Nova中的各个组件是以数据库和队列为中心进行通信的

3.5:块存储Cinder

3.5.1:概述
  • 块存储服务( Cinder)提供块存储。存储的分配和消耗是由块存储驱动器或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/SAN、NFS、 I SCSI、CEPH等。块存储适合性能敏感性业务场景,例如数据库存储大规模可扩展的文件系统或服务器需要访问到块级的裸设备存储。典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动卷服务器可以运行在控制节点、计算节点或单独的存储节点之上。
  • 块存储服务为OpenStack中的实例提供持久的存储,块存储提供一个基础设施,用于管理卷以及和OpenStack计算服务交互,为实例提供卷、快照、卷类型等功能。站在实例的角度,挂载的每个卷都是一块独立的硬盘。 Cinder提供了从创建卷到删除卷整个生命周期的管理。其具体功能是:
    • 提供 REST API接口,使用户能够查询和管理卷、卷快照以及卷类型;
    • 协调卷的创建请求,合理优化存储资源的分配;
    • 通过驱动架构支持多种后端存储方式,包括LVM、NFS、Ceph和其他诸如EMC、IBM等商业存储产品和方案。
3.5.2:主要服务组件
  • Cinder-api
    • Cinder-api用来接受API请求,并将其路由到 Cinder-Volume执行。
  • Cinder-Volume
    • Cinder-Volume用来与块存储服务和 Cinder- Scheduler进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。 Cinder- Volume服务响应送到块存储服务的读写请求来维持状态,它也可以和多种存储提供者在驱动架构下进行交互。当用户请求一个存储资源时,由 Cinder-API负责接受请求, Cinder- Scheduler负责调度资源,而真正执行存储任务的是 Cinder-Volume。这样的工作机制使得存储架构非常容易扩展。当存储资源不足时,可以增加存储节点(运行 Cinder-Volume)。当客户的请求量太大调度不过来时,可以增加调度(运行Cinder- Scheduler)
  • Cinder- Scheduler
    • Cinder- Scheduler守护进程会选择最优存储节点来创建卷,其工作机制与Nova- Scheduler类似。当需要创建卷时, Cinder- Scheduler根据存储节点的资源使用情况选择一个最合适的节点来创建卷。
  • Cinder- Backup守护进程
    • Cinder- Backup服务提供任何种类备份卷到一个备份存储提供者。就像 Cinder- Volume服务,它与多种存储提供者在驱动架构下进行交互。
  • 消息队列
    • 消息队列作用是在块存储的进程之间路由信息。 Cinder各个子服务通过消息队列实现进程间通信和相互协作。
    • 以创建卷为例, Cinder的工作流程如下
    • 1.用户向 Cinder-API发送创建卷请求:“帮我创建一个卷“
    • 2.Cinder-API对请求做一些必要处理后,向消息队列发送一条消息:“让Cinder- Scheduler创建一个卷”;
    • 3.Cinder- Scheduler从消息队列获取到消息,然后执行调度算法,从若干存储节点中选出节点A
    • 4.Cinder- Scheduler向消息队列发送一条消息:“让存储节点A创建这个卷”;
    • 5.存储节点A的 Cinder- Volume从消息队列中获取到消息,然后通过卷提供者的驱动创建卷。

3.6:网络模块Neutron

3.6.1:概述
  • OpenStack早期的网络模块是Nova- Network,而 Neutron则是Nova- Network的更新换代产品,也是目前 OpenStack重要组件之一。在正式介绍之前,首先了解一些网络概念
    • 网络
      • 类似于实际的物理环境中的网络,OpenStack网络用于连接云主机或路由器。除此之外,还包含子网、网关以及DHCP服务等。OpenStack网络分为内部网络和外部网络,内部网络一般用于连接虚拟机,而外部网络一般用于连接宿主机外面的网络。
    • 子网
      • OpenStack中的子网是一个IP地址段,用于定义实际的IP地址范围。
    • 端口
      • 端口类似于实际网络中的网络接口,用于连接终端设备或另外一个网络。不同的是, OpenStack中端口连接的一般都是虚拟设备接口,如虚拟机的虚拟网卡或者路由器的虚拟接口等。端口还描述了相关的网络配置,例如可以在端口上配置MAC地址和IP地址。
    • 路由器
      • 路由器用于连接 OpenStack的内部网络和外部网络。类似实际路由器功能,支NAT功能,通过绑定浮动IP地址还可以实现地址映射
      • Neutron分别提供了二层(L2)交换和三层(L3)路由抽象的功能,对应于物理网络环境中的交换机和路由器
3.6.2:Linux虚拟网络
  • Neutron中最为核心的工作便是对网络的抽象与管理。在 OpenStack环境中对网络的抽象主要有以下几种形式
  • 虚拟交换机/网桥
    • OpenStack网络中,对于二层交换机有两种的抽象方式,一种是通过 Linux bridge实现,另外一种是通过OpenvSwitch实现。在一些早期opeNstack版本中,默认使用的是OpenvSwitch,而在 Ocata版本中,多节点手动安装默认使用的是 Linux bridge。从功能上来说openvSwitch更加强大,但是 Linux bridge实现比较简单,更加适合初学者。
  • 虚拟交换机/网桥主要实现以下功能。
    • 连接虚拟机:
    • 通过vlan功能隔离虚拟机网络
    • 连接虚拟网络到宿主机外部网络。
  • OpenvSwitch
    • 类似于 Linux bridge, OpenvSwitch也可以实现对二层网络的抽象,对虚拟网络提供分布式交换机功能。它支持各种组网类型,功能全面,支持基本的vlan功能,也支持QOS以及 NetFlow、 sFlow标准的管理接口和协议。从而,通过这些接口可以实现VM流量监控的任务。
    • 运行在云环境中各种或相同虚拟化平台上的多个 vSwitch实现了分布式架构的虚拟交换机。一个物理服务器上的 v Switch可以透明的与其他服务器上的 vSwitch连接通信。
    • 虚拟路由器
      • OpenStack中的虚拟路由器是对网络设备的一种抽象,实现了租户间的多网络构建以及内部网络和外部网络之间的通信问题。其实现原理和真实路由器一致,根据路由表转发数据包,同时还支持NAT地址转换以及浮动IP地址设置。
    • namespace
      • 二层网络通过van对租户网络进行隔离,而三层网络是通过 nanespace进行隔离,每个 namespace都有自己的独立网络栈,包括路由表、防火墙规则、网络接口等。
      • 同时, Neutron为每个 namespace提供DHCP和路由服务。所以各个租户之间的网络地址允许重叠,因为它们在不同的 namespace中进行抽象
      • mark
    • DHCP server
      • Neutron提供DHCP服务的组件是 DHCPagent,默认通过 dnsmasq实现DHCP功能。
2.6.2:组网模型
  • Neutron提供了多种组网模型供不同的租户搭建各种网络拓扑。
  • local网络
    • Local网络网络模型有如下特点
      • 不具备vlan特性,不能对二层网络进行隔离
      • 同一个local网络的虚拟机实例会连接到相同的虚拟交换机上, instance之间可以通信。
      • 虚拟交换机没有绑定任何物理网卡,无法与宿主机之外的网络通信
  • Flat网络
    • Flat组网模型不支持vlan,属于扁平化的网络模型。 Linux bridge直接绑定物理网卡,并连接虚拟机。每个F1at网络都会独占一个物理网卡,该物理网卡不能配置IP地址,所有连接到此网络的虚拟机共享一个私有IP网段。
    • Flat组网模型适用于以下应用场景
      • Flat网络直接连接虚拟机和外部网络
      • Flat网络连接路由器和外部网络
  • VLAN网络
    • OpenStack通过vlan网络解决了多租户之间的网络隔离问題。如图
    • mark
  • VXLAN网络
    • VXLAN网络使用的是隧道技术,是目前 Openstack广泛使用的网络技术。
      相比于vlan模型有以下改进。
      • 租户数量从4K增加到16M
      • 租户内部通信可以跨越任意IP网络,支持虚拟机任意迁移
      • 一般来说,每个租户逻辑上都有一个网关实例,IP地址可以在租户间进行复用
      • 能够结合SDN技术对流量进行优化
    • VXLAN网络是在传统的IP网络中传输以太网数据帧。主要涉及到以下几个概念
      • VTEP( VXLAN Tunnel end point,简称TEP):VXLAN隧道的端点,用于VXLAN报文的封装和解封装。类似于 IPsec VPN中的加密点。传统的以太网帧在发送TEP端将封装新的 VXLAN、UDP、IP以及以太网头部。而接收VTEP端将数据解封装。 VXLAN报文中源IP地址为本节点的VTEP地址, VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个 VXLAN隧道。
      • VNI( VXLAN Network Identifier,简称VNI):用来标识一个 VXLAN段,在VXLAN网络中,通过VNI标识一个租户,类似vlan网络中的 vlan ID。不同VXLAN段的虚拟机之间不能直接二层相互通信。VNI由24比特组成,支持多达16M的租户。
        的端点,用于VXLAN报文的封装和解封装。类似于 IPsec VPN中的加密点。传统的以太网帧在发送TEP端将封装新的 VXLAN、UDP、IP以及以太网头部。而接收VTEP端将数据解封装。 VXLAN报文中源IP地址为本节点的VTEP地址, VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个 VXLAN隧道。
      • VNI( VXLAN Network Identifier,简称VNI):用来标识一个 VXLAN段,在VXLAN网络中,通过VNI标识一个租户,类似vlan网络中的 vlan ID。不同VXLAN段的虚拟机之间不能直接二层相互通信。VNI由24比特组成,支持多达16M的租户。
      • mark
发布了130 篇原创文章 · 获赞 64 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/CN_TangZheng/article/details/104515281