大家新年好,我是大鹏。
本篇章是【all in one家庭软路由方案】系列的第一篇实操内容,主要讲如何搭建虚拟机系统环境,大鹏作为一位刚刚从新手村出来的新人,会用最详细的方式给小白们进行说明,如果你觉得细节繁琐,请快速阅读即可,本系列教程主要针对新手入门用途。
本篇章之所以在命名上是篇2,因为实际会有一篇介绍all in one的理论知识啰嗦内容作为篇1,放到最后发布吧,本系列教程预计10篇章内容左右,目的是帮助小白从一脸懵逼,到顺利离开新手村开始踏上被all in one折磨的道路。
阅读本章,你可能需要花费30分钟,但是将学会
搭建PVE虚拟系统环境;
让PVE系统接入现有局域网并连接互联网;
更新内置的软件源地址;
增加插件显示CPU温度;
将PVE安装到内置EMMC中;
设置基础网络网卡配置;
设置定期启动或关闭虚拟机;
本系列教程将采用PVE 作为底层搭建整套方案的环境,之所以选择PVE,主要考虑几点
对网卡兼容性比较好,不需要折腾驱动;
支持显卡直通功能,可以把all in one当普通电脑视频输出;
相对比较成熟,网上教程也很多;
当然PVE并不是非常完美,你所看到本系列教程中,会有很多需要通过命令行操作的功能,对新手非常不友好,但这里不过多讨论用什么底层系统作为all in one ,虽然之前采用过Hyper-V方式,不过近期我研究的方向是PVE,所以用此作为all in one 方案给大家分享, 其实PVE 只是一个底层, 我们后期关注的是虚拟机的搭建与使用。
本教程PVE 系统版本是
此时如果正常,则会显示这样的连接数据
联网不了网络的,请排查一下
网线是否有正常连接好,是否接入到管理网口;
网线是否正确链接到能上网的lan口中;
到你的路由后台看看有没有pve的设备;
测试一下自己操作的电脑是否能正常联网;
当时安装PVE的时候, DNS有没有设成有效地址;
最终的目的,都是要让PVE系统能连接外网,如果无法联网,那PVE将无法安装插件进行功能扩展。
OK ,既然连接上网络了
更换源,其实就是更换应用市场的意思,因为PVE默认的应用市场是海外的,国内无法连接,所以需要更换成国内的应用市场,大概这样意思吧
1. 登录SFTP,找到对于的文件后然后进行修改增加国内的源地址
或者用我提供的懒人包进行替代,懒人包路径
新手可以直接下载我做好的文件进行替代,我采用的是aliyun 的镜像源地址,
如果想知道具体改了什么内容,可以百度一下, 非常多的介绍,自己修改也可以
上面直接替代主要针对新手, 我已经将修改好的文件提供,可以直接替代接口,不用麻烦一个个修改
如果你的PVE版本和我的不一样,可能需要你找详细的修改说明自己修改。
3. 然后登录SSH,输入更新应用数据,这个更新大概不到一分钟吧
4. 命令行跑完后,在输入,这个更新比较久,等进度跑完就行
上面讲的是正确的更新应用商店的列表,如果没有替换国内支持的源,就会提示更新失败,如下图
4.4 增加CPU温度显示(可跳过)
增加CPU温度就是在控制面板上显示CPU的温度,这个功能看着在window是很容易实现的功能,但是在PVE上要修改一下配置才能实现,如果你不在乎,那就不用改,直接跳过。
增加接口文档中的插件接口
增加显示页面的接口显示
1. 首先要安装传感器的检测工具,登录SSH后,使用这个命令进行安装,安装很快
2. 完成完成后,需要进行扫描一次电脑的传感器,使用这个指令
检测传感器时,会提示很多次是否扫描不同类别的传感器,要在SSH上输入yes进行确定,
扫描过程比较长,窗口会一直滚动,滚动
3. 完成扫描后,进行测试一下, 输入
窗口就会反馈相关传感器的信息,也不知道为什么我这个主机只能显示这几行,不过足够了。
4. 完成上述操作,只是把温度插件安装好而已,还需要进行页面配置修改,原来的页面是没有显示温度的位置与接口,所以需要进行改动,将我提供的替代文件覆盖原路径的文件即可,
由于录屏时在3楼连接一楼的主机,所以看上去很久,因为信号不好,实际很快
用我提供的懒人包直接替代即可,如果你用的PVE版本和我不同(教程是基于PVE7.0.11),也可以根据下面自己修改
#### 如果你用我提供的懒人包覆盖,那这以下这部分就跳过 ####
#### 如果你用我提供的懒人包覆盖,那这以上这部分就跳过 ####
5. 最后,到SSH上,更新一下页面后台服务
6. 然后到控制面板看看,就可以显示温度了
如果操作完上面的还不显示,一般是浏览器缓存了老的前端文件,可以清除一下缓存试试,或者换个浏览器就可以;
这些操作都不用重启all in one 主机;
若你的主机主板内置了EMMC硬盘,比如之前热门的锐角云,就自带64GB EMMC,那怎么能空着不用呢,榨得一滴不剩,
传统的pve安装方式,是不支持将系统装到EMMC上的,装到一半会出错,应该是官方限制了。
没有困难的工作,只有勇敢的狗狗,
既然直接安装不行,那就用奇淫巧技,
本章节内容非必要,请根据自己的硬件进行选择
我们通过将系统安装到普通符合PVE要求的硬盘,再将该盘完全克隆到EMMC上,就能实现曲线救国的效果
1。首先安装pve系统前,要准备一个容量小于你内置EMMC的硬盘,选择有两种
主板内置的接口,M.2,sata都可以
USB接口,用,高级U盘等能在windows系统识别为磁盘而非移动存储的
Q: 为什么准备的硬盘小于EMMC容量?
A: PVE在安装时会对安装盘的容量进行自动分配分区大小,有三个分区,如果大于EMMC,那就会匹配不上。
Q: 我是土豪,没有太小的硬盘怎么办?
A: PVE安装时,选择硬盘可自定义分区大小,但需要有一点基础,我没这么操作过,所以你得去查阅相关资料尝试。
2。按照[安装PVE到硬盘]的步骤,装系统安装到上一步准备的硬盘上,流程一样;
3。拿出你的U盘,制作PE系统U盘,这里推荐的是WEPE,干净功能齐,双击制作程序选择好U盘就行;
4. 将all in one 主机关机,然后插入U盘,按照之前进入BIOS的方式,选择U盘启动,然后进入PE系统,打开PE系统自带的Diskgenius 工具进行对磁盘管理,选择【工具】,然后进入【克隆硬盘】;
5. 首先会让你选择你的源磁盘, 就是你已经安装好PVE系统,需要复制出来那个磁盘;
6. 然后会让你选择需要将PVE系统复制到哪个硬盘,我们选择内置的EMMC磁盘;
7. 最后选择克隆模式,选择【复制所有扇区】,其实3个我都试过,好像都能用;
8. 克隆硬盘完成后,将U盘拔出,并将原来已经安装好PVE那个磁盘拆除,如果不拆除,系统是无法进入的,因为开机启动项无法识别两个相同的系统;
在克隆磁盘的过程中,如果出现乱码,系统卡死,这个时候请重启再试;
如果重新操作也不行,请更换一个PE系统;
如果只是在拷贝到最后的时候提示错误,没关系,我测试过,也能正常使用;
如果这么操作都不行,就要考虑一下是不是内置EMMC 有问题;
4.6 调整硬盘(选看)
本章节建议你先看个大概,等你对PVE 的虚拟机搭建有一定了解后,再回到本篇章进行调整硬盘。
我们在安装完PVE后,系统会自动分配两个重要的分区,我们作为菜鸟,也只要认准这两个分区就行
对于local来说, 我们在前期只要保证上传的ISO,能放的下就行,最大的就是win10的,精简版有2G多,后期大家对pve有一定的了解后,可以自行设置该空间的路径到别的磁盘。
对于local-lvm来说,根据自己的硬盘容量,以及结合需要搭建的虚拟机来设定,比如用windows系统可能需要多一些,用软路由就只需要很小的空间即可。
如果是下列情况,就需要调整硬盘
使用了我推荐的安装使用64GB作为安装容量的,实际磁盘还有容量没有使用;
需要使用内置EMMC的,并且按照上面教程成功克隆PVE系统到EMMC了;
首先进入后台,点击左侧的local查看,
左侧的小图标实际已经是容量的显示,可以看磁盘已经分配不同空间,以及使用量;
1. 打开SSH 工具,先查询一下硬盘情况,输入命令
查看硬盘情况,需要记住你需要调整的磁盘盘符,虽然看到很多命令行的信息可能对新手不友好,但是小技巧是找到自己磁盘容量大小的信息,比如
/dev/sdb,这个在我的主机上是M.2接口的2280硬盘;
/dev/mmcblk0,这个在我的主机上就是主板上内置的EMMC硬盘;
这样的,记住这个路径,具体要看你的主板磁盘的接口顺序了,认真自己的容量,找到盘符即可
这个命令是查看硬盘信息的,从上图可以看到,我的主机装了两个硬盘,第一个是安装PVE系统的硬盘,本次操作对第一个进行,第二个我打算用来做存储,所以先不管,后面会直通给群晖使用。
首先要核对一下,硬盘1的总容量,看上图, 我的EMMC是58GB的,但是硬盘分区信息中,3个分区加起来还没有15GB,这是因为我首次安装的硬盘容量是16GB的,后来通过硬盘克隆全盘复制,导致有很多容量没有纳入到分区,这时候我们就需要对分区进行扩容。
2. 我们先通过SSH安装一个插件,用于管理硬盘
3. 然后输入命令,就可以用这个工具查看硬盘,确定插件正常
会返回硬盘的各种信息,
4. 接着我们正式开始扩容,输入命令,对指定的硬盘进行操作
这个/dev/mmcblk0 路径,就是最上面让你记下来的路径,其实就是在Linux系统中,硬盘的通道,输入后会提示欢迎语,如果你路径输入错误(不存在的),就不会出现这个欢迎提示
看到,LVM 就是目前你能用的容量,我们的目的是先将硬盘剩余的空间全部扩容到这个分区,这是第一步。
6. 我们通过命令将硬盘剩余没有使用的容量,分配到LVM分区上
3的意思是第三个分区,对应上图LVM 的number, 而100%就是剩余空间的100%
7. 分配完成后,我们退出这一步骤的操作
8. 分配完成后,我们来检验一下分区大小是否已经变大,输入命令
可以看到,LVM的容量已经是57GB了,3个分区加起来差不多是EMMC 的容量了,但是只完成了第一步。
但是这里还需要记住一个路径,就是我们需要扩容的空间
9. 我们还需要更新一下
这个/dev/mmcblk0p3 路径,就是上图中需要记住的路径,意思是mmcblk0硬盘中的p3分区
10. 完成了分区的扩容后,我们还需要对挂载点进行扩容,先来查看一下挂载点的名称
这里面显示出来的内容,可以在控制面板上看到的两个容器,其中对应的名称是root和data
如果你想扩容放ISO的容量,就是root
如果你想扩容放虚拟机的容量,就是data
11. 扩容前确定一下可以进行扩容的容量,其实就是检查分区的容量使用情况
可以看到,在PFree一列中,还有45GB的容量没有使用,那么我们就要对这45GB进行分配到挂载点去
12. 通过输入命令,为指定的挂载容器进行扩容
其中+10%FREE,是指要增加未使用容量的10%,即4.5G,
/dev/pve/root,是指要把这10%增加到root挂载中,对应就是放ISO和备份的地方
我的目的是能存放要安装的ISO就行, 备份什么的以后再修改路径。
13. 然后我们再扩容存放虚拟机的容器,将剩余空间都分配给data
14. 最后,我们来检验一下,输入命令进行查看容量
查看到,存放ISO 和 虚拟机的 容器,都扩容成功了,
再到到控制面板去看看,发现local-lvm扩容成功了,local还是原来的容量
15. 这个时候我们需要更新一下root的容量,输入
16. 输入完成后,就可看到容量增加了
完成对剩余空间的扩容了!
调整硬盘空间过程不需要重启,命令行进行更新即可;
对硬盘调整空间,扩容简单,减少我还没操作过;
对于新手来说,建议熟悉一下基本的虚拟机搭建后,空间不够再操作扩容吧;
4.7 添加硬盘(选看)
不是一定要添加硬盘,只有在你主机有多个硬盘,并且不准备用来直通给虚拟机用的时候,才需要进行操作添加硬盘,如果你有多硬盘,除了装系统的硬盘外,都希望直接给虚拟机用,比如群晖,不想通过PVE底层进行中转,那么不要操作本步骤的内容。
如果你在windows下,添加硬盘真是一件非常简单的事情,但是在Linux下真实对菜鸟噩梦般的操作,来照葫芦画瓢吧。
1. 进入PVE控制面板,在节点中,进入【磁盘】,看到里面除了系统盘外,有一个你插上的硬盘,记住这个路径
/dev/sda, 路径因人而异,不过大部分都是sda,sdb 之类的
不同主板,不同接口可能不同,一定要看清楚
2. 然后打开SSH, 输入管理该硬盘的命令
3. 进入了sda硬盘的操作,先输入分区命令选项
4. 然后输入分区为主分区命令选项
5. 然后输入写入命令
上述就完成了新建硬盘的分区操作,下面是要挂载
8. 然后将分区sda1,挂载到目录下,大概这个意思吧
9. 最后就是设置每次开机都挂载一次的命令,大概是写入这个命令到开启启动配置文件中;
上面操作就完成了系统级别的加硬盘,但是还差最后一步,才能使用这个硬盘
10. 回到PVE ,点击【数据中心】,【存储】,然后左上角点击【添加】,选择【目录】;
11. 然后ID可以选择自己容易记的,我的盘是NGFF的,所以直接写NGFF,最重要是目录,就写刚刚新建的挂载目录
12. 确定后,过几秒中,再左侧的树型结构上,就能看到添加的硬盘了,
13. 经过上述操作,就添加了一个硬盘了,后续在新建虚拟机的时候,硬盘选项中就可以选择用这个新硬盘的目录进行分配硬盘。
4.8 宿主机的网卡设置
对网络的设置,本篇章只是做一个准备,在未添加虚拟机之前,是用不上的,可以先跳过,等后面要添加软路由的时候再来详细看。
如果你准备单网卡使用,不作为软路由,那本章节可以忽略
PVE系统的网络概念其实是比较简单,我浅薄的理解就是,只分为真实网卡,和虚拟网卡就可以了,不想hyper V那样分内部,外部,专用网络,也不像EXSI那样对网卡驱动兼容不优化,PVE基本上是个网卡都能识别,包括我插入的USB网卡都能正确识别,不用特地折腾一次驱动。
PVE在安装后,就会自动为你新建一个虚拟网卡,并绑定好安装时选择的真实网卡,
所以你才能通过局域网正常登录PVE后台,那么在什么情况下需要配置一下网络设置呢
你需要把all in one 作为软路由,并且主机有多网口
通过查看【节点】-【网络】,就能看到网卡的列表,如下
如果你的电脑准备用来做软路由,主机是多网卡,或者准备增加USB网卡,那就需要对网络进行配置,
虽然PVE支持网卡直通,但是对于我们菜鸟来说,先用最简单的方式架设好网络才是最重要的,那么我们按照下列方式操作。
大概原理:新建虚拟网卡,并把虚拟网卡和真实网卡绑定在一起
1. 点击上方【创建】,【Linux Bridge】,新建一个虚拟网卡;
2. 填写新建的虚拟网卡桥接的端口,一定要根据真实网卡的名称填写,你的主机有多少个真实网卡,就新建多少个虚拟网卡,第一个网卡系统已经帮你创建了;
3. 最后,一定要点击【应用配置】,不然不会生效
操作完上述,网络配置就结束了,这个动作很重要,后面新建软路由虚拟机的时候,需要用的。
4.9 设置虚拟机定时任务
定时任务就是指自己设定一个时间,让虚拟机自动启动或者关闭,这种应用场景是
有些虚拟机系统,不用24小时后台跑的,只是在某个时间段使用,比如window;
有些虚拟机系统原生没有自动重启功能,想要通过底层控制定期重启一下;
说了惭愧,我实在没找到PVE 系统后台能进行设置的前端选项,只能找到参考linux系统的定时任务方法
在系统的定时任务清单中添加对虚拟机的定时任务
具体的方法是在系统目录etc/目录中,找到crontab 文件,在里面添加如下命令
上面命令中,#和后面中文只是方便注释,并不其实际作用
新手建议直接在我上面的命令后中复制修改, 或者采用在我提供的懒人包中修改后替代系统文件即可。
上述内容需要到后面的教程篇章中才会实践到,相对比较简单,不过对window这种比较吃内存的虚拟机,定时开关可以解决白天人不在,无需要window操作时的问题,等晚上到家后定期开机,睡觉定时关机这种方式,以节约all in one的内存消耗(其实卵用没,如果是8G常开也没问题了)
4.10 虚拟机的备份与恢复
辛苦摸索搭建的虚拟机如果不小心删除,或者调试崩溃后,要重新搭建是件非常痛苦的事情,好在PVE系统是支持备份与恢复的,我们来学习一下方法
备份功能已经做在了PVE 的后台控制面板上,只要登陆管理后台,即可进行备份,
1. 进入管理后台后,点击左侧【数据中心】;
2. 进入工具栏中的【备份】;
3. 选择【添加】备份任务;
选择好需要备份的自动时间,以及要备份的虚拟机即可,其它选项对于新手就默认即可,
上面完成了自动定时备份,对于新手其实还是很方便的,也可以进行立刻备份
备份后的文件,可以通过查看local空间查看到。
其备份的文件,实际路径在
可以通过SFTP工具登录查案,并下载到本地进行保存
恢复也比较简单, 在备份的空间中就有选项可以恢复
通过本机PVE进行备份的,会存储在备份目录中,直接输入恢复命令即可;
通过外部存储加载的,比如说我分享一个我备份出来的虚拟机给你,你需要导入到PVE备份目录中,然后才可以进行恢复;
自备份就是从本机备份的文件,恢复到本机
1. 如果从本机备份,先进入local空间中查看是否存在备份的文件;
2. 确定备份文件存在,并确定是否是你要的那个虚拟机ID,OK 的话记录名称全称
3. 在local空间中,找到你的备份文件,然后点击还原即可;
4. 恢复完成后,进度会显示task ok
如果是其它人员分享给你,又或者是你原来下载到本地保存的备份文件,直接在local空间是没有的, 这个时候,就需要通过SFTP工具,将备份文件上传到如下路径
上传后,在local的备份列表中刷新后即能看到,就可以进行还原操作了。
恢复的目的ID 不能与现存的虚拟机ID相同,一定要选择现在没有的ID,即不能进行覆盖恢复;
恢复会将原来备份的虚拟机所有配置进行还原,比如设置的CPU,硬盘,网络等,所以如果是从另外一个PVE主机备份而来的恢复文件,请先查阅是否配置相同,我们可以在备份列表选中后,点击【显示配置】即可查看;
可以用我提供的备份文件进行练习,把下列内容上传到pve根目录
当然如果你觉得前端操作麻烦,也可以用命令行进行还原恢复,将备份文件上到备份空间路径后,通过SSH输入命令
106代表我需要恢复出来的目标虚拟机ID
如果新手,就建议少用命令行了,因为一个字符输错就失败。
好了,上面就是本篇章的内容。
除了如何安装PVE系统外,其它其实都是可选的内容,大家根据自身的实际情况选择是否参与即可。
操作完本篇章的内容后,实际只是把底层环境搭建好而已,并不能投入到家庭网络中使用
后面还会更新的内容,或许你可以等整个系列都更新后,再选择是否搭建一套属于你的all in one。
软路由ikuai虚拟机搭建基础网络路由服务;
windows虚拟机搭建与显卡直通输出;
openwrt 旁路由搭建实现增强型网络功能;
群晖7.0 NAS系统搭建,硬盘直通与photos人脸识别;
AdGaurd 广告拦截服务搭建;
Docker应用实例(网站建设、撸京豆等);
快过年了,不要再讨论什么NAS、HTPC、软路由了。
你带你的傻大黑粗机箱回到家并不能给你带来任何实质性作用,朋友们兜里掏出一大把钱吃喝玩乐,你默默的在家里摆弄你的破黑群晖。
亲戚朋友吃饭问你收获了什么,你说我组了一个RAID 0的ALL IN ONE,亲戚们懵逼了,你还在心里默默嘲笑他们,笑他们不懂你的黑群,不懂你的内网穿透,也笑他们看还要忍受会员专属广告。你父母的同事都在说自己的子女一年的收获,儿子买了个房,女儿买了个车,姑娘升职加薪了,
你的父母默默无言,说我的儿子装了个黑盒子,开起来嗡嗡响、家里电表走得越来越快了
本文截稿于2022年春节大年初一
好在我提倡的是mini主机哈。
同时为了应对业务的细分以及高并发的挑战,微服务的架构被广泛使用,由于微服务架构中应用会被拆分成多个服务。
为了方便客户端对这些服务的调用于是引入了 API 的概念。今天我们就来看看API 网关的原理以及它是如何应用的。
网关一词最早出现在网络设备,比如两个相互独立的局域网之间通过路由器进行通信, 中间的路由被称之为网关。
落实在开发层面来说,就是客户端与微服务系统之间存在的网关。从业务层面来说,当客户端完成某个业务的时候,需要同时调用多个微服务。
如图 1 所示,当客户端发起下单请求需要调用:商品查询、库存扣减以及订单更新等服务。
图1 :API 网关加入前后对比
如果这些服务需要客户端分别调用才能完成,会增加请求的复杂度,同时也会带来网络调用性能的损耗。因此,针对微服务的应用场景就推出了 API 网关的调用。
在客户端与微服务之间加入下单 API 网关,客户端直接给这个 API 网关下达命令,由于后者完成对其他三个微服务的调用并且返回结果给客户端。
从系统层面来说,任何一个应用系统如果需要被其他系统调用,就需要暴露 API,这些 API 代表着的功能点。
正如上面下单的例子中提到的,如果一个下单的功能点需要调用多个服务的时候,在这个下单的 API 网关中就需要聚合多个服务的调用。
这个聚合的方式有点像设计模式中的门面模式(Facade),它为外部的调用提供了一个统一的访问入口。
不仅如此,如图 2 所示,API 网关还可以协助两个系统的通信,在系统之间加上一个中介者协助 API 的调用。
图 2:对接两个系统的 API 网关
从客户端类型层面来说,为了屏蔽不同客户端调用差异也可以加入 API 网关。
如图 3 所示,在实际开发过程中 API 网关还可以根据不同的客户端类型(iOS、Android、PC、小程序),提供不同的 API 网关与之对应。
图 3:对接客户端和服务端的 API 网关
由于 API 网关所处的位置是客户端与微服务交界的地方,因此从功能上它还包括:路由,负载均衡,限流,缓存,日志,发布等等。
API 网关的定义中我们提到了为什么要使用 API 网关,是为了解决客户端对多个微服务进行访问的问题。
由于服务的切分导致一个操作需要同时调用多个服务,因此为这些服务的聚合提供一个统一的门面,这个门面就是 API 网关。
针对于 API 网关有很多的实现方式,例如:Zuul,Kong 等等。这里我们以及 Spring Cloud Gateway 为例展开给大家介绍其具体实现。
一般来说,API 网关对内将微服务进行集合,对外暴露的统一 URL 或者接口信息供客户端调用。
那么客户端是如何与微服务进行连接,并且进行沟通的,需要引入下面几个重要概念 。
图 4:路由、断言和过滤器
①路由(Route):任何一个来自于客户端的请求都会经过路由,然后到对应的微服务中。
每个路由会有一个唯一的 ID 和对应的目的 URL。同时包含若干个断言(Predicate)和过滤器(Filter)。
说白了就是进行一次或者多次 if 判断,如果匹配成功则进行下一步处理,否则断言失败直接返回错误信息。
③过滤器( Filter):简单来说就是对流经的请求进行过滤,或者说对其进行获取以及修改的操作。注意过滤器的功能是双向的,也就是对请求和响应都会进行修改处理 。
将组成的上下文信息传递到 DispatcherHandler 组件。DispatcherHandler 作为请求分发处理器,主要负责将请求分发到对应的处理器进行处理。
路由断言处理映射器用于路由的查找,以及找到 路由后返回对应的 FilteringWebHandler。
其负责组装 Filter 链表并执行过滤处理,之后再将请求转交给应用服务,应用服务处理完后,最后返回 Response 给客户端 。
这里需要注意的是由于 Filter 是双向的所以,当客户端请求服务的时候,会通过 Pre Filter 中的 Filter 处理请求。
当服务处理完请求以后返回客户端的时候,会通过 Post Filter 再进行一次处理。
我们会根据基本路由、权重路由、限流、动态路由几个方面给大家展开介绍。
基本路由,主要功能就是在客户端请求的时候,根据定义好的路径指向到对应的 URI。这个过程中需要用到 Predicates(断言)中的 Path 路由断言处理器。
首先在 POM 文件中加入对应的依赖,如下:
同样上面的功能也可以在 yml 文件中实现。配置文件如下,说白了就是对 Path 和 URI 参数的设置,实现的功能和上面代码保持一致。
uri: ”这个网站。这个配置起来很简单,有 Nginx 基础的朋友应该很快就能上手。这个使用场景相对于上面的简单路由要多一些。由于每个微服务发布新版本的时候,通常会保持老版本与新版版同时存在。
然后通过网关将流量逐步从老版本的服务切换到新版本的服务。这个逐步切换的过程就是常说的灰度发布。
此时,API 网关就起到了流量分发的作用,通常来说最开始的老版本会承载多一些的流量,例如 90% 的请求会被路由到老版本的服务上,只有 10% 的请求会路由到新服务上去。
从而观察新服务的稳定性,或者得到用户的反馈。当新服务稳定以后,再将剩下的流量一起导入过去。
图 6:灰度发布,路由到新/老服务
如下代码所示,假设 API 网关还是采用 8080 端口,需要针对两个不同的服务配置路由权重。因此在 routes 下面分别配置 service_old 和 service_new。
Json 中配置的内容和简单路由配置的内容非常相似。设置了 Route,当 Predicates 为 baidu 的时候,将请求引导到 的网站进行响应。
此时再通过访问 的路径访问的时候,就会被路由到 的网站。
此时如果需要修改路由配置,可以通过访问 的 API 接口,通过 Post 方式传入 Json 结构,例如:
在更新完成以后,再访问 的时候就会把引导到 的网站了。
通过上面四步操作,即使不重启 Spring Cloud Gateway 服务也可以动态更改路由的配置信息。
由于微服务的盛行,API 网关悄然兴起。针对 API 网关本身讲述了其存在的原因,它不仅提供了服务的门面,而且可以协调不同的系统之间的通讯以及服务不同的客户端接口。
针对 API 网关的最佳时间 Spring Cloud Gateway 的定义和概念的解释,其实现了路由、过滤器、断言,针对不同的客户端请求可以路由到不同的微服务,以及其中几个组件是如何分工合作完成路由工作的。
在最佳实践的介绍中分别从:基本路由、权重路由、限流和动态路由几个方面进行了阐述。