OpenStack Yoga版安装笔记(八)glance练习补充2

news2024/11/24 12:28:05

1、openstack image list数据流回顾

OpenStack Yoga版安装笔记(七)通过Wireshark抓包、Mermaid绘图,解析了执行openstack image list的数据流,图示如下:

  • 数据流1-4:user admin认证,并获得admin token认证令牌;
  • 数据流5:user admin发送请求给glance,请求image list;
  • 认证令牌验证:
    • 数据流6-7:glance查询memcache,是否存在admin token
    • 数据流8-11:user glance认证,并获得glance token;
    • 数据流12-15:glance凭着glance token,验证admin token
    • 数据流16-17:把admin token存储到memcache
  • 数据流18-19:glance查询glance db
  • 数据流20:返回image list

从执行openstack image list命令涉及的整个数据流,可以看出openstack具有相对复杂的认证流程:

1、用户认证:

  • 用户首先需要通过 Keystone 服务进行认证。Keystone 是 OpenStack 的身份服务,负责管理用户、项目、角色和权限。
  • 用户通过提供用户名、密码和项目信息等凭证,获取一个认证令牌(Token)。

2、API 请求:

  • 用户通过 openstack 命令行工具发送 API 请求。这个请求包含认证令牌,确保请求是经过认证的。

3、认证令牌验证:

  • Glance API 服务接收到请求后,首先验证请求中的认证令牌。(首先到memcache去验证,如果没有该令牌,则到keystone去验证,keystone验证通过后,还会保存一份到memcache。)
  • 认证令牌包含了用户的身份信息和权限信息,Glance API 服务会检查这些信息,确保用户有权执行请求的操作。(glance到keystone验证认证令牌之前,首先要到keystone认证自己的身份,获得自己的认证令牌)

4、权限检查:

  • 在认证通过后,Glance API 服务还会检查用户是否有权限执行请求的操作。这通常涉及到检查用户的角色和项目信息。
  • 例如,只有管理员或具有特定角色的用户才能列出所有镜像,而普通用户可能只能看到他们自己创建的镜像。

5、数据访问:

  • 如果认证和授权都通过,Glance API 服务会查询数据库以获取镜像的元数据信息。

6、数据返回:

  • Glance API 服务将查询到的镜像信息返回给用户,用户可以在命令行界面中看到这些信息。

7、进一步操作:

  • 用户可以继续使用认证令牌进行其他操作,如查看镜像详细信息、创建新镜像等。

整个流程确保了只有经过认证和授权的用户才能访问和操作镜像,从而保护了系统的安全性。这种复杂的认证流程是 OpenStack 系统设计的一部分,旨在提供灵活且安全的用户访问控制。

2、openstack image save数据流练习

2.1 练习说明

镜像服务(即image service,代号为glance)主要由两部分组成:镜像元数据存储于glance数据库中,执行openstack image list命令时会查询该数据库;而实际的镜像文件则存储在glance指定的后端存储系统中,比如在这里glance服务指定的后端存储为本地文件系统。

本次练习将执行openstack image save命令,读取后端存储(在本练习中为本地文件系统),通过Wireshark抓包,观察数据流。

2.2 虚机说明

本次练习将继续在OpenStack Yoga版安装笔记(七)的controller node虚机上执行:

 2.3 glance进程跟踪说明

Glance通过其内部API与本地文件系统进行交互,执行文件的创建、读取、更新和删除操作,这些操作由Glance的文件存储驱动程序处理。

可以使用strace工具来跟踪Glance进程的系统调用,以了解它是如何与文件系统进行交互的。strace是一个强大的命令行工具,它可以显示一个进程执行的所有系统调用及其参数和返回值,这对于调试和分析程序的行为非常有用。

1、找到Glance进程ID:

root@controller:~# ps -aux | grep glance
glance      1204  1.1  1.4 168648 121024 ?       Ss   13:24   0:09 /usr/bin/python3 /usr/bin/glance-api --config-file=/etc/glance/glance-api.conf --config-dir=/etc/glance/ --log-file=/var/log/glance/glance-api.log
glance      1216  0.0  1.3 168648 105236 ?       S    13:24   0:00 /usr/bin/python3 /usr/bin/glance-api --config-file=/etc/glance/glance-api.conf --config-dir=/etc/glance/ --log-file=/var/log/glance/glance-api.log
glance      1217  0.0  1.3 168648 105236 ?       S    13:24   0:00 /usr/bin/python3 /usr/bin/glance-api --config-file=/etc/glance/glance-api.conf --config-dir=/etc/glance/ --log-file=/var/log/glance/glance-api.log
glance      1218  0.0  1.3 168648 105240 ?       S    13:24   0:00 /usr/bin/python3 /usr/bin/glance-api --config-file=/etc/glance/glance-api.conf --config-dir=/etc/glance/ --log-file=/var/log/glance/glance-api.log
glance      1219  0.0  1.3 168648 105240 ?       S    13:24   0:00 /usr/bin/python3 /usr/bin/glance-api --config-file=/etc/glance/glance-api.conf --config-dir=/etc/glance/ --log-file=/var/log/glance/glance-api.log
root        1958  0.0  0.0   4024  2100 pts/0    S+   13:37   0:00 grep --color=auto glance

2、使用strace跟踪进程:

strace -p 1216  -o h1 &
strace -p 1217  -o h2 &
strace -p 1218  -o h3 &
strace -p 1219  -o h4 &

3、结束跟踪:

killall -9 strace

3、抓包分析

3.1 Wireshark抓包说明

1、在controller node跟踪glance进程(方法如2.3 glance进程跟踪说明

2、建议使用MobaXterm,root登录controller node(10.0.20.11),执行:

wireshark &

抓取ens33端口的数据包,这部分主要抓取OpenStackClient和keystone、glance交互的数据包。

3、建议使用MobaXterm,root登录controller node(10.0.20.11),执行:

wireshark &

抓取lo: <loopback>端口的数据包,这部分主要抓取glance和keystone、memcache,以及glance、keystone和数据库交互的数据包。

4、在OpenStackClient(10.0.20.100)执行openstack image save命令:

ubcode@osclient ~(admin/amdin)$ openstack image save --file cirros1 cirros
ubcode@osclient ~(admin/amdin)$ ls -l cirros1  
-rw-rw-r-- 1 ubcode ubcode 12716032 Jul 21 23:41 cirros1  <--已成功下载镜像

5、结束strace跟踪。将两个端口的抓包文件下载到本地电脑(前面提到win11,ip address为10.0.20.1),用本地wireshark将抓包文件进行合并(wireshar:文件->合并);将strace输出的文件h1~h4也下载到本地电脑。

3.2 抓包结果

为了方便观察数据流,可以过滤掉大量的keystone和keystone db,以及glance和glance db的MySql数据包,仅保留每次登录信息和每次的最后一个响应包(参见下面的过滤条件:mysql.user == "keystone" or mysql.user == "glance" or frame.number == 22200 or frame.number == 28304 or frame.number == 32030 or frame.number == 32613)。

OpenStackClient、keystone api、glance api之间的主要信息传输都是通过http进行的,因此可以过滤掉大量维护tcp连接的数据包。

同时,也截取了部分镜像传输的数据包(参见下面的过滤条件:!(frame.number > 32706 and frame.number < 33497))。

filter: (http or tcp.port == 11211 or tcp.port == 9292  or mysql.user == "keystone" or mysql.user == "glance" or frame.number == 22200 or frame.number == 28304 or frame.number == 32030  or frame.number == 32613) and  ! (frame.number > 32706 and frame.number <33497)

 3.3 抓包的流量图

 3.4 glance和本地文件系统交互信息

查看strace(见2.3 glance进程跟踪说明)中的输出文件的部分内容:

openat(AT_FDCWD, "/var/lib/glance/images/429decdd-9230-49c0-b735-70364c226eb5", O_RDONLY|O_CLOEXEC) = 9
newfstatat(9, "", {st_mode=S_IFREG|0640, st_size=12716032, ...}, AT_EMPTY_PATH) = 0
ioctl(9, TCGETS, 0x7fffbe0f1c30)        = -1 ENOTTY (Inappropriate ioctl for device)
lseek(9, 0, SEEK_CUR)                   = 0
read(9, "QFI\373\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0\0\2\300\0\0"..., 65536) = 65536
sendto(5, "HTTP/1.1 200 OK\r\nContent-Type: a"..., 259, 0, NULL, 0) = 259
sendto(5, "QFI\373\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0\0\2\300\0\0"..., 65536, 0, NULL, 0) = 65536
read(9, "\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
sendto(5, "\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536, 0, NULL, 0) = 43064

openat(AT_FDCWD, "/var/lib/glance/images/429decdd-9230-49c0-b735-70364c226eb5"解释:openat 函数被用来打开 /var/lib/glance/images/429decdd-9230-49c0-b735-70364c226eb5 这个路径的文件(即镜像文件cirros)。openat函数调用返回了9,这意味着它成功地以指定的模式打开了文件,并且返回的文件描述符是9。这个文件描述符可以用于后续的文件操作,比如读取文件内容等。

3.5 Mermaid绘制时序图

可以用mermaid绘制时序图,方便查看:

 附mermaid code: 

sequenceDiagram
  autonumber
  participant C as OpenStackClient
  participant K as keystone
  participant KD as keystone DB
  participant G as glance
  participant GD as glance DB 
  participant M as memcached
  participant F as Local File System
  C ->> K: user admin scope to project admin, 发送username:admin/password:xxxx
  Note left of C: 命令行中输入: <br/> openstack image save
  K ->> KD: Keystone 查询user admin的身份
  KD ->> K: ok
  K ->> C: user admin身份验证成功,Keystone生成admin token
  C ->> G: user admin向 glance service请求image信息,请求中包含之前从 Keystone 获取的admin token
  G ->> M: glance服务接收到请求,去memcache检查请求中的admin token
  Note right of M: 先检查memcached是否有admin token
  M ->> G: 没有,继续去keystone检查
  G ->> K: user glance scope to project service,发送username:glance/password:xxxx
  Note right of G: glance首先要认证自己的身份!
  K ->> KD: Keystone 查询user glance的身份
  KD ->> K: ok
  K ->> G: glance的身份验证成功,Keystone 生成glance token
  G ->> K: glance服务将admin token发送回 Keystone,请求验证admin token的有效性,请求中包含之前从 Keystone 获取的glance token
  Note right of G: glance拿着自己的token,去验证admin token
  K ->> KD: Keystone 查询admin token
  KD ->> K: ok
  K ->> G: admin token有效,Keystone 返回给glance service
  G ->> M: please store admin token
  Note right of M: 保存一份到memcache
  M ->> G: stored
  G ->> GD: glance service根据用户的权限和角色,检索glance db
  GD ->> G: 返回镜像元数据
  C ->> G: 请求镜像元数据(GET /v2/images?name=cirros HTTP/1.1)
  G ->> M: 验证admin token
  M ->> G: 验证通过
  Note right of M: Memcache已经有admin token,<br/>可以承担验证admin token的工作
  G ->> C: 返回镜像元数据
  C ->> G: 发出image save请求(GET /v2/images/429decdd-9230-49c0-b735-70364c226eb5/file HTTP/1.1)
  G ->> M: 验证admin token
  M ->> G: 验证通过
  G ->> F: openat(AT_FDCWD, "/var/lib/glance/images/429decdd-9230-49c0-b735-70364c226eb5"
  Note right of F: 打开镜像文件cirros
  G -->> F: read镜像文件
  G -->> C: 传输cirros镜像
  G ->> C: 传输完成(HTTP/1.1 200 OK)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ros2--中间件--rmw

rmw robot middleware 什么是中间件 一套位于操作系统之上&#xff0c;引用程序之下的软件。 在ros2中理解就是&#xff1a;中间件就是介于某两个或者多个节点中间的组件 中间件的作用 就是提供多个节点中间通信用的。 教程 ROS2中间件DDS架构 ros2从入门到精通

使用puma部署ruby on rails的记录

之前写过一篇《记录一下我的Ruby On Rails的systemd服务脚本》的记录&#xff0c;现在补上一个比较政治正确的Ruby On Rails的生产环境部署记录。使用Puma部署项目。 创建文件 /usr/lib/systemd/system/puma.service [Unit] DescriptionPuma HTTP Server DocumentationRuby O…

在Linux、Windows和macOS上释放IP地址并重新获取新IP地址的方法

文章目录 LinuxWindowsmacOS 在Linux、Windows和macOS上释放IP地址并重新获取新IP地址的方法各有不同。以下是针对每种操作系统的详细步骤&#xff1a; Linux 使用DHCP客户端&#xff1a;大多数Linux发行版都使用DHCP&#xff08;动态主机配置协议&#xff09;来自动获取IP地址…

RT-Thread全球嵌入式电子设计大赛入选名单发布!

目录 概述 ​1 瑞萨 RA8D1 Vision Board 2 英飞凌 Psoc6-EvaluationKit-062S2 WIFI模块 3 恩智浦 FRDM-MCXN947 4 STM32 星火一号 STM32F407 5 先楫 HPM5300EVK (RISC-V) 6 自带开发板 概述 RT-Thread全球嵌入式电子设计大赛入选名单发布啦&#xff0c;如下名单的小…

数学建模学习(3)——模拟退火算法

一、模拟退火算法解TSP问题 import random import numpy as np from math import e, exp import matplotlib.pyplot as plt# 31个城市的坐标 city_loc [(1304, 2312), (3639, 1315), (4177, 2244), (3712, 1399), (3488, 1535),(3326, 1556), (3238, 1229), (4196, 1004), (4…

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别

一、概念 阻塞赋值&#xff1a;阻塞赋值的赋值号用“”表示&#xff0c;对应的是串行执行。 对应的电路结构往往与触发沿没有关系&#xff0c;只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作&#xff0c;即计算赋值号右边的语句并更新赋值号左边的语句…

如何将mp4格式的视频压缩更小 mp4格式视频怎么压缩最小 工具软件分享

在数字化时代&#xff0c;视频内容成为信息传播的重要载体。然而&#xff0c;高清晰度的视频往往意味着较大的文件体积&#xff0c;这给存储和分享带来了一定的困扰。MP4格式作为目前最流行的视频格式之一&#xff0c;其压缩方法尤为重要。下面&#xff0c;我将为大家详细介绍如…

力扣高频SQL 50题(基础版)第六题

文章目录 1378. 使用唯一标识码替换员工ID题目说明思路分析实现过程结果截图总结 1378. 使用唯一标识码替换员工ID 题目说明 Employees 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ------…

自监督学习在言语障碍及老年语音识别中的应用

近几十年来针对正常言语的自动语音识别&#xff08;ASR&#xff09;技术取得了快速进展&#xff0c;但准确识别言语障碍&#xff08;dysarthric&#xff09;和老年言语仍然是一项极具挑战性的任务。言语障碍是一种由多种运动控制疾病引起的常见言语障碍类型&#xff0c;包括脑瘫…

Elasticsearch基础(六):使用Kibana Lens进行数据可视化

文章目录 使用Kibana Lens进行数据可视化 一、进入Kibana Lens 二、基础可视化 1、指标可视化 2、垂直堆积条形图 3、表格 三、高级可视化 1、多图层和索引 2、子桶 3、树状图 使用Kibana Lens进行数据可视化 一、进入Kibana Lens 在Kibana主页&#xff0c;单击页面…

中文分词库 jieba 详细使用方法与案例演示

1 前言 jieba 是一个非常流行的中文分词库&#xff0c;具有高效、准确分词的效果。 它支持3种分词模式&#xff1a; 精确模式全模式搜索引擎模式 jieba0.42.1测试环境&#xff1a;python3.10.9 2 三种模式 2.1 精确模式 适应场景&#xff1a;文本分析。 功能&#xff1…

OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介

OpenAI从GPT-4V到GPT-4O&#xff0c;再到GPT-4OMini简介 一、引言 在人工智能领域&#xff0c;OpenAI的GPT系列模型一直是自然语言处理的标杆。随着技术的不断进步&#xff0c;OpenAI推出了多个版本的GPT模型&#xff0c;包括视觉增强的GPT-4V&#xff08;GPT-4 with Vision&…

【接口自动化_07课_Pytest+Excel+Allure完整框架集成_下】

目标&#xff1a;优化框架场景 1. 生成对应的接口关联【重点】 2. 优化URL基础路径封装【理解】 3. 利用PySQL操作数据库应用【理解】--- 怎么用python连接数据库、mysql 4. 通过数据库进行数据库断言【重点】 5. 通过数据库进行关联操作【重点】 一、接口关联&#xff1a…

深入浅出mediasoup—协议交互

本文主要分析 mediasoup 一对一 WebRTC 通信 demo 的协议交互&#xff0c;从协议层面了解 mediasoup 的设计与实现&#xff0c;这是深入阅读 mediasoup 源码的重要基础。 1. 时序图 下图是 mediasoup 客户端-服务器协议交互的总体架构&#xff0c;服务器是一个 Node.js 进程加…

Django学习第一天(如何创建和运行app)

前置知识&#xff1a; URL组成部分详解&#xff1a; 一个url由以下几部分组成&#xff1a; scheme&#xff1a;//host:port/path/?query-stringxxx#anchor scheme:代表的是访问的协议&#xff0c;一般为http或者ftp等 host&#xff1a;主机名&#xff0c;域名&#xff0c;…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(三)基变换与坐标变换;微分方程;李群和李代数;雅可比矩阵

一、基变换与坐标变换 字小,事不小。 因为第一反应:坐标咋变,坐标轴就咋变呀。事实却与我们想象的相反。这俩互为逆矩阵。 第一次读没有读明白,后面到事上才明白。 起因是多传感器标定:多传感器,就代表了多个坐标系,多个基底。激光雷达和imu标定。这个标定程序,网上,…

秒杀优化: 记录一次bug排查

现象 做一人一单的时候&#xff0c;为了提升性能&#xff0c;需要将原来的业务改造成Lua脚本加Stream流的方式实现异步秒杀。 代码改造完成&#xff0c;使用Jmeter进行并发测试&#xff0c;发现redis中的数据和预期相同&#xff0c;库存减1&#xff0c;该用户也成功添加了进去…

HarmonyOS鸿蒙应用开发-ZRouter让系统路由表变得更简单

介绍 ZRouter是基于Navigation系统路由表和Hvigor插件实现的动态路由方案。 系统路由表是API 12起开始支持的&#xff0c;可以帮助我们实现动态路由的功能&#xff0c;其目的是为了解决多个业务模块&#xff08;HAR/HSP&#xff09;之间解耦问题&#xff0c;从而实现业务的复…

NoSQL之Redis非关系型数据库

目录 一、数据库类型 1&#xff09;关系型数据库 2&#xff09;非关系型数据库 二、Redis远程字典服务器 1&#xff09;redis介绍 2&#xff09;redis的优点 3&#xff09;Redis 为什么那么快&#xff1f; 4&#xff09;Redis使用场景 三、Redis安装部署 1&#xff0…

社交圈子小程序搭建-源码部署-服务公司

消息通知:当有新的消息、评论或回复时&#xff0c;用户需要收到系统的推送通知&#xff0c;以便及时查看和回复 活动发布与参加:用户可以在社交圈子中发布各种类型的活动&#xff0c;如聚餐、旅游、运动等。其他用户可以参加这些活动&#xff0c;并与组织者进行交流和沟通 社交…