OpenStack镜像管理与制作

一、OpenStack镜像服务

1、什么是镜像

  • 镜像通常是指一系列文件或一个磁盘驱动器的精确副本
  • 虚拟机所使用的虚拟磁盘,实际上是一种特殊格式的镜像文件。
  • 云环境下尤其需要镜像。
  • 镜像就是一个模板,类似于VMware的虚拟机模板,其预先安装基本的操作系统和其他应用软件。
  • OpenStack中的镜像就是虚拟机镜像,是包含有可启动的操作系统的虚拟机实例磁盘的单个文件。

2、什么是镜像服务

  • 镜像服务就是用来管理镜像的,用途就是让用户能够发现、获取和保存镜像。
  • OpenStack中提供镜像服务的是Glance项目,其功能有:
  • 查询和获取镜像的元数据和镜像本身
  • 注册和上传虚拟机镜像,包括镜像的创建、下载和管理。
  • 维护镜像信息,包括镜像的元数据和镜像本身。
  • 支持多种方式存储镜像
  • 对虚拟机实例执行创建快照命令来创建新的镜像,或备份虚拟机实例的状态
  • Glance是关于镜像的中心,可以被终端用户或Nova计算服务访问,接受磁盘或镜像的API请求,定义镜像元数据的操作

3、Glance架构

Glance不负责实际存储,只实现镜像管理功能,功能单一,包含组件较少。

  1. 客户端:Glance服务的使用者
  2. glance-api:系统后台运行的服务进程,是Glance服务的入口,对外提供REST API,负责接受来自客户端的RESTful请求,响应镜像查询、获取和存储的调用
    1. 与镜像本身存取相关操作,glance-api会将请求转发给该镜像的存储后端,由后端提供相应操作。
    2. 与镜像的元数据相关操作,glance-api会直接操作数据库,存取镜像的元数据(大小、类型等信息)
  3. 数据库:Glance的数据库模块用于存储镜像的元数据,可以选用MySQL、MariaDB等
  4. 存储后端:Glance服务本身不存储镜像文件,而是将文件存放在后端存储系统中。例如:
    • 本地文件存储(或任何挂载到glance-api控制节点的文件系统):默认配置
    • 对象存储:Swift
    • RADOS块设备(RBD)
    • Sheepdog:一个分布式存储系统,为QEMU提供块存储服务,为支持互联网SCSI协议的客户端提供存储服务,同时支持RESTful接口的对象存储服务。
    • 块存储:Cinder
    • VMware数据存储

4、验证OpenStack的Glance服务

4.1、查看Glance配置文件

 [root@node-a ~]# cd /etc/glance[root@node-a glance]# lsglance-api.conf         # Glance API服务器配置文件          glance-registry.conf     metadefs       rootwrap.dglance-cache.conf       # 定义镜像缓存配置        glance-scrubber.conf    # 定义镜像删除相关配置policy.json             # 镜像服务的策略配置文件schema-image.jsonglance-image-import.conf  glance-swift.conf     rootwrap.conf

4.2、验证Glance服务

 # 查看当前运行的Glance服务[root@node-a glance]# systemctl status *glance*.service● openstack-glance-api.service - OpenStack Image Service (code-named Glance) API serverLoaded: loaded (/usr/lib/systemd/system/openstack-glance-api.service; enabled; vendor preset: disabled)Active: active (running) since Tue 2024-04-09 14:23:29 CST; 6 days ago...​● openstack-glance-registry.service - OpenStack Image Service (code-named Glance) Registry serverLoaded: loaded (/usr/lib/systemd/system/openstack-glance-registry.service; enabled; vendor preset: disabled)Active: active (running) since Tue 2024-04-09 14:23:29 CST; 6 days ago...

Glance有两个子服务。glance-registry是系统后台 运行的Glance注册服务进程,负责处理与镜像源数据相关的RESTful请求。从Queens版本开始弃用,这里为了兼容早期版本。

4.3、使用镜像服务的API

请求一个admin项目作用域的令牌

[root@node-a ~]# curl -i   -H "Content-Type: application/json"   -d '{ "auth": {"identity": {          "methods": ["password"],"password": {      "user": {"name": "admin","domain": { "id": "default" },"password": "admin账号的密码"}}},"scope": {                     "project": {                  "name": "admin","domain": { "id": "default" }}}}}'   "http://localhost:5000/v3/auth/tokens" ;

导出环境变量OS_TOKEN,并将其设置为上述操作获取的令牌ID,尝试通过Images API v1获取当前镜像列表 

[root@node-a ~]# export OS_TOKEN="上述获取到的TOKEN"[root@node-a ~]# curl -s -H "X-Auth-Token: $OS_TOKEN"   http://localhost:9292/v1/images

v1无法使用,要求使用Image API v2

[root@node-a ~]# curl -s -H "X-Auth-Token: $OS_TOKEN"   http://localhost:9292/v2/images

通过认证令牌向本地运行的服务(端口9292)发起请求,获取关于镜像的信息,然后通过管道将这些信息传递给Python的json.tool模块,格式化输出JSON数据。 

[root@node-a ~]# curl -s -H "X-Auth-Token: $OS_TOKEN"   http://localhost:9292/v2/images | python -mjson.tool

二、管理OpenStack镜像

1、虚拟机镜像的磁盘格式和容器格式

1.1、虚拟机镜像的磁盘格式

磁盘格式说明
.raw无结构的磁盘格式
.vhdVHD磁盘格式。该格式通用于VMware、Xen、Microsoft、VirtualBox以及其他虚拟机实例管理程序
.vhdxVHDX磁盘格式。VHD格式的增强版本,支持更大的磁盘尺寸
.vmdk另一种比较通用的虚拟机实例磁盘格式
.vdi由VirtualBox虚拟机实例监控程序和QEMU仿真器支持的磁盘格式
.iso用于光盘(如CD-ROM)数据内容的档案格式
.ploop由Virtuozzo支持,用于运行OS容器的磁盘格式
.qcow2由QEMU仿真器支持,可动态扩展,支持写时复制(Copy on Write)的磁盘格式
.aki在Glance中存储的Amazon内核格式
.ari在Glance中存储的Amazon虚拟内存盘(Ramdisk)格式
.ami在Glance中存储的Amazon虚拟机实例格式

1.2、虚拟机镜像的容器格式

容器格式说明
.bare没有容器或元数据封头的镜像
.ovf开放虚拟化格式(Open Virtualization Format)
.ova开放虚拟化设备格式(Open Virtualization Appliance Format)
.aki在Glance中存储的Amazon内核格式
.ari在Glance中存储的Amazon虚拟内存盘(Ramdisk)格式
.ami在Glance中存储的Amazon机器格式
.docker在Glance中存储的容器文件系统的Docker的tar档案
.compressed未指定压缩文件的精确格式。特定的OpenStack服务可能支持特定的格式。可以假定任何使用这种压缩容器格式镜像创建的OpenStack服务能够使用这种镜像

2、镜像的状态

3、镜像的访问权限

  • Public(公共的):可以被所有的项目使用。
  • Private(私有的):只能被镜像所有者所在的项目使用。
  • Shared(共享的):一个非共有的镜像可以共享给其他项目。
  • Protected(受保护的):镜像不能被删除。

4、镜像的元数据

  • 镜像的元数据即镜像属性,提供关于由镜像服务所存储的虚拟磁盘的信息
  • 元数据作为与镜像数据关联的镜像记录的一部分由镜像服务存储。
  • 相关的OpenStack组件和驱动通过镜像元数据与镜像服务交互。
  • 元数据定义服务提供了一个通用的API来自定义可用的键值对元数据。

5、命令行的镜像管理方法

5.1、查看镜像(语法)

 # 查看已有的镜像列表,查询结果包括镜像的ID和名称,以及状态openstack image list# 查看镜像详细信息openstack image show 镜像名称或ID# 创建镜像openstack image create [选项] 镜像名称# 更改镜像openstack image set  [选项]  镜像名称# 取消镜像更改openstack image unset  [选项]  镜像名称# 删除镜像openstack image delete  <镜像名称或ID># 将镜像与项目关联openstack image add project  [--project-domain 项目所属域]  镜像名或ID  项目名或ID# 将镜像与项目解除关联openstack image remove project  [--project-domain 项目所属域]  镜像名或ID  项目名或ID

6、实操

6.1、获取镜像

FDO官网: Image resources — RDO (rdoproject.org)

OpenStack官网: CentOS Cloud images

6.2、查看镜像

普通云用户一般通过Web图形界面来使用镜像

  • 镜像列表-demo:

  • 镜像详细信息:

测试时使用命令行工具查看镜像:                                                

6.3、创建镜像

将下载的镜像通过xftp工具上传到虚拟机中的Downloads文件夹下:

本例下载的文件是CentOS-7-x86_64-GenericCloud-2003.qcow2.xz,这是一个.xz格式的压缩包,需要先解压缩才能使用。

 [root@node-a ~]# yum install xz     # 解压缩工具​# 执行命令将下载的镜像压缩包解压缩[root@node-a ~]# xz -d /root/Downloads/CentOS-7-x86_64-GenericCloud-2003.qcow2.xz​# 加载云管理员admin的环境脚本,以admin用户身份进行操作[root@node-a ~]# source keystonerc_admin​# 向OpenStack云上传一个.qcow2格式的CentOS 7镜像并进行注册。[root@node-a ~(keystone_admin)]# openstack image create --disk-format qcow2 --container-format bare   --public --file ~/Downloads/CentOS-7-x86_64-GenericCloud-2003.qcow2 centos7​# 查看镜像列表(可以看到新建成功[root@node-a ~(keystone_admin)]# openstack image list+--------------------------------------+---------+--------+| ID                                   | Name    | Status |+--------------------------------------+---------+--------+| c6cb27d8-4d93-427d-b67a-af6349dab979 | centos7 | active || 3669a079-518f-4cb5-b1c1-677dad16096e | cirros  | active || 190b8365-19bc-43a1-8314-e8139d5d8be6 | fedora  | active |+--------------------------------------+---------+--------+​# 查看刚刚新建的centos7镜像的详细信息[root@node-a ~(keystone_admin)]# openstack image show centos7

6.4、管理镜像

Web图形界面管理镜像

  • 镜像管理操作界面:

  • 编辑镜像界面:

  • 编辑镜像的元数据界面:

命令行工具为镜像设置元数据

  • 创建镜像的openstack image create命令修改镜像的openstack image set命令中,通过--property选项以键值对的形式定义元数据。

 # 通过元数据设置将“fedora”镜像的架构(architecture)设置为x86_64、Hypervisor_type类型设置为qemu。[root@node-a ~(keystone_admin)]# openstack image set --property architecture=x86_64 --property hypervisor_type=qemu fedora
  • #OpenStack镜像通用的镜像元数据在/etc/glance/schema-image.json 配置文件中定义。

6.5、转换镜像格式

使用qemu-img工具的convert子命令将镜像从一种格式转换为另一种格式。

 # 格式qemu-img  convert  [-f 源格式] [-O 目标格式]  [-o 选项] 源文件路径 目标文件路径
# 将.raw格式的cirros镜像转换为.qcow2格式的镜像
[root@node-a ~]# qemu-img convert -f raw -O qcow2 ~/Downloads/cirros-0.5.1-x86_64-disk.img ~/Downloads/cirros-0.5.1-x86_64-disk.qcow2

三、基于预制镜像定制OpenStack镜像

1、cloud-init

  • cloud-init是一组Python脚本的集合,是一个能够定制云镜像的实用工具。
  • 通过修改/etc/cloud/cloud.cfg配置文件来实现
  • cloud-init一般会被包含在用于启动虚拟机实例的镜像文件中。
  • 基于镜像部署虚拟机实例,cloud-init会随虚拟机实例的启动自动启动,对虚拟机实例进行自定义的初始配置。
  • cloud-init目前支持Ubuntu、Fedora、Debian、RHEL、CentOS等主流的Linux操作系统发行版。

2、实例快照

  • 快照(Snapshots)是一种基于时间点的数据备份技术,能够记录某一个时刻的数据信息并将其保存,以便在需要时将数据恢复到之前时间点的状态
  • OpenStack中为虚拟机实例生成的快照抓取实例正在运行的磁盘的状态,其实是一个完整的镜像,由Glance镜像服务管理。

3、基于预制镜像定制镜像的方法

四、使用自动化工具制作OpenStack镜像

1、Diskimage-builder工具

  • Diskimage-builder简称DIB,是OpenStack的官方项目。
  • DIB主要用于构建适用于OpenStack平台的操作系统镜像。
  • Diskimage-builder的镜像生成原理
    • 将最初启动虚拟机实例时安装操作系统完成后的镜像保存为基础镜像。
    • 将该基础镜像挂载到本地。
    • chroot到根分区。
    • 根据不同的定制需要增加不同的模块。

    • 安装完成后保存为特定格式的镜像文件。

  • 使用Diskimage-builder首次制作某操作系统镜像时需要从网上下载该操作系统的基础镜像文件,后面再制作同一版本的镜像时,可直接使用镜像缓存文件。

2、其他自动化镜像生成工具

  • Oz:自动化生成虚拟机镜像文件的命令行工具。
  • Packer:从单个源配置构建多种平台的虚拟机镜像的工具。
  • image-bootstrap:生成可启动的虚拟机镜像的命令行工具。
  • imagefactory:可以自动构建、转换和上传镜像到不同的云提供商的新型工具。
  • KIWI:操作系统镜像构建器,支持多种Linux硬件平台、虚拟化和云系统的操作系统镜像构建。
  • virt-builder:快速构建虚拟机镜像的工具。

3、实操

3.1、安装Diskimage-builder

[root@node-a ~]# python							# 1、检查python环境
Python 2.7.5 (default, Nov 14 2023, 16:14:06) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[root@node-a ~]# pip -y install epel-release	# 2、安装epel扩展源
[root@node-a ~]# yum -y install python-pip		# 3、安装pip工具
[root@node-a ~]# yum -y install qemu-img kpartx	# 4、安装支持环境
[root@node-a ~]# pip install --upgrade "pip < 20.0"	# 5、升级pip工具
[root@node-a ~]# pip install  "diskimage-builder==2.2.0"	# 6、安装Diskimage-builder
[root@node-a ~]# disk-image-create --version	# 检查是否安装完成,输出版本
2.2.0

3.2、使用Diskimage-builder自动构建Ubuntu操作系统镜像

  • 设置相关的环境变量

    [root@node-a ~]# export DIB_DEV_USER_USERNAME=ubuntu      #初始用户名
    [root@node-a ~]# export DIB_DEV_USER_PASSWORD=ubuntu      #初始用户密码
    [root@node-a ~]# export DIB_DEV_USER_PWDLESS_SUDO=YES   #为用户启用无密码sudo
    [root@node-a ~]# export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"     #cloud-init的源是ConfigDrive和OpenStack
  • 构建镜像

    [root@node-a ~]# disk-image-create -a amd64 -t qcow2 -o ubuntu.qcow2 ubuntu vm  cloud-init-datasources devuser
    ...
    2024-04-16 17:12:19.949 INFO diskimage_builder.block_device.blockdevice [-] Removing temporary dir [/tmp
    Converting image using qemu-img convert
    Image file ubuntu.qcow2 created...	# 创建完成
    ...
  • 检查所生成的镜像文件

    [root@node-a ~]# ls ubuntu.qcow2 -l
    -rw-r--r-- 1 root root 537329664 Apr 16 17:13 ubuntu.qcow2
  • 开始测试,将该镜像上传到OpenStack云中并查看

    [root@node-a ~]# source keystonerc_demo
    [root@node-a ~(keystone_demo)]# openstack image create --disk-format qcow2 --file ubuntu.qcow2 ubuntu
    ...
    # 查看,可以发现上传镜像成功
    [root@node-a ~(keystone_demo)]# openstack image list
    +--------------------------------------+---------+--------+
    | ID                                   | Name    | Status |
    +--------------------------------------+---------+--------+
    | c6cb27d8-4d93-427d-b67a-af6349dab979 | centos7 | active |
    | 3669a079-518f-4cb5-b1c1-677dad16096e | cirros  | active |
    | 190b8365-19bc-43a1-8314-e8139d5d8be6 | fedora  | active |
    | bfe8eb08-3da7-4af7-a7ed-b13fa2978e90 | ubuntu  | active |
    +--------------------------------------+---------+--------+

五、手动创建OpenStack镜像

手动制作镜像是最符合实际使用需求的,需要定制什么样的镜像都可以由自己来决定,只是过程比较烦琐。这种方式仅适合开发人员,或小规模的应用

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

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

相关文章

MySql数据库从0-1学习-第五天事务和索引

事务 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作 要么同时成功&#xff0c;要么同时失败。 注意事项,默认事务是自动提交的,也就是说,当执行一条DML语句,MySql会立即隐…

计算机网络的七层模型

序 OSl(Open System Interconnect)&#xff0c;即开放式系统互联。一般都叫OSI参考模型。在网络编程中最重要的模型就是OSI七层网络模型和TCP/IP四层网络模型 一、OSI七层参考模型以及功能概述 二、各层的具体职能以及实际应用 1.应用层&#xff1a; OSI参考模型中最接近用…

【高端电流检测IC储能产品应用方案】耐压45V侧轨的电流检测芯片FP137 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等

近年来&#xff0c;随着电子产品的飞速发展&#xff0c;对电流检测精度和可靠性的要求也越来越高。特别是在电脑电源、开关电源以及多口快充充电器、户外移动电源、适配器、电池充电器等领域&#xff0c;对电流检测技术的需求更是日益增长。 电流检测芯片是一种关键的电子元器…

day02|最小花费爬梯子

最小花费爬梯子 比如 有一个数组 【2 5 20】我们直接选择从1号梯子&#xff08;从零编号&#xff09;跳两格就出去了。 算法原理 我们可以得出楼顶其实是数组的最后一个元素的下一个位置。对于最值问题我们可以尝试使用dpdp我们首先应该定义状态方差的含义&#xff0c;一般以…

stm32实现hid鼠标

启动CubelMX 选择芯片&#xff08;直接输入stm32f103zet6) 设置时钟 如下图 usb设置 配置usb设备 调试端口设置 配置时钟 项目输出设置 打开工程&#xff08;后记&#xff1a;此工程含有中文不能编译通过) 配置项目 配置调试器 编译无法通过 删除路径中的中文&#xff0c;以及…

[大模型]InternLM2-7B-chat Xtuner Qlora 微调

InternLM2-7B-chat Xtuner Qlora 微调 Xtuner介绍 XTuner是上海人工智能实验室开发的低成本大模型训练工具箱&#xff0c;XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。只要8G。最低只需 8GB 显存&#xff0c;就可以微调InternLM2-7B模型&#xff0c;打造专属于你…

强强联手|AI赋能智能工业化,探索AI在工业领域的应用

随着人工智能&#xff08;AI&#xff09;技术的不断发展和应用&#xff0c;AI在各个领域展现出了巨大的潜力和价值。在工业领域&#xff0c;AI的应用也越来越受到关注。AI具备了丰富的功能和强大的性能&#xff0c;为工业领域的发展带来了巨大的机遇和挑战。 YesPMP是专业的互联…

复习回顾ES6基础篇(一小时学会es6)

基本语法 多行注释 /* 这里的所有内容 都是注释。 */单行注释 // 这是一条注释。变量定义 var x "" //定义范围变量 let y "" //定义局部变量 const z "" //定义常量运算符 变量类型 流程语句 if (condition) {/* 条件为真时运行的代…

【位运算 子集状态压缩】982按位与为零的三元组

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

案例研究|众乐邦将MeterSphere持续测试平台融入DevOps流水线

众乐邦网络科技有限公司&#xff08;以下简称为“众乐邦”&#xff09;是一家企业服务公司。其旗下的众乐邦灵活用工数字化薪税管理平台&#xff08;以下简称为灵活用工管理平台&#xff09;&#xff0c;以财税服务视角切入灵活用工场景&#xff0c;连接企业、灵活就业者和监管…

力扣:141. 环形链表

力扣&#xff1a;141. 环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾…

一个文生视频MoneyPrinterTurbo项目解析

最近抖音剪映发布了图文生成视频功能,同时百家号也有这个功能,这个可以看做是一个开源的实现,一起看看它的原理吧~ 一句话提示词 大模型生成文案 百家号生成视频效果 MoneyPrinterTurbo生成视频效果 天空为什么是蓝色的? 天空之所以呈现蓝色,是因为大气中的分子和小粒子会…

35、链表-LRU缓存

思路&#xff1a; 首先要了解LRU缓存的原理&#xff0c;首先定下容量&#xff0c;每次get请求和put请求都会把当前元素放最前/后面&#xff0c;如果超过容量那么头部/尾部元素就被移除&#xff0c;所以最近最少使用的元素会被优先移除&#xff0c;保证热点数据持续存在。 不管放…

鸿蒙画布组件使用介绍

一、前言 DevEco Studio版本&#xff1a;4.0.0.600 前些天写了一篇 鸿蒙自定义控件实现罗盘数字时钟效果 的文章&#xff0c;有同学私信说能不能介绍鸿蒙中的画布组件&#xff0c;下面文章介绍下鸿蒙中的Canvas画布、CanvasRenderingContext2D绘制组件&#xff0c;实现绘制文…

股票市场预测模型:未来趋势的智能分析工具

&#x1f4c8; 股票市场预测模型&#xff1a;未来趋势的智能分析工具 &#x1f911; &#x1f3e6; 概述 在这个充满变数的股票市场中&#xff0c;投资者需要一个强大的工具来预测未来的价格走势。我们的机器学习模型旨在通过分析历史数据&#xff0c;为投资者提供科学的市场…

03.卸载MySQL

卸载MySQL 1.Windows卸载MySQL8 停止服务 用命令停止或者在服务中停止都可以 net stop mysql&#xff08;服务名字可以去服务里面看一下&#xff09;控制面板卸载MySQL 卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在控制面板选择卸载程序&#xff0c;并在程序列表中…

转换为elementUI提示方法为uni-app的showToast提示

// 转换为elementUI提示方法为uni-app的showToast提示---------------------------------------- // 一般提示 Vue.prototype.$message function(title) {title && uni.showToast({icon: none,title}); }; // 成功提示 Vue.prototype.$message.success (title) > …

无效的标记: --release

maven编译项目时候出现&#xff1a;无效的标记: --release 项目背景 介绍一下项目背景&#xff1a; java17 SpringBoot&#xff1a;3.2.0 SpringCloud&#xff1a; 2023.0.0 之前一直用java8开发项目 问题原因 maven所使用的jdk版本和idea所使用的jdk版本不一致导致的。…

客诉技术架构:构建客户满意的数字化支持系统

随着数字化时代的到来&#xff0c;客户体验已经成为企业竞争的关键因素之一。而客诉技术架构作为支持客户服务和解决问题的关键系统&#xff0c;对于企业提升客户满意度和品牌声誉具有重要意义。本文将深入探讨客诉技术架构的重要性、关键要素以及如何构建一个有效的客户支持系…

微服务之网关路由

一、概述 1.1认识网关 什么是网关&#xff1f; 顾明思议&#xff0c;网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。 更通俗的来讲&#xff0c;网关就像是以前园区传达室的大爷。 外…