Openstack私有云简介之Neutron模块

一、openstack网络概述

  • openstack网络服务提供一个API让用户在云中建立和定义网络连接。该网络服务的项目名称是neutron。
  • openstack所在的整个物理网络都会由neutron“池化”为网络资源池,neutron对这些网络资源进行处理,为项目(租户)提供独立的虚拟化环境。neutron创建各种资源对象并进行连接和整合。从而形成项目(租户)的私有网络。

二、网络基本概念

1、网络

  • 类似于实际的物理环境中的网络,OpenStack网络用于连接云主机或路由器。除此之外,还包含子网、网关以及DHCP服务等。OpenStack网络分为内部网络和外部网络,内部网络一般用于连接虚拟机,而外部网络一般用于连接宿主机外面的网络。

2、子网

  • OpenStack中的子网是一个IP地址段,用于定义实际的IP地址范围

3、端口

  • 端口类似于实际网络中的网络接口,用于连接终端设备或另外一个网络。不同的是,OpenStack中端口连接的一般都是虚拟设备接口,如虚拟机的虚拟网卡或者路由器的虚拟接口等。端口还描述了相关的网络配置,例如可以在端口上配置MAC地址和IP地址。

4、路由器

  • 路由器用于连接 OpenStack的内部网络和外部网络。类似实际路由器功能,支NAT功能,通过绑定浮动IP地址还可以实现地址映射
  • Neutron分别提供了二层(L2)交换和三层(L3)路由抽象的功能,对应于物理网络环境中的交换机和路由器

三、网络模型

Neutron两种网络类型:

1、租户网络,内部网络,用于连接虚拟机

2、供应商网络,内部网络,用于连接虚拟机

Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE

local

  • 所有组件装在一台机器上,多用于测试环境

flat

  • 没有路由,没有隔离

vlan

  • 具有802.1q tagging的网络,头部12字节,有隔离,支持租户数量4k

vxlan

  • 隧道技术,有隔离,vxlan 中数据包会通过 VNI 封装成 UDP 包进行传输,租户内部通信可以跨越任意网络,头部封装24字节,可用租户数量多

gre

  • gre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用 IP 包而非 UDP 进行封装

四、neutron基本架构

在这里插入图片描述
流程简介:
1、neutron运行在控制节点上,对外提供api接口(core和Extension)
2、当收到请求后会通过消息队列把请求交给插件neuron-plugin处理
3、插件会把请求的信息存储在数据库中,并通过消息队列通知各个节点上的代理
4、代理根据需求开始工作

五、neutron主要组件

Neutron-Server

  • 对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。

Plugin

  • 处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态, 并调用 Agent 处理请求。

Agent

  • 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。

network-provider

  • 提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。

Database

  • 存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。

六、组件详解

Neutron-server

neutron-server提供一组API来定义网络连接和IP地址,供Nova等客户端调用,它本身也是分层设计,其结构如下
在这里插入图片描述
Neutron-server包括4个层次,自上而下依次说明:

  1. ResetfulAPI:属于最前端的API,包括CoreAPI和ExtensionAPI两种类型
    (1)CoreAPI(核心api):提供网络,子网,端口的API
    (2)ExetnsionAPI(扩展api):提供路由,负载均衡,fw,安全组的API

  2. Commnon Server:处理认证和校验 API 请求。

  3. Neutron Core:Neutron server 的核心处理程序,通过调用相应的 Plugin 处理请求。

  4. Core Plugin API:定义了 Core Plgin 的抽象功能集合,Neutron Core 通过该 API 调用相应的Core Plgin;

  5. Extension Plugin API:定义了 Service Plgin 的抽象功能集合,Neutron Core 通过该 API调用相应的 Service Plugin;

Plugin

插件是neutron的一种api的后端实现,目的是增强扩展性。插件按照功能可分为core plugin和service plugin两种

(1)Core-plugin:Neutron中即为ML2,负责管理L2的网络连接,优点:在不同节点实现不同网络机制,只需要开发机制驱动,实现了网络子网和端口核心资源的同时,也实现了端口绑定,安全组等扩展资源

类型驱动:对应网络类型,flat local vlan vxlan gre

机制驱动:获取类型驱动维护网络的状态,确保在相应的网络设备上实现这现状态,目前基于代理的网络机制有2种,Linux bridge和Opens vSwitch

(2)Service Plugin:包括l3 router、firewall、loadbalancer、VPN、实现L3-L7的网络服务

Agent

Neuron-agent:处理plugin请求,负责在 network provider 上真正实现各种网络功能。和 plugin 是一一对应的关系

基于ML2插件网络机制的代理:

Linux bridge代理:二层网络虚拟化技术,支持local、vlan、vxlan、flat不支持GRE,虚拟机之间没有隔离。

如果选择linux bridge代理,如图所示:
在这里插入图片描述
计算节点上的数据需要到物理网卡需要经过:

  1. tap接口
  2. linux网桥:作为二层交换机
  3. vlan接口:用于连接linux网桥
  4. vxlan接口
  5. 物理网络接口:用于连接到物理网络

Opens vSwitch代理:支持local、flat、vlan、vxlan、gre等所有网络模型
如果选择linux bridge代理,如图所示:
在这里插入图片描述
如果选择ovs代理,计算节点上的数据需要到物理网卡需要经过:

  1. tap接口
  2. linux网桥
  3. veth对:用来连接2个虚拟网桥
  4. ovs网桥:ovs的核心设备,包括一个ovs集成网桥和ovs物理连接网桥
  5. 集成网桥(int-br):所有计算节点上运行的虚拟机都链接到集成网桥,neutron通过配置集成网桥上的端口实现虚拟机网络隔离。
  6. 物理网桥:链接物理网卡,在flat和vlan中使用provider
    bridge,命名为br-ethx,在vxlan中使用ovs隧道网桥,命名为br-tun

基于Service Plugin插件的代理:

dhcp代理:虚拟机需要获取ip地址

主要组件:

1、DHCP代理(neutron-dhcp-agent),提供dhcp功能,提供元数据请求,提供2个接口,报告dhcp代理的网络状态,启动dnsmasq进程,检测DHCPdiscover请求

2、DHcp驱动:管理dhcp服务器,默认为DNSmasq,提供dns和dhcp,一个dnsmasq进程,能为同一网段中所有启动dhcp的子网服务

3、dhcp调度器:负责dhcp代理和网络(network)的调度

如图所示:在这里插入图片描述
dhcp代理工作流程:

创建实例时,此实例的mac地址和ip会存在dnsmasq的hosts文件中

实例发出dhcpdiscover请求,dnsmasq检测到后会检查hosts文件,把对应项通过dhcpoffer消息将ip和网关给实例

实例发出dhcprequest

dnsmasq回复dhcpack

L3代理

每个L3代理运行在一个网络空间中,提供虚拟路由器,也支持物理路由通过iptables提供地址转换(snat,dnat)、浮动路由(floating)安全组(securitygroup)使不同网络的实例通信

dnat:目的地址转换 外到内
snat :内到外

浮动ip :静态映射,一对一,配在路由器提供网关的外网接口上。不再实例上。写在名称空间中的iptables中

neutron-l3-aget-float-snat比neutron-l3-agent-snat更早执行

网络名称空间

简介:

内核级别隔离网络的一种方法
Linux network namespace 可以将一个物理三层网络分割成
几个独立的虚拟三层网络,用能够实现dhcp隔离:可以同一网段重复使用

命令:
ip netns add---------创建网络名称空间
ip netns list -------查看所有的网络名称空间
ip netns exec +名称 ----进入指定的网络名称空间
ip netns exec netns0 ip address add 10.0.0.1/24 eth0—为netns0空间的eth0网卡添加ip地址

不同网络名称空间之间通信:用VETH对
命令:
ip link add veth1 type veth peername veth2 --------创建VETH对
ip link set veth1 netns netns1 -------将veth1放到netns1中
ip link set veth2 netns netns2 --------将veth2放到netns2中

发布了59 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42953006/article/details/104871536