Open stack生产环境中几种常见的网络结构

一、概述

想必接触过Open stack的人都知道,Opens stack中最复杂的是网络部份,在实际的生产环境中更是如此,实际场景下往往不仅有Open stack网络,还有外部网络(Open stack将其无法管理的网络统称为外部网络),即便在Open stack内部,客户也有不同的网络诉求,本文选取2个案例对常见的网络模型进行说明。

二、案例说明

1.运营商网络和租户网络
Open stack是面向众多租户提供服务的云操作系统,由租户自行创建的网络称为租户网络,但有时候会出现以下这种情况:

上图是一个租户的VLAN网络,其VID为100,这个网络的计算机并不是虚拟机,即不受Open stack管理,此时该租户需要增加一批虚拟机,而虚拟机VID也必须是100(br-XX转换后的VID),这时Open stack就需要创建一个网络来映射外部网络,创建的这个网络就称为运营商网络。运营商网络可以看成是Open stack网络的外部延展,但其生命周期并不受Neutron组件管理,需要注意的是,创建的网络类型和VID号要和待映射的网络完全一致。运营上网络和租户网络的区别主要表现在以下2点:
(1)管理的权限与角色不同。租户网络由租户自行创建,而运营商网络是由管理员通过administrator账户创建。
(2)创建网络时,传递的参数不同。创建运营商网络时需要传递provider:network_type、provider:physical_network、provider:network_id这3个参数,Open stack认为用户只需要关心服务,所以租户创建网络时不需要传递这3个参数,这3个参数实际上是通过配置文件间接获取。
上文中提到的provider:network_type、provider:network_id好理解,就是对应的网络类型(VLAN或VXLAN)和VID值,但provider:physical_network又起到什么作用?通过上图可以知道,对于非隧道型网络(VLAN)VM在经过br-XX2之后需要转换成待映射网络的VID后就可与外部网络中的物理节点进行通信,但问题是Neutron怎么知br-int必须要将报文发送给br-XX2,此时就需要用到provider:physical_network参数了,因为在配置文件中定义了每个physical_network所对应的物理网卡。对于隧道型网络(VXLAN)这个参数没有什么意义,因为有了目的IP,主机的IP协议栈自己会找到合适的网卡发送出去。
2.VLAN aware VM
在之前的介绍中,VM接受和发送的都是Untag报文,如果这个VM(实际上是VM的vNIC)需要接入多个Vlan中,由于Neutron的资源模型是1个Port只能隶属于1个Network,所以让这1个Port属于多个Network的方法就行不通,而给1个VM配置多个vNIC的方法在VM要接入多个Network的时候(比如1000个Network)就显得不可取,此时就需要VM可以接受和发送带有tag的报文。而根据先前的模型,br-int上的VID是由Open stack自行维护,所有报文必须经过br-int,且VM与br-int之间都是Access接口,一旦将VM与br-int之间的接口改为Trunk,当VM发出带有tag的报文和br-int中的一致时就会造成撞车

为了解决上述问题,Open stack在N版本之后,就引入了VLAN aware VM模型,它采用1个父端口+多个子端口的方式,将原有的模型改为以下所示:

图中VM1-1是普通的虚拟机,VM2-1是VLAN aware VM的虚拟机,它是通过在VM和br-int之间加入了1个br-trunk来解决了VID在br-int上撞车的问题,同时Untag的报文走父端口,Tag报文走子接口,有多少个VLAN就有多少个子接口,这样也没有改变Neutron中1个Port属于1个Network的模型,需要注意的是:有多少个VLAN aware VM的虚拟机就有多少个br-trunk虚拟交换机。

原文地址:http://blog.51cto.com/arkling/2296072

时间: 2024-08-29 18:03:43

Open stack生产环境中几种常见的网络结构的相关文章

[virtualenv]生产环境中使用virtualenv

virtualenv 对于python开发和部署都是好工具,可以隔离多个python版本和第三方库的版本,这里作者总结了几个常用python服务怎么样结合virtual部署 原文链接 Python 中我最喜欢的东西之一就是可以使用 virtualenv 去创建隔离的环境.非常简单的就可以在不同的项目中部署不同的python类库. 有一个比较棘手的问题就是在生产环境中使用virtualenv 部署几个不同的服务有一些配置上的不同. 于是我就从我的项目中收集了几种不同的服务的不同配置方式. 可以肯定

理解Docker(6):若干企业生产环境中的容器网络方案

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 Docker 在早期只有单机上的网络解决方案,在 1.19 版本引入了原生的 overlay 网络解决方案,但是它的性能损耗较大,可能无法适应一些生产环

生产环境中tomcat的配置

生产环境中要以daemon方式运行tomcat 通常在开发环境中,我们使用$CATALINA_HOME/bin/startup.sh来启动tomcat, 使用$CATALINA_HOME/bin/shutdown.sh来关闭tomcat. 而在生产环境中,我们要配置tomcat使其以daemon方式运行,这是因为: 以daemon运行不受终端影响,不会因为退出终端而停止运行 可以让tomcat以普通用户身份运行,可以让tomcat随linux启动而启动 如何将tomcat配置成守护进程 将tom

php中五种常见的设计模式

设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”).所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代表着更快开发健壮

JDK 9 发布仅数月,为何在生产环境中却频遭嫌弃?

千呼万唤始出来,在经历了整整一年的跳票之后,Java 9 终于在 9 月 21 日拨开云雾,露出真正的面目.对众多 Java 程序员来说,这一天无疑是一个重大的日子,首先 Java 开发者们再也不用羡慕别的自带 REPL 的语言了,不用为了试个 Java 功能而开个 Groovy shell:其次最主要的莫过于 Jigsaw 项目下颠覆性的 Java 模块化了,有了它,自己定制/裁剪 JDK 变得更直接. 其中,整个 Java 的核心内容非 JDK 莫属,其包括了 Java 运行环境(Java

Confluence 6 从生产环境中恢复一个测试实例

请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明. 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 Confluence 服务器,同时还会设置一个测试实例来测试升级等.在这种情况下,你的 Confluence 可以回运行 2 个不同的版本,而且也是非常常见的.这个文档将会知道你如何拷贝生产环境中的数据到一个测试实例中,同时测试环境的版本和生产环境中的版本还有可能是不同的. 在开始这个操作指南之前,

明白生产环境中的jvm参数

明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版本是多少?采用何种垃圾回收器? 程序启动的时候默认分配堆内存空间是多少?随着程序的运行,程序最多能使用多大的内存空间? 程序中使用了多少个线程?目前的java进程又处于何种状态? 了解了这些,会对程序的运行有一个更好的了解.本文结合生产实践,记录一下我常用的一些操作. 注意:如果没有特殊说明,下面所

Docker在生产环境中的应用--开篇

Docker是什么?(官方定义)Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的.可移植的.自给自足的容器,开发者在笔记本上编译测试通过的容器,可以批量地在生产环境中部署,包括VMS(虚拟机).bare metal.OpenStack集群和其它应用平台. Docker通常应用到以下几种场景: 1.web应用的自动化打包和发布: 2.自动化测试和集成.发布: 3.在服务型环境中部署和调整数据库或其它的后台应用: 4.从头编译或者扩展现有的OpenShift或Cloud Found

Kubernetes 在生产环境中常用架构

Kubernetes 在生产环境中常用架构 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下图所示 在该架构中,我们可以将其分为四层,如下: Client层:即Kubernetes集群外部用户.客户端等: 服务访问层:即由Traefik ingress实现服务发现.负载均衡和路由规则定义等: 业务应用层:即基于Kubernetes平台构建和运行企业业务应用,如CI/CD持续集成.微服务项目.监控告警和日志管理.私有镜像仓库等服务: 基础设施层:即由Kubernete