专业微信网站建设公司首选公司哪家好,定西谁做网站,logo设计制作公司,简单做网站需要学什么#xfeff;写在前面很多neter都有在用Ocelot做Api网关#xff0c;但是Ocelot又不像kong或者其他网关一样#xff0c;开箱即用。它需要你单独开一个web项目来部署#xff0c;这样很多同学都在做重复的事了。这里[Hei.Ocelot.ApiGateway] 就把这件事给做了#xff0c;以后有… 写在前面很多neter都有在用Ocelot做Api网关但是Ocelot又不像kong或者其他网关一样开箱即用。它需要你单独开一个web项目来部署这样很多同学都在做重复的事了。这里[Hei.Ocelot.ApiGateway] 就把这件事给做了以后有同学要用的话可以单独拉下代码来部署或者docker/k8s直接部署就好了这是我的计划后续怎么做可能要看我自己的需求我们公司内部部分项目也用—大家也可以当成一个ocelot的demo哈毕竟没什么代码量。基于此本文目标读者是对Ocelot有初步了解的同学。项目地址https://github.com/gebiWangshushu/Hei.Ocelot.ApiGateway怎样跑起来项目结构很简单Hei.Ocelot.ApiGateway 是主角是我配置好的Ocelot网关Hei.Api 是网关测试用的Api;Hei.IdentityServer 是测试用的IdentityServer给部分自己没准备好IdentityServer的同学体验的裸机(Host)直接部署直接clone项目下来按需分别跑起来就行docker、docker-compose部署1、clone项目下来配置好 /Hei.Ocelot.ApiGateway/config 下的appsettings.yml2、把这个整个config目录拷贝到 /home/heidemo/config 因为我demo里面挂载在这个目录3、去项目根目录执行docker-compose up (docker-compose.yml就在根目录你可以注释掉你不想启用的service)k8s部署1、deploy.yml下载到本地修改文件后面的ConfigMap节点这部分是配置含义跟其他部署方式一样2、执行kubectl apply -f deploy.yml我自己部署的Hei.Ocelot.ApiGateway 网关地址http://172.16.3.117:5000Hei.Api地址http://172.16.3.117:5003Hei.IdentityServer地址http://172.16.3.117:5100通过网关访问下我的HeiApi:http://172.16.3.117:5000/user、http://172.16.3.117:5000/WeatherForecastOK美我们讲下各个功能怎么开启随便简单聊聊怎么用。启用Admin Api 管理配置Ocelot 有一堆的配置https://ocelot.readthedocs.io/en/latest/features/configuration.htmlOcelot 支持在运行时动态改配置Ocelot 提供了对应的Rest Api 修改即时生效。不然每次改一点点配置都要找运维挺麻烦的对应的Rest Api是用IdentityServer保护的可以直接配置用已搭建好的IdentityServer或者用Ocelot内置的IdentityServer用来做这个Api的授权。我们实现的是前者开启配置appsetting.yml加上以下配置即可启用Administration:Path: /administration #这里是admin api的目录IdentityServer:Authority: http://172.16.3.117:5100 #IdentityServer地址ApiName: ocelot #这些是我配置好在IdentityServer里的RequireHttpsMetadata: falseApiSecret: secret #这些是我配置好在IdentityServer里的使用1、先去IdentityServer申请tokenPOST http://172.16.3.117:5100/connect/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded2、去Hei-Ocelot-Gateway 查询配置GET http://172.16.3.117:5100/administration/configuration HTTP/1.1
Authorization: Bearer token红框中的就是步骤1申请的token。3、更新Hei-Ocelot-Gateway 更新配置POST http://172.16.3.117:5100/administration/configuration HTTP/1.1
Authorization: Bearer token我发现这个admin Api配置好的配置重启后又会复原为初始化状态不知道是不是Bug。生产谨慎使用或有管理工具每次更新备份好再用。集成IdentityServer做服务授权你的网关后面有很多服务某些服务安全性较高的话可接入IdentityServer做服务授权。开启配置appsetting.ymlIdentityProvider:- Authority: http://172.16.3.117:5100ApiName: ocelotApiSecret: secretRequireHttpsMetadata: false2、ocelot路由配置然后使用前面搭建好的Admin Api或者你用的是配置文件加上以下Routes:{DownstreamPathTemplate: /{url},DownstreamScheme: http,DownstreamHostAndPorts: [{Host: 172.16.3.117,Port: 5003}],UpstreamPathTemplate: /protect/{url},UpstreamHttpMethod: [Get, Post, Put],AuthenticationOptions: {AuthenticationProviderKey: ocelot,AllowedScopes: []},RouteClaimsRequirement: {}
}3、测试我们再次访问http://172.16.3.117:5000/user 的受保护路由 http://172.16.3.117:5000/protect/user申请token再次访问服务发现Ocelot 支持Consul和Eureka做服务发现基本能满足我们日常需求Consul开启配置1、appsetting.ymlGlobalConfiguration:ServiceDiscoveryProvider:Host: 172.16.3.119 #这是我配置在其他机器的consul agent,生产用的一般会在本机配个agentPort: 8500Type: Consul2、ocelot路由配置首先要求你们的服务要注册到Consul这里我自己注册了一个叫MessageApi的服务加上以下Routes:{DownstreamPathTemplate: /api/{url},DownstreamScheme: http,UpstreamPathTemplate: /consul/{url},UpstreamHttpMethod: [ Get, Post, Put ],ServiceName: MessageApi,LoadBalancerOptions: {Type: LeastConnection}
}这样你访问网关 http://172.16.3.117:5000/consul/ 就能访问到对应服务了Eureka开启配置1、appsetting.ymlEureka:Client:ServiceUrl: http://localhost:8761/eureka/ #你的eurekaShouldRegisterWithEureka: falseShouldFetchRegistry: true2、ocelot配置GlobalConfiguration:ServiceDiscoveryProvider:Type: Eureka3、测试略eureka环境给我删了今天懒得搭了如果需求强烈我加上。K8s支持ocelot是支持k8s的如果你启用k8s那它在k8s集群里的角色比较接近于“ocelot-ingress”吧然后我用的是PackageReference IncludeOcelot.Provider.Kubernetes Version16.0.1 /16.0.0 有点问题直接用AddKubernetes()访问总会报错我换了种方式实现开启配置开启前你肯定要搭建好k8s集群了1、ocelot配置GlobalConfiguration:ServiceDiscoveryProvider:Type: KubeNameSpace: dotnetcore #这是我自己部署的HeiApi的命名空间你的如果你的api有多个命名空间可以在路由里配置2、ocelot新增路由 {DownstreamPathTemplate: /{url},DownstreamScheme: http,UpstreamPathTemplate: /kube/{url},ServiceName: hei-ocelot-api,#Namespace: dev, #比如这里你的这个路由对应的serverName不是dotnetcore你可以这样配置UpstreamHttpMethod: [ Get ]}3、测试我们来访问我们刚刚新增的路由对应地址http://172.16.1.30:31500/kube/user (之所以换了地址是因为我刚刚172。16.3.117那台机没搭k8s环境)大家也看到服务发现和k8s(在ocelot这里也是一种新式的服务发现)都在配置GlobalConfiguration:ServiceDiscoveryProvider: 下面那Consul和eureka和k8s是互斥的都有配置的话优先级consuleurekak8s总结我大概看着自己的需求实现了部分需要单独引用拓展包才能启用的功能但是还有部分功能未有实现比如Caching、Tracing这些大家可以修改测好后直接提pr我不是懒得写而是测试麻烦懒哈哈同样不需要引用包单独配置就可以启用的功能都一一保留着,比如限流服务熔断降级求求合并请求头转换等等参考https://ocelot.readthedocs.io/en/latest/项目地址https://github.com/gebiWangshushu/Hei.Ocelot.ApiGateway喜欢的话给我点个星~~文章博客园地址请点击“阅读原文”