openstack学习-网络管理

openstack的网络服务组件为neutron,它的设计目标是实现“网络即服务”。
设计上:遵循基于“软件定义网络(SDN)"的灵活和自动化原则
实现上:充分利用linux中各种网络相关的技术

物理网络与虚拟化网络

Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟机网卡(vnic)提供,物理交换机也被虚拟化为虚拟交换机(vswitch),各个vnic连接再vswitch的端口上,最后这些vswitch通过物理服务器的物理网卡访问外部的物理网络。

linux网络虚拟化实现技术

网络虚拟化主要由分为三个部分:
网卡虚拟化:TAP,TUN,VETH
交换机虚拟化:linux bridge,open vswitch
网络隔离:network-namespace

linux网卡虚拟化


TAP设备:模拟一个二层的网络设备,可以接收和发送二层网络数据包
TUN设备:模拟一个三层的网络设备,可以接收和发送三层网络数据包
VETH:虚拟ethernet接口,通常以pair的方式出现,一端发出的网络数据包会被另一端接收,可以形成两个网桥之间的通道

TAP/TUN提供了一台主机内用户空间的数据传输机制,它虚拟机了一套网络接口,这套接口和物理的接口无任何区别,可以配置IP,可以路由流量,不同的是它流量只在主机内流通

veth-pari,是成对出现的网络设备,一端连接协议栈,一端连接彼此,数据从一端出,一端进。它的特性常常用来连接不同的虚拟网络组件,构建大规模的虚拟网络拓扑,比如连接linux bridge,ovs等,用于neutron,可以构建非常复杂的网络形态。

linux bridge


linux brigde:工作于二层的网络设备,功能类似物理交换机
brigde可以绑定linux上其他网络设备,并将这些设备虚拟化为端口
当一个网络设备被绑定到bridge上,就相当于物理交换机端口插入了一条连接终端的网线。
使用brctl命令配置linux brige

open vswitch

相比linux bridge的小规模的主机内部通信场景,open vswitch更适合大规模的多主机通信场景

network namespace


network namespace能创建多个隔离的网络空间,他们有独立的网络配置信息,例如网络设备,路由表,iptables等。
不同的网络空间中的虚拟机运行的时候仿佛就在自己的独立网络中。

network namespace通常于vrf(virtual routing fowarding虚拟路由转发)一起工作,vrf是一种ip技术,允许路由表的多个实例同时在同一个路由器上共存。
使用veth可以连接两个不同的网络命名空间,使用bridge可以连接多个不同的网络命名空间。

neutron

作为一种虚拟网络服务,为openstack计算提供网络连通和寻址服务。
neutron对网络进行了抽象,如下所示:

neutron支持多种类型的Network,包括local,flat,vlan,vxlan和gre

  • local:与其他网络和节点隔离,该网络中的虚拟机只能与位于同一个节点上网络的虚拟机通信,local网络主要进行单机测试
  • flat:无vlan标签的网络,该网络中虚拟机能与位于同一网络的虚拟机通信,并可以跨多个节点
  • vlan:802.1q标签网络,就是跟真实vlan使用一致
  • vxlan:基于隧道技术的overlay网络,主要构建大二层的数据中心网络
  • gre:使用ip数据包的封装的隧道技术

subnet

就是子网,每个子网在neutron中需要定义ip地址和范围
subnet必须与network关联,可以附加dns,网关ip,静态路由

port

端口
逻辑网络交换机上的虚拟交换端口
虚拟机通过port附着到network上
port可以分配ip地址和mac地址

router

连接租户内同一个network或者不同network之间的子网,以及连接内外网

fixed ip

固定ip,分配到每个端口上的ip,类似于物理环境中配置到网卡上的ip

floating ip

floating ip(浮动ip)是external network创建的一种特殊的port,可以将floating ip绑定到任意network中的port上,底层会进行nat转发,将发送的浮动ip流量转发到该port上的对应固定ip上,外界可以通过浮动ip访问虚拟机,虚拟机也可以通过浮动ip访问外界

physical network

pytsical network,物理网络。
在物理网络环境中连接到openstack不同节点的网络,每个物理网络可以支持neutron中的一个或者多个虚拟网络。

openstack必须通过physical network才能和真实物理网络通信

provider network

由openstack管理员创建,直接对应数据中心现有物理网络的一个网段
providr network通常使用vlan或者flat模式,可以在多个租户之间共享

self-service network

自助服务网络,也叫租户网络或项目网络,它是由openstack租户创建的,完全虚拟的,只在本网络内部连通,不能在租户之间共享
self-servcie network通常使用vxlan或者gre模式,可以通过virtual router的snat与provider network通信

不同的self-service network中的网段可以相同,类似于物理环境中不同公司的内部网络
self-service network如果需要和外部网络通信,需要通过router,类似于物理环境中公司上网需要通过路由器或者防火墙。

External network

外部网络,也叫公共网络
它是一种特殊的provider network,连接的物理网络与数据中心或者internet相通,网络中的port可以访问外网
一般将租户的virtual router连接到该网络,并创建floating ip绑定虚拟机,实现虚拟机与外网通信

Exernal netwok类似于物理环境中直接使用公网ip网段,不同的是,openstack中external network对应的物理网络不一定能直连internet,有可能只是数据中心的一个内部私有网络。

securiy group


安全组,他的作用是在neutron port上的一组策略,规定了虚拟机入口和出口流量的规则
安全组基于linux iptables实现,默认拒绝所有流量,只有添加了放行规则的流量才允许通过
每个openstack项目中都有一个default默认安全组,默认包含如下规则-拒绝所有入口流量,允许所有出口流量

neutron架构与组件

架构图

neutron架构原则

  • 统一api
  • 核心部分最小化
  • 可插入式的开放架构
  • 可扩展

message queue:neutron-sever通过消息列队与其他的neutron agents进行交换消息,但是这个消息列队不会用于neutron-server与其他openstack组件(如nova)进行交换消息
l2 agent:负责连接端口(ports)和设备,使他们处于共享的广播域,通常运行在hypervisor上
l3 agent:负责连接tenant网络到数据中心,或者连接到internet.在真实的部署环境中,一般都需要多个l3 agent同时运行。
dhcp agent:用于自动配置虚拟机网络
advance service:提供lb(负载均衡),防火墙等服务

架构说明

neutron的架构是基于插件的,不同的插件提供不同的网络服务,主要包含如下组件

组件-neutron server


neutron server=apis+plugins,通过这种方式,可以自由对接不同网络后端能力

组件-core plugin

core plugin,主要是指ml2(modular layer 2) plugin,是一个开放架构,在plugin下,可以集成各个厂家,各种后端技术支持的layer 2网络服务。

ml2 plugin的drivers主要分为以下两种:
typer driver:定义了网络类型,每种网络类型对应一个type driver
mechanism driver:对接各种二层网络技术和物理交换机设备,如ovs,linux bridge等,从typer driver获取相关的底层网络信息,确保对应的底层技术能够根据这些信息正确配置二层网络。

组件-service plugin

serivce plugin用于实现高阶网络服务,如路由,负载均衡,防火墙和***服务等

l3 service plugin主要提供路由,浮动ip服务等。

组件-agent

neutron agent向虚拟机提供二层和三层的网络连接,完成虚拟网络和物理网络之间的转换,提供扩展服务等

neutron网络流量分析

neutron支持多种网络技术和类型,可以自由组合各种网络模型。
生产中,openstack主要使用如下两种网络模型

  • linux bridge+flat/vlan网络
    提供简单网络互通,虚拟网络、路由、负载均衡等由物理设备提供,网络简单,高效,适合中小企业私有云网络环境
  • open vswitch+vxlan网络
    提供多租户,大规模网络隔离能力,适合大规模私有云和公有云网络场景

linux bridge+flat网络


flat网络类似于使用网线直接连接物理网络,openstack不负责网络隔离
interface 2不带vlan tag

linux bridge+vlan网络


interface 2需要多个vlan,连接的物理交换机一般配置trunk模式,并允许这些vlan通过
使用linux bridge+vlan实现 provider network,网络流量可以分为如下几种:
南北向流量:虚拟机和外部网络通信的流量
东西向流量:虚拟机之间的流量
provider network和外部网络之间的流量,由物理网络设备负责交换和路由

使用固定ip的虚拟机南北流量分析


以下涉及计算节点1:

  • 虚拟机(instance)数据包由虚拟网卡(1)通过veth pair转发到Provider Bridge上的端口(2)
  • 安全组规则(3)检查防火墙和记录连接跟踪
  • vlan子接口(4)将数据包转发到物理网卡(5)
  • 物理网卡(5)将数据包打上vlan tag101,并将其转发到物理交换机端口(6)

以下涉及物理网络设备

  • 交换机从数据包删除vlan tag 101,并将其转发到路由器(7)
  • 路由器将数据包从provider network网关(8)路由到external网络网关(9),并将数据包转发到external网络的交换机端口(10)
  • 交换机将数据包转发到外部网络(11)
  • 外部网络(12)接收数据包

同一个网络中虚拟机东西流量分析


计算节点1:

  • 虚拟机1数据包由虚拟网卡(1)通过veth pair转发到provider Bridge上端口(2)
  • 安全组(3)检查防火墙和记录连接跟踪
  • vlan子接口(4)将数据包转发到物理网卡(5)
  • 物理网卡(5)将数据包打上vlan tag 101,并将其转发到物理交换机端口(6)

物理设备

  • 交换机将数据包转发给计算节点2连接的交换机端口(7)

计算节点2

  • 计算节点2的物理网卡(8)从数据包删除vlan tag 101,然后转发给vlan子接口(9)
  • 安全组(10)检查防火墙和记录连接跟踪
  • 虚拟网卡(11)通过veth pair将数据包转发给虚拟机2的网卡

不同的网络中的虚拟机东西流量


计算节点1

  • 虚拟机1由虚拟机网卡(1)通过veth pair转发到provider bridg上的端口(2)
  • 安全组(3)检查防火墙和记录连接跟踪
  • vlan子接口(4)将数据包转发到物理网卡(5)
  • 物理网卡(5)将数据包打上vlan tag 101,转发到物理交换机端口(6)

物理设备

  • 交换机删除数据包vlan tag 101,并转发到路由器(7)
  • 路由器将数据包从provider network1网关(8)转发到provider network2网关(9)
  • 路由器将数据包发送到交换机端口(10)
  • 交换机将数据包打上vlan tag 102,然后转发给计算节点1连接的端口(11)

以下涉及计算节点1

  • 物理网卡(12)删除数据包vlan tag 102,然后转发vlan子接口(13)
  • 安全组(14)检查防火墙和记录连接跟踪
  • 虚拟网卡(15)通过veth pair将数据包转发给虚拟机2的网卡(16)

open vswitch +vxlan

vxlan是虚拟可扩展的局域网,是一种oeverlay技术,通过三层网络来搭建虚拟的二层网络。

使用固定ip的虚拟机南北流量


虚拟机运行在计算节点1上,使用self-service network 1,将数据包发送给internet上的主机
计算节点1

  • 实例接口(1)通过veth将数据包转发到安全组网桥实例端口(2)
  • 安全组网桥上的安全组(3)处理数据包防火墙和连接跟踪
  • 安全组网桥OVS端口(4)通过veth将对数据包转发到OVS集成网桥(br-int)安全组端口(5)
  • OVS集成网桥为(br-int)数据包添加内部vlan标记
  • OVS集成网桥对内部隧道(br-tun)ID交换内部VLAN标记
  • OVS集成网桥补丁接口(6)将数据包转发给OVS隧道补丁接口(7)
  • OVS隧道网桥(8)使用vni 101包裹分组
  • 用于覆盖网络的底层物理接口(9)经由覆盖网络(10)将分组转发到网络节点

网络节点

  • 底层网络物理接口(11)将分组转发到OVS隧道桥(12)
  • OVS隧道网桥解包并为其添加内部隧道ID
  • OVS隧道网桥为内部VLAN标记交换内部隧道ID
  • OVS隧道桥补丁端口(13)将分组转发到OVS集成桥接口补丁端口(14)
  • 用于自助服务网络(15)的OVS集成桥接端口移除内部VLAN标记并将分组转发到路由器命名空间的自助服务网络接口(16)
  • 路由器将数据包转发到提供商网络的OVS集成桥接端口(18)
  • OVS集成桥将内部VLAN标记添加到数据包
  • OVS集成桥接int-br-provider补丁端口(19)将数据包转发到OVS提供程序桥接phy-br-provider补丁端口(20)
  • OVS提供程序将内部VLAN标记与实际VLAN标记101交换
  • OVS桥接提供商网络端口(21)将分组转发到物理网络接口(22)
  • 物理网络接口通过物理网络设备将数据包转发到Internet(23)

从外部访问带Floating IP的虚拟机

(直接放图吧。。。。。)

同一个网络中虚拟机东西流量

不同网络中虚拟机东西流量

头大。。头大。。
网络看来真的是要学一辈子的

原文地址:https://blog.51cto.com/11555417/2438097

时间: 2024-10-09 16:36:43

openstack学习-网络管理的相关文章

openstack学习-网络管理操作

实验流程: Dashboard操作 创建网络 admin用户登陆dashboard界面,导航栏选择"项目-网络-网络拓扑",显示当前环境的网络拓扑,点击创建网络创建网络,名称为"Network_web_01",并勾选"共享",其他保持默认 创建子网,名称为Subnet_web_01",网络地址192.168.11.0/24,网关ip"192.168.11.1",其他保持默认配置"子网详情",输入分

OpenStack 学习笔记

1 安装 2 管理 3 监控 书籍推荐:OpenStack Cloud Computing Cookbook OpenStack 学习笔记

(四)Openstack学习之WSGI:自己动手写例子

WSGI 是Web Services Gateway Interface的缩写. 如果想深入了解,可以阅读 PEP 333 文档,包含有任何你想要的:)community errata, .这篇文章将手把手教你写一个简单的WSGI例子. 注意:我用的Python版本是.2.7.x. 最经典,最简答的WSGI样当属 Hello World app. 咱们将要用到 virtualenv 去创建一个封闭的Python项目环境: $ virtualenv wsgi-example $ cd wsgi-e

1. OpenStack - 学习经验总结

经过一段时间OpenStack学习,

(转载)openstack学习指南

OpenStack Hacker养成指南 朱 荣泽     |     2013. 8. 8 [toc wrapping="right"] 0 阅读指南 希望本文能够解开你心中萦绕已久的心结,假如是死结,请移步到 https://wiki.openstack.org/wiki/Main_Page 学习OpenStack其实就是学习各种Python库的过程. 把OpenStack的设计原则贴在你的墙上. https://wiki.openstack.org/wiki/BasicDesig

OPENSTACK学习笔记(1)

从CloudMan那里学的,自己做的笔记,就成为自己的了. 呵呵! 虚拟化基础知识 虚拟化是云计算的基础.简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU.内存.IO 硬件资源,但逻辑上虚拟机之间是相互隔离的. 物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest). 那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?这个主要是通过一个叫做 Hypervisor 的程序实现的. 根据 Hypervisor

openstack学习线路指导

首先我们想学习openstack,那么openstack是什么?能干什么?涉及的初衷是什么?由什么来组成?刚接触openstack,说openstack不是一个软件,而是由多个组件进行组合,这是一个更深层次的理解,当我们看到dashboard的时候,我们或许对openstack感觉有一点感性认识了.dashboard可以理解为openstack与用户交流的一个窗口,而dashboard对于真正的使用者来讲,它的功能上面有一定的局限性.而对于初学者通过它,可能会对openstack有一定的了解.o

openstack学习(一):开发环境部署架构以及基本环境

囫囵吞枣的安装了juno,使用了一下.为了详细学习,从头回顾一下,并理解下细节. 实验环境 virtualBox启动2台虚拟机 内存:2G 磁盘:25G 系统:centos7 openstack版本:juno 网络: 网络类型 网段 controller compute 管理网络 192.168.23.0/24 192.168.23.11 192.168.23.11 数据网络 192.168.24.0/24 192.168.24.1 192.168.24.2 访问网络 192.168.25.0/

openstack学习笔记(一)-openstack的基础知识

一.OpenStack的基础知识 openstack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache2.0许可证(兼容GPLv3以及DFSG)授权的自由软件和开放源代码项目. OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台.OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,