返回顶部
首页 > 资讯 > 精选 >openstack(pike) dvr 中南北数据流向分析
  • 770
分享到

openstack(pike) dvr 中南北数据流向分析

2023-06-04 22:06:07 770人浏览 薄情痞子
摘要

1  在DVR环境中各组件的连接情况如图2 带floatingip,从外部访问虚机,ping floatingip 192.168.100.190此时数据流如图所示2.1 获取Mac外网中的机器首先要通过 ARP 获取虚机浮动 I

1  在DVR环境中各组件的连接情况如图
openstack(pike) dvr 中南北数据流向分析

2 带floatingip,从外部访问虚机,ping floatingip 192.168.100.190
此时数据流如图所示
openstack(pike) dvr 中南北数据流向分析

2.1 获取Mac
外网中的机器首先要通过 ARP 获取虚机浮动 IP 对应的 MAC 地址。浮动 IP 并没有配置在 fip 的端口上,因此 fip 无法直接响应 ARP 请求,那怎么办呢?Neutron 在 fip NS 的 fg 端口上配置了 arp proxy,这样,fip 既可以响应它自己的 interface 上的 IP 地址的 ARP 请求,也可以响应能通过它路由到的 IP 地址的 ARP 请求,
fip netns上配置的proxy_arp
[root@compute ~]# ip netns exec fip-82d87e5f-167e-4525-90b2-c8f340630a1e sysctl net.ipv4.conf.fg-42d94dcb-8b.proxy_arp
net.ipv4.conf.fg-42d94dcb-8b.proxy_arp = 1
fip netns 收到 ARP 请求后,将其 fg interface 的 MAC 地址返回,外网中的机器获取到虚机浮动 IP 的 MAC 地址后,发出 ICMP 网络
2.2 fip netns 路由到下qrouter netns
网络包经过 br-ex,被 fip 的 fg 端口收到,查路由表,命中第一条路由,从其 fpr interface 发出,到达 169.254.106.114.
ip netns exec fip-82d87e5f-167e-4525-90b2-c8f340630a1e ip route
169.254.106.114/31 dev fpr-b2ce2e13-1 proto kernel scope link src 169.254.106.115 
192.168.100.0/24 dev fg-42d94dcb-8b proto kernel scope link src 192.168.100.184 
192.168.100.190 via 169.254.106.114 dev fpr-b2ce2e13-1 
fpr interface 和rfp interface 是一堆veth pair , fpr interface 发出的包被 veth 另一端的 qrouter 的 rfp-b2ce2e13-1 interface 收到。
可以看到qrouter netns 的 rfp-b2ce2e13-1口地址是169.254.106.114/31


[root@compute ~]# ip netns exec qrouter-b2ce2e13-127d-491a-a669-ff07263e3751 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: rfp-b2ce2e13-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether b2:e7:86:35:3D:ac brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 169.254.106.114/31 scope global rfp-b2ce2e13-1
       valid_lft forever preferred_lft forever
    inet6 fe80::b0e7:86ff:fe35:3dac/64 scope link 
       valid_lft forever preferred_lft forever
134: qr-d2b8d53f-64: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN qlen 1000
    link/ether fa:16:3e:02:97:ab brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global qr-d2b8d53f-64
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe02:97ab/64 scope link 
       valid_lft forever preferred_lft forever
2.3 DNAT
在 qrouter 上,首先做 DNAT
-A neutron-l3-agent-PREROUTING -d 192.168.100.190/32 -i rfp-b2ce2e13-1 -j DNAT --to-destination 172.17.0.7
DNAT后,dest ip 改为172.17.0.7
2.4 再次路由
查 qrouter 的 main 路由表,命中第二条,从qr-d2b8d53f-64 发出
ip netns exec qrouter-b2ce2e13-127d-491a-a669-ff07263e3751 ip route
169.254.106.114/31 dev rfp-b2ce2e13-1 proto kernel scope link src 169.254.106.114 
172.17.0.0/16 dev qr-d2b8d53f-64 proto kernel scope link src 172.17.0.1 
数据包经qr-d2b8d53f-64,发到br-int 到达虚机


3 带floatingip从虚机访问外网,从172.17.0.7 ping 8.8.8.8
 3.1路由 
进入qroute netns,查看路由规则走route 16表
[root@compute ~]# ip netns exec qrouter-b2ce2e13-127d-491a-a669-ff07263e3751 ip rule
0:from all lookup local 
32766:from all lookup main 
32767:from all lookup default 
57483:from 172.17.0.7 lookup 16 
2886795265:from 172.17.0.1/16 lookup 2886795265 


[root@compute ~]# ip netns exec qrouter-b2ce2e13-127d-491a-a669-ff07263e3751 ip route list table 16
default via 169.254.106.115 dev rfp-b2ce2e13-1 
3.2 SNAT
路由后会通过netfilter的POSTROUTING链中进行SNAT,将源IP改为192.168.100.190
[root@compute ~]# ip netns exec qrouter-b2ce2e13-127d-491a-a669-ff07263e3751 iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N neutron-l3-agent-OUTPUT
-N neutron-l3-agent-POSTROUTING
-N neutron-l3-agent-PREROUTING
-N neutron-l3-agent-float-snat
-N neutron-l3-agent-snat
-N neutron-postrouting-bottom
-A PREROUTING -j neutron-l3-agent-PREROUTING
-A OUTPUT -j neutron-l3-agent-OUTPUT
-A POSTROUTING -j neutron-l3-agent-POSTROUTING
-A POSTROUTING -j neutron-postrouting-bottom
-A neutron-l3-agent-POSTROUTING ! -i rfp-b2ce2e13-1 ! -o rfp-b2ce2e13-1 -m conntrack ! --ctstate DNAT -j ACCEPT
-A neutron-l3-agent-PREROUTING -d 169.254.169.254/32 -i qr-+ -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697
-A neutron-l3-agent-PREROUTING -d 192.168.100.190/32 -i rfp-b2ce2e13-1 -j DNAT --to-destination 172.17.0.7
-A neutron-l3-agent-float-snat -s 172.17.0.7/32 -j SNAT --to-source 192.168.100.190
-A neutron-l3-agent-snat -j neutron-l3-agent-float-snat
-A neutron-postrouting-bottom -m comment --comment "PerfORM source NAT on outGoing traffic." -j neutron-l3-agent-snat


从rfp-b2ce2e13-1口将包发到169.254.106.115,rfp-b2ce2e13-1和fip netns的fpr-b2ce2e13-1,是一对veth pair,fpr-b2ce2e13-1收到数据包
[root@compute ~]# ip netns exec fip-82d87e5f-167e-4525-90b2-c8f340630a1e ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: fpr-b2ce2e13-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether aa:f7:5f:31:67:db brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 169.254.106.115/31 scope global fpr-b2ce2e13-1
       valid_lft forever preferred_lft forever
    inet6 fe80::a8f7:5fff:fe31:67db/64 scope link 
       valid_lft forever preferred_lft forever




135: fg-42d94dcb-8b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN qlen 1000
    link/ether fa:16:3e:c0:dc:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.184/24 brd 192.168.100.255 scope global fg-42d94dcb-8b
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fec0:dc94/64 scope link 
       valid_lft forever preferred_lft forever
3.3 数据包在fip netns 中再次路由
包通过fpr-b2ce2e13-1发到169.254.106.115,后再在fip netns中查路由规则,路由
[root@compute ~]# ip netns exec fip-82d87e5f-167e-4525-90b2-c8f340630a1e ip rule
0:from all lookup local 
32766:from all lookup main 
32767:from all lookup default 
2852022899:from all iif fpr-b2ce2e13-1 lookup 2852022899 
[root@compute ~]# ip netns exec fip-82d87e5f-167e-4525-90b2-c8f340630a1e ip route list table 2852022899
default via 192.168.100.1 dev fg-42d94dcb-8b 
从fg-42d94dcb-8b 口将包发到192.168.100.1,再有192.168.100.1继续路由转发


4 不带浮动IP,虚机访问外网
 4.1 计算节点qrouter 路由
查看路由规则
ip netns exec qrouter-b2ce2e13-127d-491a-a669-ff07263e3751 ip rule
0:from all lookup local 
32766:from all lookup main 
32767:from all lookup default 
2886795265:from 172.17.0.1/16 lookup 2886795265 
查看路由表2886795265
ip netns exec qrouter-b2ce2e13-127d-491a-a669-ff07263e3751 ip route list table 2886795265
default via 172.17.0.10 dev qr-d2b8d53f-64
只有一条策略,经过qr口,发到下一个路由172.17.0.10
172.17.0.10 路由是在network节点的snat netns sg口
[root@network ~]# ip netns exec snat-b2ce2e13-127d-491a-a669-ff07263e3751 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
93: sg-935eff5f-b8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN qlen 1000
    link/ether fa:16:3e:bf:6d:b5 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.10/16 brd 172.17.255.255 scope global sg-935eff5f-b8
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:febf:6db5/64 scope link 
       valid_lft forever preferred_lft forever
94: qg-2b2169ee-a5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN qlen 1000
    link/ether fa:16:3e:9d:5c:bd brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.187/24 brd 192.168.100.255 scope global qg-2b2169ee-a5
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe9d:5cbd/64 scope link 
       valid_lft forever preferred_lft forever
4.2 SNAT
network 节点的snat netns 做SNAT
ip netns exec snat-b2ce2e13-127d-491a-a669-ff07263e3751 iptables -t nat -S
-A neutron-l3-agent-snat -o qg-2b2169ee-a5 -j SNAT --to-source 192.168.100.187
4.3 snat netns路由
ip netns exec snat-b2ce2e13-127d-491a-a669-ff07263e3751 ip rule
0:from all lookup local 
32766:from all lookup main 
32767:from all lookup default 
没有额外策略,走main表
 ip netns exec snat-b2ce2e13-127d-491a-a669-ff07263e3751 ip route list table main
default via 192.168.100.1 dev qg-2b2169ee-a5 
172.17.0.0/16 dev sg-935eff5f-b8 proto kernel scope link src 172.17.0.10 
192.168.100.0/24 dev qg-2b2169ee-a5 proto kernel scope link src 192.168.100.187 
根据目的地址,命中第一条,包从qg-2b2169ee-a5口出去,再从192.168.100.1网关上继续路由

--结束END--

本文标题: openstack(pike) dvr 中南北数据流向分析

本文链接: https://lsjlt.com/news/239980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • openstack(pike) dvr 中南北数据流向分析
    1  在DVR环境中各组件的连接情况如图2 带floatingip,从外部访问虚机,ping floatingip 192.168.100.190此时数据流如图所示2.1 获取MAC外网中的机器首先要通过 ARP 获取虚机浮动 I...
    99+
    2023-06-04
  • Angular中单向数据流的示例分析
    这篇文章主要介绍了Angular中单向数据流的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。变更检测Angular 中,数据是由顶部...
    99+
    2024-04-02
  • NumPy 究极指南:让数据分析如行云流水
    NumPy(Numerical Python)是一个强大的 Python 库,专用于科学计算和数据分析。它提供了广泛的功能,可帮助您高效地处理多维数组,执行复杂的数学运算,并解析复杂的数据集。 NumPy 的核心概念 NumPy 围绕着以...
    99+
    2024-04-02
  • PHP MVC架构数据流向分析及优化技巧
    MVC架构是一种流行的Web应用程序架构,它将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分。模型负责存储和管理数据,视图负责显示数据,控制器负责处理用户请求并调用模型和视图。 在MVC架构中,数...
    99+
    2024-02-05
    PHP MVC 数据流向 优化技巧。
  • Android中打电话的数据流程分析
    1.所有流程的起点是从拨号后按下拨号键开始,此步的代码在/android sourcecode/packages/Contacts/src/com/android/contac...
    99+
    2022-06-06
    电话 数据 Android
  • vue中数据双向绑定的示例分析
    这篇文章主要介绍了vue中数据双向绑定的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。* Object.definePro...
    99+
    2024-04-02
  • JavaScript中双向数据绑定的示例分析
    小编给大家分享一下JavaScript中双向数据绑定的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!双向数据绑定指的是将...
    99+
    2024-04-02
  • 为什么Python在数据分析中如此流行?
    Python作为一种高级编程语言,近年来在数据分析领域变得越来越流行。那么,为什么Python在数据分析中如此流行呢?本文将从以下几个方面进行分析。 1. Python是一种易于学习和使用的编程语言 Python语言简洁易懂,具有可读性和模...
    99+
    2023-06-16
    numy shell unix
  • 数据海洋中的航行指南:Python 数据分析入门秘籍
    数据分析已成为现代商业世界不可或缺的一部分。利用强大的工具,如 Python,从庞大的数据集中提取有价值的见解比以往任何时候都更容易。本指南将作为您进入 Python 数据分析旅程的地图,指导您从基础到高级概念。 基础知识 Python...
    99+
    2024-03-14
    数据分析
  • Android中Service实时向Activity传递数据实例分析
    本文实例讲述了Android中Service实时向Activity传递数据的方法。分享给大家供大家参考。具体如下: 这里演示一个案例,需求如下: 在Service组件中创建一个...
    99+
    2022-06-06
    service 数据 activity Android
  • C++ Cartographer源码中关于Sensor的数据走向分析
    本篇内容主要讲解“C++ Cartographer源码中关于Sensor的数据走向分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ Cartographer源码中关于...
    99+
    2023-07-05
  • JavaScript中动态向表格添加数据的示例分析
    这篇文章将为大家详细讲解有关JavaScript中动态向表格添加数据的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 首先先写出表格的表头和主干部分<t...
    99+
    2024-04-02
  • AngularJS框架中双向数据绑定机制的示例分析
    这篇文章将为大家详细讲解有关AngularJS框架中双向数据绑定机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:假如我们有一个学生信息列表,包含学生...
    99+
    2024-04-02
  • 微信小程序中数据双向绑定与数据操作的示例分析
    这篇文章主要为大家展示了“微信小程序中数据双向绑定与数据操作的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序中数据双向绑定与数据操作的示例分析...
    99+
    2024-04-02
  • C语言数据在内存中的存储流程深入分析
    目录前言类型的基本分类整型浮点数自定义类型整型在内存中的存储原码、反码、补码大端和小端如何判断编译器是大端还是小端浮点数在内存中的存储总结前言 C语言中有char、short、int...
    99+
    2022-11-13
    C语言数据在内存中的存储 C语言数据存储
  • MongoDB在物流行业中的应用实践与数据分析挖掘
    随着物流行业的蓬勃发展,数据处理和分析的需求也越来越大。在这个信息化时代,企业面临的挑战是如何处理大量的数据并从中获取有价值的信息。为了应对这一挑战,物流行业开始广泛采用MongoDB数据库进行数据管理和分析挖掘。MongoDB是一个非关系...
    99+
    2023-11-02
    数据分析 物流 关键词:MongoDB
  • Python中聚类技术的应用:数据分析方法及操作指南
    数据聚类是一种常用的数据分析技术,可以帮助我们对大量的数据进行分组和分析,从而获得更加深入的洞察和认识。在Python中,我们可以使用各种聚类算法来进行数据聚类,例如K-Means、层次聚类、DBSCAN等。本文将介绍如何使用P...
    99+
    2024-01-22
    Python 数据分析 聚类技术
  • 服务器日志分析:专家指南,从海量数据中挖掘宝藏
    服务器日志是宝贵的资源,可以提供有关应用程序、基础设施和用户的宝贵见解。仔细分析这些日志对于主动监控系统健康状况、识别问题并提高性能至关重要。这份专家指南提供了分步指南,帮助您从海量服务器日志数据中提取宝藏。 第一步:收集和预处理数据 ...
    99+
    2024-04-02
  • MySQL中延迟问题和数据刷盘策略流程的示例分析
    这篇文章给大家分享的是有关MySQL中延迟问题和数据刷盘策略流程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、MySQL复制流程官方文档流程如下:MySQL延迟问题...
    99+
    2024-04-02
  • php数据流中第K大元素的计算方法及代码分析
    设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 计算方法 1、直接使用最小堆,堆的大小为 k,这样保证空间占用最小,最小堆的根节点...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作