Ocelot结合consul搭建简易的微服务架构
这段时间再做对外的接口,由于接口较多,不好管理,内部打算统一一个接口对外,这就需要一个网关来整合接口,所有对外的访问都走网关,由网关实现内部的转发,所以采用了.net core的一个开源项目Ocelot,这里简单做一个开发过程中的随笔。
默认基本的概念都是清楚的,这里不再做阐述,所有的接口都是采用.net core 2.2 版本。
(1)首先搭建网关项目,用NUGET添加相关的安装包

(2)因为Ocelot基本采用配置文件完成,因此需要将core原来的配置文件替换掉,使用我们准备好的Ocelot配置文件


(3)接下来配置core项目的Startup文件,把相关的依赖注入进去,以及中间件管道的构建。因为之前的API采用Identity Server4 做授权和鉴权认证,因为这里会直接将授权的相关配置都加上。

授权部分字段解释:
authenticationProviderKey 需要和Ocelot的配置文件关于授权部分节点声明的一致,这个在配置文件会介绍;
idsAddress:为颁发Token服务器的地址(Identity Server4 服务是之前搭建的,具体的搭建过程这里就不在阐述)。
其他部分依次注入:

Consul是做服务注册与发现的,Polly是限流熔断等机制使用,因为远API使用Swagger做接口文档,因此网关这边也将Swagger的东西加了进去,有多个节点的时候网关的配置文件对应添加多个就好,网关会根据服务的名字转发。
(4)Configure配置,将相关的中间件Use一下.

(5)接下来就是最重要的配置文件,相关的注释已经加上,具体的演示就不在阐述。

对于授权这块的配置,暂时还没有搞清楚AllowedScopes怎么用的,所以现在接口全部都要传递token,本意是想有些接口需要认证,有些可以直接访问,所以这里
打个问号???后面继续研究,有朋友感兴趣也欢迎评论联系我。
对于Claim中信息的判断可以配置RouteClaimsRequirement字段,相关的说明如下,但是个人感觉这个用法没啥太大作用仅能做一个初步的token验证吧,因为权限相关的东西都是在API端,通过继承AuthorizationHandler类进行开发:

上面的节点可以配置多个,每个API对应配置一个。这是全局的一个节点的配置,主要用来对网关对外地址和服务注册与发现的配置,到这里基本网关层面的东西就搞定了。

接下来是API项目相关的一些配置。网关做好以后,对方调用我们的接口,网关负责分发,那么网关就需要知道这个接口分发给谁来执行,而微服务架构一般都会采用集群部署的方式,也就是一个API会对应发布多个进程,所以发布一般会采用consul+docker来实现,所有的服务在docker容器运行之后,对应的服务进程会自动注册到consul,当上端发来请求时,consul会将消息处理分发到对应的服务进程。
(1)首先搭建一个consul服务,我这边是搭建在本地演示,具体的安装和搭建可以参考网络其他文章,这里不再阐述。运行情况如下:


(2)将consul通过扩展方法注入到API项目的管道中去,然后添加一个心跳检测的接口后,其他地方不需要改动,需要注意的是,集群部署的时候需要注意,服务编号不能重复,consul会将服务编号是一样的认为是一个进程,不会多次注册


部署采用docker部署,上面的IP地址要换成对应的服务器地址,端口号要与docker容器的端口号保持一致,这边暂时只部署了一个。

暂时写到这里了,如果有疑问请随时评论联系,一起进步!

浙公网安备 33010602011771号