Openstack dvr

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openstack dvr相关的知识,希望对你有一定的参考价值。

 

1. 拓扑图

 

技术分享图片

 

 

2. 通信流程

a)       不同子网间通信(东西向)

如上图所示,有两个子网net1 (10.0.0.0/24)和net2(10.0.1.0/24), 两个DVR(左边为dvr1,右边为dvr2)
i.    Instance1(10.0.0.5)向instance2(10.0.1.5)发送报文
ii.   Instance1 查看路由表,应该将报文发送至网管10.0.0.1处。此时发出arp消息,获取网管mac地址。广播送至br-int, 因为qvo与qr-1位于同一vlan tag,
  因此DVR会响应改arp请求。 同时为了防止外部DVR响应,当报文转发到了br-tun网桥时,ovs流规则中会drop对于10.0.0.1的arp请求报文 iii. Instance1获取到网管mac之后,封装报文,并发送至ovs port qr-1.此时报文头格式如下:

源mac

目的mac

源IP

目的IP

Vm1_mac

Dvr1_net1_mac

10.0.0.5

10.0.1.5

 

  1. dvr1收到该报文,根据自身路由规则,将报文转发至dvr1 qr-2(10.0.1.1)。

 

源mac

目的mac

源IP

目的IP

dvr1_net1_mac

dvr1_net2_mac

10.0.0.5

10.0.1.5

 

  1. 之后dvr1 qr-2会查询instance2的mac地址,mac是由neutron使用静态arp方式设定的。因为neutron知道所有虚拟机mac,因此可在虚拟机创建时候将对应arp信息记录。获取到instance2 mac之后,报文会被发往br-int网桥。此时报文头格式如下:

 

源mac

目的mac

源IP

目的IP

dvr1_net2_mac

instance2_mac

10.0.0.5

10.0.1.5

 

  1. Br-int网桥将此报文发往br-tun网桥,在br-tun网桥的流规则中,会丢弃目标mac为dvr的报文。防止dvr响应外部请求(隔离外部网络和防止IP冲突),因此必须修改报文源mac地址。

在neutron数据库表dvr_host_macs中,会为每个计算节点分配一个唯一的mac地址,报文在封装成vxlan报文之前,源mac会被替换成compute1在表中对应的mac : com1_mac。

 

源mac

目的mac

源IP

目的IP

com1_mac

instance2_mac

10.0.0.5

10.0.1.5

 

  1. 报文在br-tun封装成vxlan报文,从绑定IP的设备上通过物理链路到达compute2上
  2. Compute2  br-tun解vxlan封装之后,会根据规则转发到br-int网桥上。
  3. Br-int上根据流规则,在检测到源mac为com1_mac全局mac,且目的ip位于10.0.1.0/24网段,因此会将源mac修改为dvr2_net2_mac。此时报文头部如下:

 

源mac

目的mac

源IP

目的IP

dvr2_net2_mac

instance2_mac

10.0.0.5

10.0.1.5

 

随后instance2收到该报文。

 

 

b)       绑定floating ip对外通信(南北向)

 

从内部ping外网主机

 

  1. 为虚拟机绑定floating ip 后,会生成floating ip namespace

 技术分享图片

 

  1. Instance1将报文发送至dvr网关处,dvr中设有策略路由和nat规则链(在dvr namespace中通过iptables -nvL -t nat 以及ip rule + ip route list table xx 可观察到),会将10.0.0.5做snat,转化为对应的floating ip,通过fpr-xxx发送至floating ip namespace.

 技术分享图片

 

 技术分享图片

 

  1. Floating ip namespace 中会有通向外网的默认路由,收到报文后会经由br_int, br-ex. 最后通过连接外网的物理网卡出去

 

 技术分享图片

 

 

从外部网络访问虚拟机(令floating ip 为172.16.6.167)

 

  1. Floating ip namespace中设置了arp代理,因此在收到收到外网报文时会将fg-xxx端口mac响应给外部设备

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 

  1. Floating ip namespace fg-xxx端口收到报文之后,对于floating ip 172.16.6.167有以下路由:

 技术分享图片

 

因此会将报文发送至 fpr-xxx端口。fpr-xxx 同rfp-xxx为VETH Pair, 所以报文被传递至dvr namespace

 

  1. Dvr namespace中,会对该floating ip做DNAT,映射到对应的虚拟机IP。 最终通过br-int达到instance1

 

参考文档

http://www.sxt.cn/u/756/blog/3168

 

3. 配置 & 操作

http://docs.openstack.org/liberty/networking-guide/scenario-dvr-ovs.html#example-configuration

4. 遇到问题

  1. Opensatck默认安全组是禁止ssh和ping的,在测试之前先添加相关策略。

 

5. Dvr配合lbaas使用

  1. 安装好,并成功启动neutron-l3-agent以及neutron-lbaas-agent服务之后,登录dashboard管理界面
  2. 在左侧栏选中网络,点击负载均衡
  3. 新建资源池,配置vip,并且绑定floating ip

 

技术分享图片

 

 

  1. 添加成员,并指定监听端口

技术分享图片

 

  1. 在后端虚拟机中开启http服务,通过浏览器访问

 

技术分享图片

 

技术分享图片

在lbaas服务器上,通过ip netns 指令可查看namespace信息

[[email protected] ~]# ip netns

qlbaas-b674b309-e7ec-45aa-84ee-e25c2926578e

fip-f2800d8c-1ff7-4832-98d3-186bec870f25

qrouter-9b040a00-98b1-4f51-b349-d8a68ea90398

 

 

技术分享图片

 

技术分享图片

 

 技术分享图片

技术分享图片

与外界通信过程,同绑定floating ip的虚拟机一样。流量不会通过网络节点!

以上是关于Openstack dvr的主要内容,如果未能解决你的问题,请参考以下文章

Openstack Neutron DVR

技术分享:OpenStack DVR部署与分析

DVR 原理解析及OpenStack中应用流表分析

DVR 原理解析及OpenStack中应用流表分析

讲清楚说明白openstack中vm流量走向之2——DVR模式

vlan tenant network on ovn based dvr (by quqi99)