openstack学习-网络管理

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

物理网络与虚拟化网络

《openstack学习-网络管理》

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

linux网络虚拟化实现技术

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

linux网卡虚拟化

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

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

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

linux bridge

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

open vswitch

相比linux bridge的小规模的主机内部通信场景,open vswitch更适合大规模的多主机通信场景
《openstack学习-网络管理》

network namespace

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

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

neutron

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

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之间的子网,以及连接内外网
《openstack学习-网络管理》

fixed ip

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

floating ip

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

physical network

pytsical network,物理网络。
在物理网络环境中连接到openstack不同节点的网络,每个物理网络可以支持neutron中的一个或者多个虚拟网络。
《openstack学习-网络管理》
openstack必须通过physical network才能和真实物理网络通信

provider network

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

self-service network

自助服务网络,也叫租户网络或项目网络,它是由openstack租户创建的,完全虚拟的,只在本网络内部连通,不能在租户之间共享
self-servcie network通常使用vxlan或者gre模式,可以通过virtual router的snat与provider network通信
《openstack学习-网络管理》
不同的self-service network中的网段可以相同,类似于物理环境中不同公司的内部网络
self-service network如果需要和外部网络通信,需要通过router,类似于物理环境中公司上网需要通过路由器或者防火墙。

External network

外部网络,也叫公共网络
它是一种特殊的provider network,连接的物理网络与数据中心或者internet相通,网络中的port可以访问外网
一般将租户的virtual router连接到该网络,并创建floating ip绑定虚拟机,实现虚拟机与外网通信
《openstack学习-网络管理》
Exernal netwok类似于物理环境中直接使用公网ip网段,不同的是,openstack中external network对应的物理网络不一定能直连internet,有可能只是数据中心的一个内部私有网络。

securiy group

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

neutron架构与组件

架构图
《openstack学习-网络管理》
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的架构是基于插件的,不同的插件提供不同的网络服务,主要包含如下组件
《openstack学习-网络管理》

组件-neutron server

《openstack学习-网络管理》
neutron server=apis+plugins,通过这种方式,可以自由对接不同网络后端能力

组件-core plugin

core plugin,主要是指ml2(modular layer 2) plugin,是一个开放架构,在plugin下,可以集成各个厂家,各种后端技术支持的layer 2网络服务。
《openstack学习-网络管理》
ml2 plugin的drivers主要分为以下两种:
typer driver:定义了网络类型,每种网络类型对应一个type driver
mechanism driver:对接各种二层网络技术和物理交换机设备,如ovs,linux bridge等,从typer driver获取相关的底层网络信息,确保对应的底层技术能够根据这些信息正确配置二层网络。

组件-service plugin

serivce plugin用于实现高阶网络服务,如路由,负载均衡,防火墙和***服务等
《openstack学习-网络管理》
l3 service plugin主要提供路由,浮动ip服务等。

组件-agent

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

neutron网络流量分析

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

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

linux bridge+flat网络

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

linux bridge+vlan网络

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

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

《openstack学习-网络管理》
以下涉及计算节点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)接收数据包

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

《openstack学习-网络管理》
计算节点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的网卡

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

《openstack学习-网络管理》
计算节点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

《openstack学习-网络管理》

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

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

《openstack学习-网络管理》
虚拟机运行在计算节点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的虚拟机

《openstack学习-网络管理》

(直接放图吧。。。。。)
《openstack学习-网络管理》

《openstack学习-网络管理》

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

《openstack学习-网络管理》

《openstack学习-网络管理》

《openstack学习-网络管理》

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

《openstack学习-网络管理》

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

    原文作者:羊草
    原文地址: https://blog.51cto.com/11555417/2438097
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞