zoukankan      html  css  js  c++  java
  • openstack-neutron基本的网络类型以及分析

    【概述】

    Neutron是OpenStack中负责提供网络服务的组件,基于软件定义网络的思想,实现了网络虚拟化下的资源管理,即:网络即服务

       

    【功能】

    ·二层交换

    Neutron支持多种虚拟交换机,一般使用Linux Bridge和Open vSwitch创建传统的VLAN网络,以及基于隧道技术的Overlay网络,如VxLAN和GRE(Linux Bridge只支持VxLAN)。

       

    ·三层路由

    Neutron从J版本开始,正式加入了DVR(Distributed Virtual Router)服务,将原本集中在网络节点上的部分服务分散到了计算节点上。

    通过namespace中使用ip route或者iptables实现路由或者NAT,也可以通过openflow给OVS下发流表来实现。

       

    ·负载均衡

    关于LBaaS的相关内容,可以参照:https://www.cnblogs.com/liuxia912/p/11209968.html

       

    ·防火墙

    Neutron有两种方式来保证网络的安全性,分别为防火墙和安全组,均使用iptables实现,前者限制路由器的报文,后者限制进出虚机的报文。

       

    【架构】

    ·neutron Server

    守护进程和一些插件,可以安装在网络节点,也可以安装在控制节点。

    neutron-server提供API接口,并把API的调用请求传给已经配置好的插件进行后续处理。

       

    ·neutron L2 agent

    为虚拟机提供2层交换服务,传输以MAC地址为基础。

       

    ·neutron L3 agent

    为虚拟机访问外部网络提供三层转发服务,负责路由浮动IP分配地址转换安全组管理

    通过iptables实现安全组,路由和地址转换。

    每个虚拟路由运行在一个network namespace中,每个namespace由qroute -< router -< UUID命名。

       

    ·neutron-dhcp-agent

    为虚拟机提供DHCP服务。

       

    【创建虚拟机的网络过程】

     

     

    1. nova-compute向Neutron Server发送一个请求虚拟机IP地址的请求

    2. Neutron Server收到请求后为虚拟机创建MAC和IP地址,并存储到数据库中

    3. Neutron Server将信息发送给DHCP-agent

    4. DHCP-agent收到信息后将对应信息发送给dnsmasq,dnsmasq将信息保存起来

    5. nova创建虚机后会初始化MAC地址

    6. 当虚机启动的时候,默认的ip地址是0.0.0.0,会发送一个广播,dnsmasq会监听到虚拟机发送的报文,然后将对应MAC地址的IP地址返回给虚拟机,这样虚拟机启动完成后就会有IP地址了

       

    【网络虚拟化】

    网络(network)是一个隔离的二层网段,类似于物理网络中的LAN(VLAN)。

    具体一点,它是为创建它的租户保留的一个广播域

    端口和子网始终被分配给某个特定的网络。

       

    跨网络的子网之间的流量必须走L3 Vritual Router

    每个网络使用自己的DHCP Agent,每个DHCP Agent在一个Network namespace内。

    不同网络内的IP可以重复。

       

    根据创建网络的用户,Neutron L2 network 可以分为:

    Provider network: 管理员创建的和物理网络有直接映射关系的虚拟网络。

    Tenant network: 租户(普通用户)创建的网络,物理网络对创建者透明,配置由 Neutron 的配置决定。

       

    Provider Network 是由 OpenStack 管理员创建的,直接对应于数据中心的已有物理网络的一个网段。这种网络有三个和物理网络有关属性:

    provider:network_type (网络类型,包括 vxlan, gre, vlan, flat, local)

    provider:segmentation_id (网段 ID, 比如 VLAN 的 802.1q tag, GRE 网络的 Tunnel ID, VXLAN 网络的 VNI)

    provider:physical_network (物理网络的逻辑名称,比如 physnet1, ph-eth1, etc)

       

       

    【虚拟网络类型】

    ·Local

    本地的Linux Bridge,除了虚拟机的网卡,不连接其他的网络设备,实际场景使用较少。

       

    ·Flat

    不带vlan tag的网络,相当于local网络的Linux Bridge连接到一个物理网卡,该网络中的instance可以于网络中的instance通信。

    所有的租户都在同一个网络内,没有进行网络隔离容易产生广播风暴

    可以跨节点,实际场景也较少。

    neutron net-create NAME --provider:network_type flat

            --provider:physical_network PHYS_NET_NAME

       

    ·VLAN

    基于物理Vlan网络实现,共享同一个物理网络的多个Vlan网络是相互隔离的,甚至可以使用重叠的IP空间。

    每个支持VLAN network的物理网络可以被视为一个分离的VLAN trunk,使用一组独占的vlan id。(有效段为1~4096

    私有云网络应用较多。

    neutron net-create NAME --provider:network_type vlan

            --provider:physical_network PHYS_NET_NAME

            --provider:segmentation_id VID

       

    ·VXLAN

    基于隧道技术的 overlay 网络,通过唯一的 VNI 区分于其他的 vxlan 网络,不和具体的物理网络绑定

    在 vxlan 中,数据包通过 VNI 封装成UDP包进行传输,因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制。

    neutron net-create NAME --provider:network_type vxlan

            --provider:segmentation_id TUNNEL_ID

       

    ·GRE

    与vxlan类似的一种overlay网络,使用IP包进行封装。
    GRE 封装的数据包基于 IP 路由表来进行路由,因此 GRE network 不和具体的物理网络绑定。(基于隧道)

    neutron net-create NAME --provider:network_type gre

            --provider:segmentation_id TUNNEL_ID

       

    【虚拟网络类型特点以及应用场景】

    模式

    原理

    优点

    缺点

    vlan

    划分vlan,使用vlan_id隔离广播域

    适合小规模网络部署
    大二层广播通讯方式
    可以不需要网络节点

    必须和物理交换机的vlan_id绑定,最多只能有4096个
    存在二层通讯的广播风暴问题
    基于IP地址的子网划分问题

    GRE

    和vlan模式不同的.是vlan id 会被转换成gre id,外面在封IP.通过隧道转发出去.

    2层的包,通过IP来转发.物理层的3层通信,虚拟上的2层通信.

    gre id 可以有1600W个
    没有广播风暴

    没有mac地址表过大的问题,物理交换机,只需要记住一个eth0的mac地址

    3层网络的通信

    两个阶段需要建隧道,方案不成熟

    VXLAN

    相比较于gre,不使用隧道

    本质: 2层的包+封装vxlan id + 组播地址+ + udp报头 + ip 报头+数据包

    不需要建隧道,使用udp

    方便的安全策略

    和gre id一样,也有1600W可以使用

      

       

       

    【参考】

    https://www.jianshu.com/p/de03140fc60e

    https://www.ait24.com/1066.html

    https://www.ait24.com/1139.html

    http://www.mamicode.com/info-detail-1749637.html

  • 相关阅读:
    ssh免密钥登陆的两种方式
    python 项目实战之装饰器
    python 项目实战之随机杀死程序
    python paramiko外部传参和内部调用命令的方法
    linux screen 工具
    shell删除三天前或者三天内的文件
    CentOS7.3安装Go运行和开发环境
    4.Linq to Xml
    30.第一个Linq 数据库查询
    html 图标库
  • 原文地址:https://www.cnblogs.com/liufarui/p/11218085.html
Copyright © 2011-2022 走看看