Neutron 学习笔记

学习网站:零基础掌握Neutron原理及应用

基础理论

Neutron 是 OpenStack 核心项目之一,提供云计算环境下的虚拟网络功能。把部分传统网络管理的功能推到了租户方,租户通过它可以创建一个自己专属的虚拟网络及其子网。

Neutron在OpenStack的意义

  • 将别的OpenStack项目(Nova)创建的网卡接入到云网络中
  • 连接各个网络硬件和软件,为OpenStack架构和部署提供一个统一的网络服务接口

Neutron 逻辑模型

  • 三个节点:控制节点,计算节点,网络节点
  • 四个网络:API网络,管理网络,数据网络,外部网络

在实际的Neutron物理连接中,由三部分构成:

  • 一个或多个网络结点(通常在x86服务器上部署)
  • 物理网络(例如Arista,Cisco,Huawei厂商的设备)
  • 一个或多个计算结点

Neutron几个重要概念:

  • Router:实现不同网段间的互相通信,为租户提供路由、NAT等服务。
  • Network:虚拟网络中的L2 domain。对应于一个真实物理网络中的二层局域网(VLAN),从租户的的角度而言,是租户私有的。
  • Subnet:为网络中的三层概念,指定一段IPV4或IPV6地址并描述其相关的配置信息。它附加在一个二层Network上,指明属于这个network的虚拟机可使用的IP地址范围。
  • Port:是一个逻辑的概念,虚拟网络中网卡对应的端口。

安全组

Stateful firewall in OpenFlow based SDN 防火墙可以分为有状态(Stateful)和无状态(Stateless)。这里说的防火墙指的不仅是Firewall,也包括OpenStack中常使用的Security Group,它们只是不同层面的防火墙。

  • 无状态防火墙就是基于静态数值来过滤或阻拦网络数据包。例如基于地址,端口,协议等等。无状态指的就是,防火墙本身不关心当前的网络连接状态。
  • 有状态防火墙能区分出网络连接的状态。例如TCP连接,有状态防火墙可以知道当前是连接的哪个阶段。也就是说,有状态防火墙可以在静态数值之外,再通过连接状态来过滤或阻拦网络数据包。例如可以不允许外部ping虚机,但可以从虚机内部ping外面的IP。

无状态的防火墙一般更快,在高负载网络流量下性能更好,但是只适用于简单的场景。而有状态的防火墙一般会安全的多,因为它可以定义更加严格的规则。

Neutron Security Group Rule

Default Neutron Security Group Rule

  • 允许所有的Egress流量
  • 允许同一个Security Group端口的ingress流量
  • 禁止所有其他的Ingress流量(没有rule)
  • 允许所有DHCP流量(隐藏)
  • 打开MAC spoof prevention (隐藏)

Neutron Security Group 实现 Security group通过Linux IPtables来实现,为此,在Compute节点上引入了qbr*这样的Linux传统bridge(iptables规则目前无法加载到直接挂在到ovs的tap设备上)。iptables只是一个用户空间的程序,真正干活的其实是Linux内核netfilter,通过iptables创建新规则,其实就是在netfilter中插入一个hook,从而实现修改数据包、控制数据包流向等。

安全组入访规则,出访规则,anti snoop功能。

Neutron Security Group 行为流程

DHCP

DHCP作用是分配IP地址,配置主机(默认网关,DNS等),管理主机地址和配置。

DHCP工作流程,采用UDP封装报文,端口67,68。

DHCP Agent管理dnsmasq。每一个Network对应一个到多个dnsmasq进程,每个dnsmasq对应一个DHCP Server。

Router

Neutron Router 由Linux network namespace以及相应的网卡组成。

  • Linux network namespace 是隔离的网络空间,独立的网络协议栈
  • Linux包含一个全局的namespace和零到多个自定义的namespace
  • 网卡只能属于一个namespace,网卡决定了IP报文最后由哪个namespace处理。路由只可能发生在同一个namespace的不同网卡之间。

Legacy Router

HA Router

DVR:Distributed Virtual Router

DVR + HA

comments powered by Disqus