【KVM虚拟化】· virsh管理命令
目录
🍁libvirt架构概述
🍁使用virsh管理虚拟机
🍂常用命令总结
🍁kvm基本功能管理
🍂帮助命令
🍂KVM的配置文件存放目录
🍂查看虚拟机状态
🍂虚拟机关机与开机
🍂强制虚拟机系统关闭电源
🍂通过配置文件启动虚拟机系统
🍂挂起虚拟机
🍂恢复虚拟机
🍂设置虚拟机自启
🍂导出虚拟机配置
🍂删除和导入虚拟机
🍂修改虚拟机配置文件
🍂查看虚拟机信息
🍂连接虚拟机
🍂虚拟机克隆
🍃查看虚拟机状态
🍃克隆虚拟机
🍃查看状态并启动
🍁虚拟机快照
🍃对虚拟机拍摄快照
🍃查看快照详细信息
🍃恢复快照
🍃删除快照
🦐博客主页:大虾好吃吗的博客
🦐专栏地址:KVM虚拟化专栏
libvirt架构概述
libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:libvirt API,libvirtd进程和virsh工具集三部分。最初的目的是为不同的hypervisor提供统一的管理接口。
libvirtd该后台进程主要实现以下功能:
(1)远程代理所有remote client发送来的命令,由该进程监测执行
(2)本地环境初始化libvirt服务的启停,用户connection的响应等
(3)根据环境注册各种Driver(qemu, xen, storage…)的实现不同虚拟化技术以Driver的形式实现,由于libvirt对外提供的是统一的接口,所以各个Driver就是实现这些接口,即将Driver注册到libvirt中。
查看libvirtd服务状态
如果libvirtd服务停止运行,那么你将不能管理虚拟机,也就是不能使用virt-manager等工具来管理虚拟机。
[root@localhost ~]# systemctl status libvirtd
查看配置文件
虚拟机的所有配置是放置在一个xml文件中,位置在/etc/libvirt/qemu/目录中
[root@localhost ~]# ll /etc/libvirt/qemu
total 8
-rw------- 1 root root 3325 Apr 20 23:29 myvm01.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
可以看到创建的2个虚拟机,libvirt的xml文件分为几个重要部分,整体结构如下:
<domain type='kvm'>
虚拟机整体信息
系统信息
硬件资源特性
突发事件处理
虚拟磁盘(单个或多个)
虚拟光盘(可选)
虚拟网络(单个或多个)
vnc/spice 配置
</domain>
使用virsh管理虚拟机
virsh是使用libvirt management API构建的管理工具,virsh的名称的含义是virtualization shell。它有两种工作模式:
立即模式
[root@localhost ~]# virsh list --allId Name State
----------------------------------------------------3 myvm02 running4 myvm01 running
交互模式
[root@localhost ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands'quit' to quit
virsh # list --allId Name State
----------------------------------------------------3 myvm02 running4 myvm01 running
常用命令总结
| 命令 | 描述 |
|---|---|
| attach-device | 使用XML文件中的设备定义在虚拟机中添加设备 |
| attach-disk | 在虚拟机中附加新磁盘设备 |
| attach-interface | 在虚拟机中附加新网络接口 |
| create | 在XML配置文件生成虚拟机并启动新虚拟机 |
| define | 为虚拟机输出XML配置文件 |
| destroy | 强制关闭虚拟机 |
| detach-device | 从虚拟机中分离设备,使用同样的XML描述作为命令attach-device |
| detach-disk | 从虚拟机中分离磁盘设备 |
| detach-interface | 从虚拟机中分离网络接口 |
| domblkstat | 显示正在运行的虚拟机的块设备统计 |
| domid | 显示虚拟机id |
| domifstat | 显示正在运行的虚拟机的网络接口统计 |
| dominfo | 显示虚拟机信息 |
| domname | 显示虚拟机名称 |
| domstate | 显示虚拟机状态 |
| domuuid | 显示虚拟机uuid |
| dumpxml | 输出虚拟机XML配置文件 |
| help | 显示帮助命令 |
| list | 列出所有虚拟机 |
| migrate | 列出虚拟机迁移到两外一台主机中 |
| nodeinfo | 有关管理程序的输出信息 |
| quit | 退出交互终端 |
| reboot | 重启虚拟机 |
| restore | 恢复以前保存在文件中的虚拟机 |
| resume | 恢复暂停的虚拟机 |
| save | 将虚拟机当前状态保存到某个文件中 |
| setmaxmem | 为管理程序设定内存上限 |
| setmem | 为虚拟机设定分配的内存 |
| setvcpus | 修改为虚拟机分配的虚拟cpu数量 |
| shutdown | 关闭虚拟机 |
| undefine | 删除与虚拟机关联的所有文件 |
| vcpuinfo | 显示虚拟机的虚拟cpu信息 |
| vcpupin | 控制虚拟机的虚拟cpu亲和性 |
| version | 显示virsh版本 |
| start | 启动未激活的虚拟机 |
| suspend | 暂停虚拟机 |
kvm基本功能管理
为了区分主机及虚拟机,这里把主机改名为kvmserver
帮助命令
[root@kvmserver ~]# virsh -h
KVM的配置文件存放目录
[root@kvmserver ~]# ll /etc/libvirt/qemu
total 8
-rw------- 1 root root 3325 Apr 20 23:29 myvm01.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
查看虚拟机状态
list只能查看启动状态下的虚拟机,加参数--all可以查看全部虚拟机,但未启动的虚拟机不会有id。
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------5 myvm01 running- myvm02 shut off
虚拟机关机与开机
通过上面查看的虚拟机状态,这里把myvm01关闭,myvm02开启。
[root@kvmserver ~]# virsh shutdown myvm01
Domain myvm01 is being shutdown
[root@kvmserver ~]# virsh start myvm02
Domain myvm02 started
强制虚拟机系统关闭电源
当虚拟机出现故障,通过上面温柔的关机方式,无法关闭时。这时你就需要用到暴力(拔电源)关机了,这种方式关机速度快,但是不推荐!!!
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------6 myvm02 running- myvm01 shut off[root@kvmserver ~]# virsh destroy myvm02
Domain myvm02 destroyed[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------- myvm01 shut off- myvm02 shut off
通过配置文件启动虚拟机系统
启动方式不止start一种,也可以通过启动配置文件来开启虚拟机。
[root@kvmserver ~]# virsh create /etc/libvirt/qemu/myvm01.xml
Domain myvm01 created from /etc/libvirt/qemu/myvm01.xml[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------7 myvm01 running- myvm02 shut off
挂起虚拟机
当虚拟机暂时不使用时,可以通过挂起保存当前的状态。当查看虚拟机的状态是,可以看到虚拟机的状态为被挂起。需要注意的是,挂起时的虚拟机必须为启动状态。
[root@kvmserver ~]# virsh suspend myvm01
Domain myvm01 suspended[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------7 myvm01 paused- myvm02 shut off
恢复虚拟机
恢复挂起状态下的主机
[root@kvmserver ~]# virsh resume myvm01
Domain myvm01 resumed[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------7 myvm01 running- myvm02 shut off
设置虚拟机自启
设置虚拟机随宿主机开启而开启,执行创建命令时在/etc/libvirt/qemu/autostart/目录里面创建开机自启的系统文件链接。
[root@kvmserver ~]# virsh autostart myvm01
Domain myvm01 marked as autostarted[root@kvmserver ~]# cd /etc/libvirt/qemu/autostart/
[root@kvmserver autostart]# ls
myvm01.xml
[root@kvmserver autostart]# virsh list --autostartId Name State
----------------------------------------------------7 myvm01 running[root@kvmserver autostart]# virsh autostart --disable myvm01
Domain myvm01 unmarked as autostarted[root@kvmserver autostart]# virsh list --autostartId Name State
----------------------------------------------------
导出虚拟机配置
下面命令是备份虚拟机myvm01,路径还是放qemu目录下。
[root@kvmserver ~]# virsh dumpxml myvm01 > /etc/libvirt/qemu/myvm01_bak.xml
删除和导入虚拟机
删除虚拟机前需要先关闭虚拟机,让虚拟机处于关机状态。需要注意的是,上面已经备份了myvm01的虚拟机,如果没有备份,建议先备份,以便后面的导入操作。
[root@kvmserver ~]# virsh shutdown myvm01
Domain myvm01 is being shutdown[root@kvmserver ~]# virsh undefine myvm01
Domain myvm01 has been undefined
查看删除结果,虽然文件myvm01.xml被删除了,但是不会删除磁盘文件。通过list命令查看已经没有myvm01虚拟机了。
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------- myvm02 shut off[root@kvmserver ~]# ll /etc/libvirt/qemu
total 8
drwxr-xr-x 2 root root 6 Apr 21 05:04 autostart
-rw-r--r-- 1 root root 4061 Apr 21 05:10 myvm01_bak.xml
-rw------- 1 root root 3325 Apr 20 23:30 myvm02.xml
drwx------. 3 root root 42 Apr 17 04:32 networks
通过备份的配置文件重新定义虚拟机
[root@kvmserver ~]# mv /etc/libvirt/qemu/myvm01_bak.xml /etc/libvirt/qemu/myvm01.xml
[root@kvmserver ~]# virsh define /etc/libvirt/qemu/myvm01.xml
Domain myvm01 defined from /etc/libvirt/qemu/myvm01.xml[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------- myvm01 shut off- myvm02 shut off
修改虚拟机配置文件
通过vim命令直接对配置文件修改
[root@kvmserver ~]# vim /etc/libvirt/qemu/myvm01.xml
通过edit命令直接对虚拟修改
[root@kvmserver ~]# virsh edit myvm01
查看虚拟机信息
[root@kvmserver ~]# virsh dominfo myvm01
Id: -
Name: myvm01
UUID: 59727769-f3a3-418c-936b-8bf4191c766a
OS Type: hvm
State: shut off
CPU(s): 1
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
连接虚拟机
进入虚拟机后按 ctrl + ] 退出虚拟机,注意需要先启动虚拟机,等待开机完成,输入用户密码登录即可。
[root@kvmserver ~]# virsh start myvm01
Domain myvm01 started[root@kvmserver ~]# virsh console myvm01vm01 login: root
Password:
Last login: Fri Apr 21 14:18:14 on ttyS0
[root@vm01 ~]#
虚拟机克隆
查看虚拟机状态
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running- myvm02 shut off
克隆虚拟机
克隆myvm02的虚拟机,到myvm02_clong
[root@kvmserver ~]# virt-clone -o myvm02 -n myvm02_clong -f /kvm/img/vm02_clong.qcow2
Allocating 'vm02_clong.qcow2' | 8.0 GB 00:00:12 Clone 'myvm02_clong' created successfully.
参数:-o 需要克隆的虚拟机名称;-n 新虚拟机名称; -f 指定克隆到哪个文件目录并命名
查看状态并启动
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running- myvm02 shut off- myvm02_clong shut off[root@kvmserver ~]# virsh start myvm02_clong
Domain myvm02_clong started[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running9 myvm02_clong running- myvm02 shut off
虚拟机快照
快照实际上做的是虚拟机的XML配置文件,默认快照XML文件,在/var/lib/libvirt/qemu/snapshot/虚拟机名/下,快照只支持qcow2磁盘格式的系统。
对虚拟机拍摄快照
拍摄快照有两种方式,第一种是随机生成名称,第二种是指定名称,最后查看虚拟机快照,生成两个虚拟机快照。
[root@kvmserver ~]# virsh list --allId Name State
----------------------------------------------------8 myvm01 running9 myvm02_clong running- myvm02 shut off[root@kvmserver ~]# virsh snapshot-create myvm01
Domain snapshot 1682069915 created
[root@kvmserver ~]# virsh snapshot-create-as myvm01 as1
Domain snapshot as1 created
[root@kvmserver ~]# virsh snapshot-list myvm01Name Creation Time State
------------------------------------------------------------1682069915 2023-04-21 05:38:35 -0400 runningas1 2023-04-21 05:39:04 -0400 running
查看快照详细信息
[root@kvmserver ~]# virsh snapshot-current myvm01
<domainsnapshot><name>as1</name><state>running</state><parent><name>1682069915</name></parent><creationTime>1682069944</creationTime>
#省略部分内容
恢复快照
恢复myvm01虚拟机到快照1682069915
[root@kvmserver ~]# virsh snapshot-revert myvm01 1682069915[root@kvmserver ~]# virsh snapshot-current myvm01
<domainsnapshot><name>1682069915</name><state>running</state><creationTime>1682069915</creationTime> #虚拟机快照版本号<memory snapshot='internal'/>
#省略部分内容
删除快照
先查看myvm01有哪些快照,删除as1快照后查看是否删除。
[root@kvmserver ~]# virsh snapshot-list myvm01Name Creation Time State
------------------------------------------------------------1682069915 2023-04-21 05:38:35 -0400 runningas1 2023-04-21 05:39:04 -0400 running[root@kvmserver ~]# virsh snapshot-delete myvm01 as1
Domain snapshot as1 deleted[root@kvmserver ~]# virsh snapshot-list myvm01Name Creation Time State
------------------------------------------------------------1682069915 2023-04-21 05:38:35 -0400 running相关文章:
【KVM虚拟化】· virsh管理命令
目录 🍁libvirt架构概述 🍁使用virsh管理虚拟机 🍂常用命令总结 🍁kvm基本功能管理 🍂帮助命令 🍂KVM的配置文件存放目录 🍂查看虚拟机状态 🍂虚拟机关机与开机 🍂强制虚…...
JS Es6中判断b数组对象是否有跟a数组对象相同的数值(例如:id),有的话就过滤掉
如下[数组]对象a和b let a[{id:1,value:this},{id:2,value:is}] let b[{id:1,value:hello},{id:3,value:world}]filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。 some() 方法用于检测数组中的元素是否满足指定条件&#x…...
python获取某电商平台口红数据并制作词云
目录标题 前言开发环境:模块使用数据来源分析代码展示获取数据制作词云 尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 开发环境: Python 3.8 Pycharm 模块使用 requests jieba 结巴分词 wordcloud 词云 第三方模块安装: win R 输…...
阿里成立AIDC,用“增长”解题国际化
随着阿里巴巴集团2023财年年报的披露,AIDC也随即浮出了水面。 AIDC是阿里国际数字商业集团的英文简称,AIDC即Alibaba International Digital Commerce。阿里是在5月18日公布的截至2023年3月31日的2023财年Q4及全年财报,财报数据之外ÿ…...
全面理解:在计算机科学中同步、异步、并行、并发,他们之间到底有什么区别,如果正确更好的区分它们?
同步,异步,并行,并发的基础概念 在计算机中同步的基础概念 在计算机科学中,同步(Synchronization)是指在多个过程或线程中,它们的执行在时间上是有序的。换句话说,要执行一个特定的…...
9、Ray核心框架介绍
9、Ray核心框架介绍 导航 1.简介和背景 2.Ray的基本概念和核心组件 3.分布式任务调度和依赖管理 4.对象存储和数据共享 5.Actor模型和并发编程 6.Ray的高级功能和扩展性 7.使用Ray构建分布式应用程序的案例研究 8.Ray社区和资源 9.核心框架介绍 10.扩展1...
【华为OD机试python】工单调度策略【 2023 Q1 A卷|100分】
华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! ■ 题目描述 当小区通信设备上报警时,系统会自动生成待处理的工单, 工单调度系统需要根据不同的策略,调度外线工程师(FME)上站去修复工单对应的问题。 根据与运营商签订的合同,不同严重程度…...
[论文阅读72]Parameter-Efficient Transfer Learning for NLP
1. 基本信息 题目论文作者与单位来源年份Parameter-Efficient Transfer Learning for NLPNeil Houlsby等Google Research,雅盖隆大学-波兰PMLR2019 Houlsby N, Giurgiu A, Jastrzebski S, et al. Parameter-efficient transfer learning for NLP[C]//Internationa…...
0基础转行居然拿到9.5K!尘埃深处是繁花,强者从未停下!
人总是越长大越胆小,很多事情不敢做,以后就更不敢做了。 为梦想颠簸的人有很多,可能不差你这个,不如意的时候我们都会想要放弃,但是生活不是一个点,它是一条长长的线,唯有行动,才能摆…...
软考初级程序员上午单选题(13)
1、下列不能兼作输入设备和输出设备的是______。 A.可擦除型光盘 B.软盘 C.硬盘 D.键盘 2、文件型计算机病毒主要感染______。 A..TXT文件 B..GIF文件 C..EXE文件 D..MP3文件 3、_…...
【WSN覆盖】基于麻雀搜索算法的三维无线传感器网络覆盖优化 三维WSN覆盖优化【Matlab代码#26】
文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. SSA算法2. 三维覆盖模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法,获取资源请见文章第5节:资源获取】 1. SSA算法 2. 三维覆盖模型 三维覆盖模…...
【学习日记2023.5.20】 之 菜品模块完善
文章目录 3. 功能模块完善之菜品模块3.1 公共字段自动填充3.1.1 问题分析3.1.2 实现思路3.1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3 步骤三 3.1.4 功能测试3.1.5 提交代码 3.2 新增菜品3.2.1 需求分析与设计3.2.2 代码开发3.2.2.1 文件上传实现3.2.2.2 新增菜品实现 3.2.3 功…...
MySQL高级SQL语句
创建两个表用于演示 location store_info use kgc; create table location (Region char(20),Store_Name char(20)); insert into location values(East,Boston); insert into location values(East,New York); insert into location values(West,Los Angeles); insert into lo…...
rem和em的区别和使用场景,以及如何在实际开发中灵活运用它们
在前端开发中,我们经常使用rem和em作为长度单位来设置页面元素的大小。虽然它们都可以用于实现响应式布局,但是它们之间存在着一些区别。本文将深入探讨rem和em的区别和使用场景,以及如何在实际开发中灵活运用它们。 什么是rem rem是相对于…...
JDK源码阅读环境搭建
本次针对jdk8u版本的搭建 1.新建项目 新建java项目JavaSourceLearn ,这里我创建的是maven 2.获取JDK源码 打开Project Structure 找到本地JDK安装位置将src.zip解压到项目java包中 整理下项目结构,删除用不到的目录 提示: 添加源码到项目之后首次运行…...
基本定时器工作模式
计数和定时 BasicTimer支持8位或16位向上计数模式。当计数值大于等于比较寄存器(CMPH、CMPL),会产生计数中断标志,并从自动重载寄存器(LOADH、LOADL)加载新的比较值。这样可以实时调整每个计数周期的计数长…...
【华为OD机试真题2023B卷 JAVA】报文重排序
华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 报文重排序 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 对报文进行重传和重排序是常用的可靠性机制,重传缓冲区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。。 输入描…...
【Docker】- 02 Docker-Compose
Docker-Compose Docker-Compose1 下载并安装Docker-Compose1.1 下载Docker-Compose1.2 设置权限1.3 配置环境变量1.4 测试 2 Docker-Compose管理MySQL和Tomcat容器3 使用docker-compose命令管理容器4 docker-compose配合Dockerfile使用4.1 docker-compose文件4.2 Dockerfile文件…...
工业相机的Pixel Binning和Pixel Skipping
一般图像传感器的不同分辨率都对应着不同的帧率。如果想要提高帧率,就要考虑是否需要缩小视野。若不希望视野缩小,就需要减小分辨率(resolution)。常用的减少分辨率的两种采样方式是:Skipping和Binning。 什么是Binni…...
c++ 11标准模板(STL) std::set(八)
定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
