qq524061227 发表于 2015-4-11 14:36:13

OpenStack点滴03-Neutron

  OpenStack Neutron是一个比较复杂的组件,如果说OpenStack安装部署过程哪一个组件最麻烦,那就肯定是网络组件Neutron了。
  因为我对OpenStack网络这块也不是很熟,就把我所了解的记录一下。
  典型的OpenStack网络分为管理网络、数据网络、外部网络,以下是一个图例:
  
  外部网络:用户调用Openstack的API;虚拟机要访问外网;外网要ssh到虚拟机。
  数据网络:虚拟机之间的数据传输;虚拟机连接到虚拟路由。
  管理网络:各模块之间交互;Message Queue。
  
  在安装部署方面,Neutron分成多个模块分布在3个节点上。
  Controller节点
  neutron-server,用于接收API请求。
  Network节点
  neutron-l3-agent,用于创建和管理虚拟路由、namespace、iptables。
  neutron-dhcp-agent,创建和管理DHCP服务器,每个虚拟网络都有一个DHCP服务器。
  neutron-openvswitch-agent,创建虚拟的L2 switch,Router和DHCP Server都会连接到二层的switch上。
  Compute节点
  neutron-openvswitch-agent,创建虚拟的L2的switch的,虚拟机的网卡连接到二层的switch上。
  
  下图是一个简单的场景:1个租户,2个网络和1个路由。
  
  
  分析Compute Host和Network Host上网络虚拟化的实现:
  Compute Host
  
  
  TAP device:KVM和Xen等hypervisor实现的虚拟网卡(eg VIF、vNIC),比如图中的vnet0。发送到TAP设备的frame会被guest OS收到。
  veth pair:一对直接连接的虚拟网络接口。以太网帧发送到其中一个veth pair,另一个veth pair就会收到。
  Linux Bridge:就像一个简单的交换机。
  Open vSwitch:一个虚拟交换机软件,网络接口连接到openvswitch的port,port可以像物理交换机一样配置,包括VLAN配置。
  
  Integration bridge
    br-int:所有guest都连接到br-int,通过配置br-int ports可以实现网络隔离。
  Physical connectivity bridge
    br-eth1:提供到物理网卡eth1的连接,通过veth pair连接br-int。
  VLAN translation
    net01和net02各自有VLAN ID号 1 和 2,分别对应物理网络VLAN ID 101和102,openvswitch agent负责在br-int和br-eth1上配置flow rule,使其对应上。
  Security groups: iptables and Linux bridges
    理想情况下,TAP device直接连接到br-int,但是为了实现安全组,所以中间加了linux bridge以及其他。因为OpenStack在TAP device(比如vnet0)上实现了安全组,但是带安全组的TAP device不能直接连接到openvswitch端口。
  
  Network Host
  
  br-ex:和连接到外网的网卡(eth0)连接。
  Open vSwitch internal ports
    openvswitch internal ports使得可分配多个地址给openvswitch。
  DHCP agent
    DHCP agent用dnsmasq进程来提供DHCP服务。每个需要DHCP服务的网络都会有一个internal port,并且attach 一个dnsmasq进程给这个port。在之前的例子中,tapXXX对应net01_subnet01,tapWWW对应net02_subnet01。
  L3 agent (routing)
    上例中,qr-YYY接口对应net01_subnet01,IP地址为192.168.101.1/24。qr-ZZZ对应net02_subnet01,IP地址为192.168.102.1/24。qg-VVV的IP地址为10.64.201.254/24。每个接口操作系统可见的,网络节点可以转发这个packets。
    L3 agent用iptables实现floating IP network address translation(NAT)。
  
  
  Overlapping subnets and network namespaces
    有一个问题,就是如果管理网络也用了192.168.101.0/24地址段,那么host就会区分不开。所以通过namespaces来避免冲突,这里的namespace和编程语言中的作用空间有类似的效果。

    下图有三个namespace。分别是qdhcp-aaaa、qrouter-bbbb和qdhcp-cccc
    
    
    
  
页: [1]
查看完整版本: OpenStack点滴03-Neutron