OpenStack重要组件--纯理论

一、openstack节点类型

  • 控制节点
  • 网络节点
  • 计算节点
  • 存储节点
    1.控制节点
    顾名思义就是openstack中实现数据中心控制的节点
    所谓控制,简而言之就是管理,管理openstack中的所有服务组件,所有组件,不管在哪个节点上,都需要先在控制节点上完成类似于注册记录的操作,然后才有权限加入到集群服务中
    控制节点中,必须安装三种类型的软件
    1底层软件
    在控制节点上必须安装的是一些底层的软件
    所谓底层是相对于openstack的服务来说
    这些底层软件需要openstack组件来提供服务
    这些软件有DB软件、消息队列软件、Memorycache和Etcd等
    2.核心组件
    除了底层软件之外,控制节点上必须安装三个openstack的核心组件
    keystone,身份认证,是完整的安装在控制节点上
    glance,镜像服务,是完整的安装在控制节点上
    nova,计算服务,只安装了一部分,安装nova是为了管理节点上的计算服务
    在控制节点上是可以安装nova (computed)的,实验环境是可以的,但是生产环境是不会这么做
    3.可选组件
    除了底层服务软件和核心组件之外,因为openstack还支持其他可选的组件
    比如:
    集群中有存储节点,那么在openstack上就需要安装管理控制存储节点和对应的服务组件等
    类似于核心组件nova的模式
    基础核心组件
    base service
  • identity keystone 身份验证
  • image glance 源镜像服务
  • compute nova manage 计算服务
  • networking neutron server 网络服务
  • dashboard horizen 控制面板服务
    optional service (可选服务
  • block storage cinder 块存储服务
  • obiect storage swift 对象存储服务
  • database trove 数据库服务
  • orchestration heat 编排工具服务
  • telemeter centimeter 计费服务
  • network interface 网络接口
  • management 网络管理
    base service (基础服务)
    networking
  • ml2 plugin
  • layer 2 agent(OVS)
  • layer 3 agent
  • DHCP agent
    network interface
  • management
  • private
  • external
    2、网络节点
    网络节点之包含neutron组件,网络节点负责neutron安装core plugin (MI2)和service plugin(L3 service),
    具体的service plugin可以根据自己的需求选择
    3.计算节点
    包含nova部分组件和neutron部分组件
    nova-compute、neutron-agent
    4.存储节点
    安装存储组件的节点,一般有代表性的块存储(cinder)和对象存储(swift)
    二、openstack模块讲解
    1.OpenStack架构
    OpenStack重要组件--纯理论
    OpenStack重要组件--纯理论
    OpenStack重要组件--纯理论
    openstack由多种服务组成,每种服务具有独立的明明。在整个openstack架构中,keystone提供认证服务,接收来自用户和服务的认证请求,并对其身份进行认证。
    各个服务之间通过公用的API接口进行交互。
    大部分服务均包含一个API进程,用于监听API请求,根据服务的性质选择处理请求或者转发请求。
    服务进程之间的通讯通过消息队列服务实现,如AMQP
    在部署完成的云系统平台上,用户通过Dashboard或RestAPI方式在经Keystone模块认证授权后,可以执行创建虚拟机服务。
    通过nova模块创建虚拟机实例,nova调用glance模块提供的镜像服务,然后调用neutron模块提供网络服务。
    根据需要可以选择给虚拟机增加存储卷,卷功能由cinder模块提供服务。
    整个过程在ceilometer模块的资源监控下完成。同时cidnder提供的volume和glance提供的镜像可以通过swift对象存储机制进行保存数据传输就是依靠消息队列
    2.四个核心组件
    通过以上解析可以看到 OpenStack 云平台服务的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四个核心模块完成的
    四个辅助模块 Horizen、Ceilometer、Keystone、Swift 提供的访问、监控、权限和对象存储功能
    openstack-Ironic裸金属简介
    Ironic简述
    简而言之,openstack Ironic就是一个进行裸机部署安装的项目
    所谓裸机,就是没有配置操作系统的计算机。
    从裸机到应用还需要进行以下操作:
    1.硬盘raid、分区和格式化
    2.安装操作系统、驱动程序
    3.安装应用程序
    Ironic实现的功能,就是可以很方便的对指定的一台或多台裸机,执行以上一系列操作。例如部署大数据群集需要同时部署多台物理机,就可以使用Ironic来实现Ironic可以实现硬件基础设施资源的快速交付why provision bare metal调用OpenStack里面的服务组件的API口如果要调用,需要修改配置文件,填写对接的接口,填写对接暗号。
    3.身份认证服务 Keystone
    keystone (openstack identity service)中主要涉及到如下几个概念
  • 用户(user)
    在openstack中,用户是使用openstack云服务的人、系统或服务。
    用户可以登陆或使用指定的token访问云中的资源,并可以被指派到指定的项目或角色。
    认证服务通过对用户身份的确认,来判断一个请求是否被允许。
    用户通过认证信息,如密码、API keys等进行验证
  • 项目(project)
    项目是各个服务中的一些可以访问的资源集合,用来分组或隔离资源或身份对象。
    不同服务中,项目所涉及的资源也不同。在nova服务中项目可以是云主机,在swift和glance中项目可以是镜像存储,在neutron中项目可以是网络资源。
    默认情况下,用户总是被绑定到项目中。
    一个项目中可以有多个用户,一个用户可以数据一个或多个项目
  • 角色(role)
    角色是一组用户可以访问的资源权限的集合,这些资源包含虚拟机、镜像、存储资源等。
    用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色中。
    其区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于某个项目内的资源权限
  • 服务(service)
    用户使用云中的资源是通过访问服务的方式实现。
    openstack中包含有许多服务,如提供计算服务的nova,提供景象服务的glance以及提供对象存储服务的swift。
    一个服务可以确认当前用户是否具有访问其资源的权限。
    但是当一个用户尝试访问其项目内的service时,该用户必须知道这个服务是否存在,以及如何访问这个服务
  • 令牌(token)
    是一串数字字符串,用于访问openstack服务的api以及资源。
    一个令牌可以在特定的时间内生效,并可以在任意时间释放。
    在keystone中主要是引入令牌机制来保护用户对资源的访问
  • 端点(endpoint)
    所谓端点,是指用于访问某个服务的网络地址或URL。
    如果需要访问一个服务,则必须知道该服务的端点。
    在keystone中包含一个端点模板,这个模板提供了所有已存在的服务的端点信息。
    一个端点模板包含一个URL列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。
    其中,public类型的端点可以被全局访问,private类型的端点只能被openstack内部服务访问,admin类型的端点只能被管理员访问。
    openstack身份认证服务将管理认证、授权以及服务目录整合为一个访问点,同时也是用户需要和openstack’进行交互的第一个服务。
    一旦认证通过,终端用户使用其身份访问openstack其他服务。
    同样的,其他服务也将利用身份认证服务确认来访者身份是否合法,以及是否具备相应的权限。
    此外,openstack身份认证服务可以集成其他的身份认证管理系统,如LDAP等
    身份认证服务为其他openstack服务提供验证和授权服务,为所有服务提供终端目录。
    此外,提供用户信息但是不在openstack项目中的服务(如LDAP服务)可被整合进先前存在的基础设施中。
    为了从身份认证服务中获益,其他的openstack服务需要身份认证服务合作完成某个任务。
    当某个openstack服务收到来自用户的请求时,该服务发送请求道身份认证服务,以验证用户是否有相应的权限。
    keystone是openstack框架中负责管理身份验证、服务规划和服务令牌功能的模块。
    用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过keystone来处理。
    keystone类似一个服务总线,或者说是整个openstack框架的注册表,其他服务通过keystone来注册其服务的endpoint,任何服务之间的相互调用,需要经过keystone的身份验证,并获得目标服务的endoint,从而找到目标服务。
    OpenStack重要组件--纯理论
    身份认证服务包含以下组件:
  • 服务器:一个中心化的服务器,使用restful接口来提供认证和授权服务。
  • 驱动:驱动或服务后端被整合到集中式服务器中。他们被用来访问openstack’外部仓库的身份信息,并且他们可能已经存在于openstack被部署在的基础设施(sql数据库或LDAP服务器)中
  • 模块:模块运行于使用身份认证服务的openstack组件的地址空间中,这些模块
    3.控制台 Dashboard(控制面板服务 horizon
    dashboard (项目名称为horizon)是一个web接口,是云平台管理员以及用户可以使用不同用户管理不同的openstack资源以及服务。
    dashboard通过apache的mod_uwgis搭建,并通过python模块实现和不同的openstack API进行交互,从而实现管理的目的
    dashboard是一个用以管理、控制openstack服务的web控制面板,通过它可以实现绝大多数openstack的管理任务。
    如,实例、镜像、密钥对,卷等等。
    之前的简单介绍中,基于openstack的入门体验的大部分操作,都是基于dashboard操作。
    通过dashboard,管理员无需记忆繁琐复杂的openstack命令。
    除此之外,用户还可以在控制面板中使用终端或VNC直接访问控制台。
    dashboard可以实现以下管理任务:
  • 实例管理:创建、删除实例,查看终端日志,远程连接实例,管理卷等;
  • 访问与安全管理:创建安全组,管理密钥对,设置浮动IP地址等;
  • 偏好设定:对虚拟硬件模板可以进行不同的偏好设定;
  • 镜像管理:导入、编辑或删除镜像;
  • 用户管理:创建用户、管理用户、设置配额、查看服务目录等;
  • 卷管理:管理卷和快照;
  • 对象存储处理:创建、删除容器和对象。
    4.镜像模块Glance (image 镜像服务)
    镜像服务允许用户去发现、注册和获取虚拟机镜像。他提供了一个rest api,允许查询虚拟机镜像的元数据,并获取一个现存的镜像。
    可以将虚拟机镜像存放到各种位置,从简单的文件系统到对象存储系统,如openstack的swift对象存储服务项目,默认是存储在本地文件系统上的。
    其实在生产环境中这个模块本身不会存储大量的数据,需要挂载后台存储swift来存放实际的镜像数据。
    在openstack环境中,镜像是用于在计算节点生成虚拟机。脱离了镜像服务,就无法创建虚拟机,所以镜像服务是openstack的一个核心服务
    glance中的主要组件
    image是存放在控制节点上
    glance镜像服务项目主要涉及以下组件
  • glance-api(端口号9292)
    glance-api用于接收镜像API的调用,如镜像发现、恢复以及存储等。
    作为一个后台进程,glance-api对外提供rest api 接口,响应用户发起的镜像查询、获取和存储的调用
    消息队列url 的rabbit端口号为5672
  • glance-registry(监听端口号9191)
    glance-registry用于存储、处理和恢复镜像的元数据,元数据包括镜像的大小和类型等属性。
    registry是一个内部服务接口,不建议提供给普通用户
  • database
    database用于存放镜像的元数据,可以根据需要选择数据库,比如mysql,sqllite等‘
  • storage repository for image files(镜像的存储方式,除了file之外,还有RBD,ceph用的分布式)
    一般情况下,glance并不需要存储任何镜像,而是将镜像存放在后端的仓库中,glance支持多种repository。
    主要包括对象存储sswift、快存储cinder、vmware的ESX/ESXi或者vCenter、亚马逊的S3、http可用服务器、ceph等
    镜像的格式
    glance支持多种镜像格式,包括磁盘格式和容器格式。
    openstack中可以支持多种虚拟化的技术,如KVM、XenServer、hyper-v和vmware等。
    用户在上传镜像时,需要指定上传镜像文件的格式。
    除了磁盘格式,在glance中还有容器的格式,一般在上传镜像时只需要指定容器格式为bare,也就是空。
    因为glance并没有真正使用到容器格式。容器格式用来表示虚拟机镜像文件是否包含了元数据,例如OWF格式
    glance中常用的集中镜像文件格式
    1.RAW
    RAW是一种没有格式或裸格式的磁盘文件类型,RAW对数据不做任何修饰和处理,直接保存最原始的状态,在性能方面非常出色
    因为RAW格式保存原始数据,因此也更容易和其他镜像格式进行转换
    2.QCOW2
    QCOW2是qcow的升级版本,其主要特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁盘空间大小。
    例如创建了100G的qcow2格式磁盘,而实际只保存了2G数据,那么将只占用实际物理磁盘的2G空间。
    与RAW相比,使用这种格式可以节省磁盘容量
    3.VHD
    VHD是微软公司产品使用的磁盘格式。Virtual PC(微软早期虚拟化产品)和hyper-v使用的就是VHD格式。
    virtualbox也提供了对VHD的支持。例如在openstack上使用hyper-v类型的虚拟化,就需要上传对应VHD格式的镜像文件
    4.VMDK
    VMDK是vmware公司产品使用的磁盘格式。目前也是一个开放的通用格式,除了vmware自家的产品外,QEMU和virualbox也对VMDK格式的支持
    1. VDI
      VDI是oracle公司的virtualbox虚拟软件所使用的格式
    2. ISO
      ISO是指一种存档数据文件在光盘上的格式
      7.AKI、ARI、AMI
      amazon公司的AWS所使用的镜像格式
      注:
      传输iso镜像时,不要在web界面传,在后台的控制节点传
      登录控制节点,然后在传
      用命令传
      镜像导入 /opt下
      然后用命令传到glance
      不同的虚拟化产品能导出不同格式的镜像,可以通过glance再把这些镜像导到openstack上
      glance 默认file存储在系统中的
      生产环境,一般用的数据比较大,存储在指定的Swift对象存储
      5.计算模块nova
      nova是负责提供计算资源的模块,也是openstack中的核心模块,其主要功能是负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他的相关云平台管理功能。
      openstack使用计算服务来管理云计算系统。
      openstack计算服务是基础设施服务(iaas)的主要组成部分,模块由python实现。
      nova起到了承上启下的作用
      openstack计算组件请求openstack identity服务进行认证,请求openstack image服务提供磁盘镜像,为openstack dashboard 提供用户和管理员接口。
      磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定,例如:每个项目下可以创建多少实例。
      openstack组件可以在标准硬件上向大规模扩展,并且下载磁盘镜像启动虚拟机实例。
      openstack计算服务的主要组件
    3. nova-api服务(接口)
      接收和响应来自最终用户的计算api请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。
      此服务支持openstack计算服务API、Amazon EC2 API 以及特殊的管理API,用于接收用户管理操作请求。
      管理使用EC2 API通过web services 调
      用实现。然后API server通过详细队列(message queue)轮流与云基础设施的相关组件通信。
      作为EC2 API的另外一种选择,openstack也提供一个内部使用的openstack API
      2.nova-api-metadata服务
      接收来自虚拟机发送的元数据请求。nova-api-metadata服务一般安装在nova-network服务的多主机模式下使用
      3.nova-compute服务
      一个持续工作的守护进程,通过hypervisor的api来创建和销毁虚拟机实例,是一个work进程
  • XenServer/XCP 的XenAPI
  • KVM或QEMU的libvirt
  • Vmware的VMwareAPI
    这个过程通常比较复杂,守护进程同意了来自队列的动作请求,转换为一些列的系统命令,如启动一个KVM实例,然后到数据库中更新它们的状态。
    4.nova-placement-api服务
    nova-placement-api服务用于追踪记录资源提供者目录和资源使用情况,这些资源包括计算、存储以及IP地址池等。
    5.nova-Conductor模块
    nova-condutor模块作用于nova-compute服务与数据库之间,避免了由nova-compute
    服务对云数据库的直接访问。它可以横向扩展————但是,不要将它部署在运行nova-compute服务的主机节点上
    6.nova-scheduler服务(调度器)
    接收到一个来自消息队列的创建虚拟机实例请求,根据配置从计算节点集群中选取最优节点,并将请求转发到该节点;
    最终将虚拟机部署创建在该节点上
    nova-scheduler负责nova主机选择、提供决策功能
    配置在control下的nova.conf里配置
  • scheduler_default_filter 默认的过滤器
  • scheduler_available_filter 可用的过滤器
    nova需要装在两个节点上,控制节点和计算节点
    先启动控制节点,然后再启动别的
    可以动态查看日志消息,去查看服务是否开启
    systemctl restart ceph-mgr.target
    systemctl restart ceph-mon.target       mon 监控
    systemctl restart ceph-osd.target       osd 分布式存储,

    6.块存储
    块存储服务(cinder)提供块存储。
    存储的分配和消耗是由块存储驱动器或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/SAN、NFS、ISCSI、CEPH等。CEPH在生产环境中用的比较多
    块存储适合性能敏感性业务场景,例如数据库存储大规模可扩展的文件系统或服务器需要访问到块级的裸设备存储。
    典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动,卷服务器可以运行在控制节点、计算节点或单独的存储结点上。
    块存储服务为openstack中的实例提供持久的存储,块存储提供一个基础设施,用于管理卷以及和openstack计算服务交互,为实现提供卷、快照、卷类型等功能。
    站在实例的角度,挂载的每个卷都是一块独立的硬盘。
    cinder提供了从创建卷到删除卷整个生命周期的管理。
    功能:

  • 提供REST API接口,使租户可以查询、管理卷、卷快照以及卷类型。
  • 协调卷的创建请求,合理优化存储资源的分配
  • 通过驱动架构支持多种后端存储方式,包括LVM,NFS,CEPH和其它诸如MEC、IBM等商业存储产品和方案
    cinder服务涉及到以下组件:
    1. cinder-api
      cinder-api用来接受API请求,并将其路由到cinder-volume执行。
    2. cinder-volume
      cinder-volume用来与块存储服务和cinder-scheduler进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。
      cinder-volume服务响应送到块存储服务的读写请求来维持状态,它也可以和多种存储提供者在驱动架构下进行交互。
      当用户请求一个存储资源时,有cinder-api负责接受请求,cinder-scheduler负责调度资源,而真正执行存储任务的是cinder-volume。
      这样的工作机制使得存储加厚非常容易扩展。当存储资源不足时,可以增加存储结点(cinder-volume)。当客户的请求量太大调度不过来时,可以增加调度(运行cinder-scheduler)
    3. cinder-scheduler
      cinder-scheduler守护进程会选择最优存储结点来创建卷,其工作机制与nova-scheduler类似。当需要创建卷时,cinder-scheduler根据存储节点的资源使用情况选择一个最合适的节点来创建
    4. cinder-backup守护进程
      cinder-backup服务提供任何种类备份卷到一个备份存储提供者。就像cinder-volume服务,它与多种存储提供者在驱动架构下进行交互。
    5. 消息队列
      消息队列作用是在块存储的进程之间的路由信息。cinder各个子服务器通过消息队列实现进程间通信和相互协作。
      cinder的工作流程如下:
      1.用户向cinder-api发送创建卷请求:“帮我创建一个卷”
      2.cinder-api对请求做一些必要的处理后,向消息队列发送一条消息:“让cinder-scheduler创建一个卷”
      3.cinder-scheduler从消息队列获取到消息,然后执行调度算法,从若干存储节点中选到最优节点A
      4.cinder-scheduler向消息队列发送一条消息:“让存储节点A创建这个卷”
      5.存储节点A的cinder-volume从消息队列中获取到消息,然后通过卷提供者的驱动创建卷
      在试验时,通常会把网络节点安装在控制节点上,生产环境中,网络节点会单独一台服务器。
      7.网络模块 neutron
      neutron两种网络类型:
      1.租户网络(project network)
      租户网络
      1.租户可以创建多个私有网络,同时也可以定义自己私有网络的IP地址范围。不同的租户可以使用相同的IP地址或者地址段
      2.project 网络:特定的project的实现接入所属的project网络,可以使用vlan 、gre、vxlan(本次重点详述vxlan)
      router负责连接project网络和external外部网络,实现dnat和·snat
      snat:从私网内部访问外部网络,需要将源IP地址从私网IP转化为公网IP,转换后的公网IP就是供应商分配给我们的浮动IP地址
      dnat:从外网访问内网,还是从内部网络的角度去看,目标地址是公网地址,因为公网地址不可以和私网的实例通信,所以要转化目标地址为死亡IP地址
      2.供应商网络(provider network)
      provider network供应商网络由云管理员创建,并且必须与现有的物理网络匹配provider network 是支持三层网络的虚拟化,最大的特点是租户可以按照自己的需求创建私有网络。
      默认网络使用openswitch,官网实现是linux bridge,这次介绍的是openswitch创建供应商网络,他是有不同网段的,每个网段和不同的物理网卡关联,这边分配的供应商网络会产生多个公网IP地址段。
      这些地址段,统称为浮动IP地址段,他是可以分配给租户的vm实例使用
      OpenStack重要组件--纯理论
      vlan网络通过vlan id进行二层网络的隔离,具有相同的vlan id的内部实例实现自由的通行,不同的vlan id需要经过三层网络协议转发,但是vlan的个数是一个最大的弊端,最大支持4096个
      vxlan和gre是一种网络封装协议,gre是通过IP数据进行传输,vxlan是通过udp包进行的数据传输(不安全,但是效率高),gre和vxlan数据包在流出节点之前会打上相应的tags,然后数据在进入节点内部的虚拟网络时,会去剥离相应的tags
      vxlan和gre在数据流入外层网络必须有路由器才可以实现
      而且租户想要外部网络,也需要路由器将内部网络和外部网络互联,通过nat技术实现,也就是为什么租户的实例要分配一个浮动地址的原因
      安全组的作用:是一个作用于云主机的虚拟防火墙规则的集合,默认的规则是允许实例访问外部网络的数据
      openstack早期的网络模块,是nova-network,而neutron则是nova-network的更新换代产品,也是目前openstack的重要组件之一。
      虚拟网络
      neutron中最为核心的工作就是对网络的管理和将网络抽象话。在openstack环境中对网络的抽象主要有以下几种形式。
      1.虚拟交换机/网桥
      openstack网络中,对于二层交换机有两种的抽象方式
      通过linux bridge实现
      linux bridge 由linux内核实现,是工作在二层的虚拟网络设备,功能类似于现实中的交换机
      OpenStack重要组件--纯理论
      在图中,分别通过三个虚拟交换机来链接三台实例,每个虚拟交换机都代表一个openstack网络,通过vlan功能隔离不同的实例,每个实例都代表一个租户,虚拟交换机4通过物理网卡实现虚拟网络和外部真实网络的通信。
      备注:这个网桥模式不安全
      2.通过openswitch实现
      类似于linux bridge,open vswitch也可以实现对二层网络的抽象,对虚拟网络提供分布式交换机功能。支持各种组网类型,功能全面,支持基本的vlan功能,也支持QOS以及netflow、aflow标准的管理接口和协议。从而,通过这些接口可以实现VM实例流量监控的任务。运行在云环境中各种或相同虚拟化平台上的多个vswitch实现了分布式架构的虚拟交换机。
      一个物理服务器上的vswitch可以透明的与其它服务器上的vswitch链接通信
      在早期的openstack版本中,默认使用的是openswitch,而在O版中,多节点手动安装默认的是linux bridge。
      从功能上区分,openswith更加强大
      但是linux bridge实现比较简单,更加适合初学者
      虚拟交换机/网桥主要实现以下功能
  • 连接实例
  • 通过vlan隔离实例网络
  • 连接实例到宿主机的外部网络
    2.虚拟路由器
    openstack中的虚拟路由器是对网络设备的一种抽象,实现了租户间的多网络构建以及内部网络和外部网络之间的通信问题。
    其实现原理与真实路由器一致,根据路由表转发数据包,同时还支持nat地址转换以及浮动IP地址设置。
    3.namespace
    二层网络通过vlan对租户网络进行隔离,而三层网络是通过namespace进行隔离,每个namespace都有自己的独立网络线,包括路由表,防火墙规则、网络接口等。
    同时,neutron为每个namespace提供DHCP和路由服务,所以各个租户之间的网络地址允许重叠,因为他们在不同的namespace中进行抽象。
    OpenStack重要组件--纯理论
    如上图所示,三个租户分别规划了相同的IP地址段,192.168.100.0/24
    这样的设计在真实环境中是不可行的,因为路由器不允许在不同的接口配置相同的IP地址网段。
    但是在openstack网络中,路由器通过不同的namespace进行隔离,所以R1虚拟路由器如同开启三个相互之间独立的进程。在每个namespace中,只有一个192.168.100.0/24网段。通过namespace,openstack可以让租户创建任意网络,而不必担心和其他网络产生冲突。
    1. DHCP server
      neutron提供DHCP服务的组件是DHCPagent,默认通过dnsmasq实现DHCP功能。
      dnsmasq是一个提供DHCP与DNS服务的开源软件。在openstack网络中,DHCP服务同样被隔离在namespace中,并通过linux bridge 链接DHCP namespace中的接口。
      一个DHCPserver 只为指定的网络提供服务,即dnsmasq与网络是一 一对应的关系。
      一个ndsmasq进程可以为同一个network中所有使能dhcp的子网提供服务。
      管理员可以选择启用或禁用dhcp server,但是一旦启用dhcp server,并且配置相应的地址池,网络节点上的dhcp sgent会启动一个dnsmasq进程为该网络提供DHCP服务。
      该网络将自动获取网络地址以及其他选项。
      5.浮动IP地址
      通常情况下,在搭建openstack网络时,会在虚拟路由器启用SNAT功能。
      这将给openstack网络提高安全性和便利性,具体表现如下:
      启动nat功能,opentack内部网络被保护起来
      虚拟机王文外部网络通过地址转化的方式,更容易让外部路由设备寻路,即不需要增加额外的回包路由条目
      所以,当网络启用了NAT功能后,在允许虚拟机访问外部网络的同时,也阻止了外部网络访问虚拟机的流量,如ssh管理流量。
      但是可以通过目标地址转换的方式实现外部网络访问内部虚拟机,nat地址映射。配置nat地址映射需要在虚拟路由器外部接口配置相应的外部网络地址池,而这些地址池中的地址就是浮动IP地址。所以浮动IP地址是用来解决外部网络访问虚拟机的问题。如果虚拟机不需要外部网络访问,也可以不绑定浮动IP地址
      组网模型
      neutron提供了多种组网模型供不同的租户搭建各种网络拓扑。
      1.local网络
      local网络的网络模型有如下特点:
      不具备vlan特性,不能对二层网络进行隔离
      同一个local网络的虚拟机实例会连接到相同的虚拟交换机上,instance实例内部之间可以通信
      虚拟交换机没有绑定任何物理网卡,无法与宿主机之外的网络通信,也就是无法与自身namespace之外的设备通信
      典型的local网络组网模型如下图所示。vm1与vm2连接到linux bridge 1,vm3连接到 linux bridge 2.
      vm 1 与 vm 2因为链接到同一个bridge,所以可以相互通信,但是不能可vm 3 进行通信。
      因为没有任何linux bridge绑定物理网卡,所以任何虚拟机都不能访问外部网络
      OpenStack重要组件--纯理论
      2.flat网络
      flat组网模型不支持vlan,属于扁平化的网络模型。
      linux bridge直接绑定物理网卡并连接虚拟机。每个flat都会独占一格物理网卡。

该物理网卡不能配置IP地址,所有连接到此网络的虚拟机共享一个私有IP网段。

flat组网模型适用于一下应用场景
(1)flat网络直接连接虚拟机和外部网络
如下图所示,linux bridge 1 连接 vm 1 和 vm 2,并绑定物理网卡ens37
linux bridge 2 连接vm 3,并绑定物理网卡ens38
vm 1 和vm 2 可以直接相互通信,并通过ens37 访问外部网络,
vm 3 通过ens 38访问外部网络
OpenStack重要组件--纯理论
(2)flat网络连接路由器和外部网络
如下图所示,虚拟机链接vlan 类型的网络,并通过vlan对租户进行隔离,对外通过虚拟路由器R1链接虚拟交换机4,并通过虚拟交换机4俩捏物理网卡实现访问外部网络。
通过vlan隔离的租户被限制在虚拟交换机1-3所在的vlan网络,而虚拟机发起的流量经过路由器转发后不携带任何vlan标签到达虚拟交换机4,并通过物理网卡访问外部网络。
虚拟交换机4所在的网络就可以被设计为flat网络
OpenStack重要组件--纯理论
flat网络存在以下缺点:

  • 存在单一网络瓶颈;
  • 缺乏可伸缩性;
  • 缺乏合适的多租户隔离
    1. vlan网络
      openstack通过vlan 网络解决了多租户之间的网络隔离问题。如下图所示
      linux bridge 1和linux bridge 2 是属于vlan 类型的网络,并分别属于vlan 101 和 vlan102.
      vm 1 和vm 2 链接到bridge 1,
      vm 3 链接到 bridge 2
      linux bridge 1 和 linux bridge 2 分辨绑定物理网卡ens37的两个子网卡ens37.101 和ens37.102
      vm 1 和 vm 2 发起的流量在经过ens37.101时,被打上vlan101标签vm 3发起的流量在经过ens 37.102时被打上vlan 102,这就要求链接ens37的物理交换机相应的接口要配置为trunk模式
      如果需要其他vlan网络,可以创建物理网卡新的子接口,并绑定新网络
      OpenStack重要组件--纯理论
      vlan网络存在以下缺点:
  • vlan的数量限制:4096个vlan数量不能大规模满足云计算数据中心的需求
  • 物理网络基础设施的限制:基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署
  • TOR交换机mac表耗尽:虚拟化以及节点过多的流量导致更多的mac地址表条目
    1. vxlan 网络
      vxlan网络使用的是隧道技术,是目前openstack广泛使用的网络技术,相比于之前的vlan模型,vxlan做出了以下改进:
  • 租户数量从4K增加到16M
  • 租户内部通信可以跨越任意IP网络,支持虚拟机任意迁移
    一般来说,每个租户逻辑上都有一个网关实例,IP地址可以在租户间进行复用
  • 能够结合SDN技术对流量进行优化
  • vxlan网络是在传统的IP网络中传输以太网数据帧。
    主要涉及以下几个概念:
  • VTEP(vxlan tunnel end point ):
    vxlan隧道的端点,用于vxlan报文的封装与解封装。类似于IPsec***中的加密点。
    传统的以太网帧在发送vtep端将封装新的vxlan、udp、IP以及以太网头部。
    而接收vtep端将数据解封装。vxlan报文中源IP地址为本节点的vtep地址。
    vxlan报文中目的IP地址为对端节点的vtep地址,一堆vtep地址就对应着一个vxlan隧道
  • VNI(vxlan network identifier):
    用来标识一个vxlan段,在vxlan网络中,通过VNI标识一个租户,类似vlan网络中的vlan ID。
    不同vxlan段的虚拟机之间不能直接在二层相互通信。
    vni由24比特组成,支持多达16M的租户
    在vxlan网络中心中,虚拟机之间的通信过程如图所示
  • vtep1将来自vm 1 的数据帧添加vxlan头部、外部udp和IP首部
  • vtep1通过传统的IP网络将数据发送之vtep2
  • vtep接收到vxlan报文时,拆除外部IP、udp以及vxlan首部,然后内部数据包交给正确的终端vm 2
    OpenStack重要组件--纯理论
    云计算数据中心的需求
  • 物理网络基础设施的限制:基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署
  • TOR交换机mac表耗尽:虚拟化以及节点过多的流量导致更多的mac地址表条目

猜你喜欢

转载自blog.51cto.com/14557905/2486810
今日推荐