[Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本



写在前面

很多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.yml;

2、把这个整个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:5000

Hei.Api地址:http://172.16.3.117:5003

Hei.IdentityServer地址:http://172.16.3.117:5100

通过网关访问下我的HeiApi:

http://172.16.3.117:5000/user、http://172.16.3.117:5000/WeatherForecast

OK,美

我们讲下各个功能怎么开启,随便简单聊聊怎么用。

启用Admin Api 管理配置

Ocelot 有一堆的配置https://ocelot.readthedocs.io/en/latest/features/configuration.html,Ocelot 支持在运行时动态改配置,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申请token

POST http://172.16.3.117:5100/connect/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

2、去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.yml

IdentityProvider:- Authority: http://172.16.3.117:5100ApiName: ocelotApiSecret: secretRequireHttpsMetadata: false

2、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.yml

GlobalConfiguration:ServiceDiscoveryProvider:Host: 172.16.3.119 #这是我配置在其他机器的consul agent,生产用的一般会在本机配个agentPort: 8500Type: Consul

2、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.yml

Eureka:Client:ServiceUrl: http://localhost:8761/eureka/ #你的eurekaShouldRegisterWithEureka: falseShouldFetchRegistry: true

2、ocelot配置

GlobalConfiguration:ServiceDiscoveryProvider:Type: Eureka

3、测试

略,eureka环境给我删了,今天懒得搭了,如果需求强烈,我加上。

K8s支持

ocelot是支持k8s的,如果你启用k8s,那它在k8s集群里的角色比较接近于“ocelot-ingress”吧;然后我用的是

<PackageReference Include="Ocelot.Provider.Kubernetes" Version="16.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是互斥的,都有配置的话优先级consul>eureka>k8s

总结

我大概看着自己的需求实现了部分需要单独引用拓展包才能启用的功能,但是还有部分功能未有实现,比如Caching、Tracing这些(大家可以修改测好后直接提pr,我不是懒得写而是测试麻烦,懒哈哈)

同样,不需要引用包,单独配置就可以启用的功能,都一一保留着,比如

  • 限流

  • 服务熔断降级

  • 求求合并

  • 请求头转换等等

参考

https://ocelot.readthedocs.io/en/latest/

项目地址

https://github.com/gebiWangshushu/Hei.Ocelot.ApiGateway(喜欢的话给我点个星~~)

文章博客园地址请点击“阅读原文”

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

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

相关文章

聊聊常见的服务(接口)认证授权

&#xfeff;写在前面头发掉得多了&#xff0c;总有机会接触/调到各种各样的接口&#xff0c;各种面向Api编程实际上已经嵌入到我们的习惯中&#xff0c;没办法现在服务端通信还得是http(s)&#xff0c;其他协议还未能成为通用的。大厂的开发平台api我先不敢说&#xff0c;各种…

二分查找(划分时左右元素个数不相等)解析+代码

一:问题描述 当我们在用二分法查找元素的时候&#xff0c;我们往往特希望遇到是奇数个元素个数的数组&#xff0c;因为划分完左右两边的个数相等&#xff0c;所以在以前刚学二分法的时候就有这个疑问&#xff0c;当时就是模模糊糊过去了&#xff0c;再遇到其实还是会有疑问。现…

网络计算机室电源线怎么布,网吧综合布线(电源和网络)经验谈

电源系统布线篇网吧目前所提供的服务&#xff0c;像网页浏览、网络游戏、在线电影、远程教育等最基本的服务都与网络有关&#xff0c;网络质量的好坏直接决定了网吧的生存能力。所以&#xff0c;如何规划一个优质的网络环境&#xff0c;是网吧经营者必须要考虑的一个要点&#…

69. Sqrt(x)010(二分法求解+详解注释)

一&#xff1a;题目 ‘给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0…

计算机网络 哪个教材好,学习计算机网络哪本教材最好?

benxiuxian高分答主12-29TA获得超过8057个赞地理期末复习计划临近期末&#xff0c;为帮助学生理顺知识&#xff0c;培养学生灵活运用知识分析问题&#xff0c;解决问题的能力&#xff0c;形成完整的知识体系&#xff0c;特作复习计划如下&#xff1a;一、复习目的&#xff1a;1…

安装VSCode作为常用的文本编辑器

作为程序员&#xff0c;跟文本编辑器打交道那是天天都在做的事情&#xff0c;一个趁手的文本编辑器能大大地提供工作效率&#xff0c;减少996福报。笔者使用过各种文本编辑器&#xff0c;或是xx版&#xff0c;或是免费版&#xff0c;多多少少都有一些不便之处&#xff0c;如今 …

35. 搜索插入位置011(二分查找)

一&#xff1a;题目&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], …

利用 Github Actions 自动更新 docfx 文档

利用 Github Actions 自动更新 docfx 文档Introdocfx 是微软出品一个 .NET API 文档框架&#xff0c;有一个理念是代码即文档&#xff0c;会根据项目代码自动生成 API 文档&#xff0c;即使没有写任何注释也会生成 API 文档&#xff0c;也有一些默认的主题可以配置&#xff0c;…

34. 在排序数组中查找元素的第一个和最后一个位置012(二分查找+思路+详解+两种方法)Come Baby!!!!!!!! !

一&#xff1a;题目 给定一个按照升序排列的整数数组 nums&#xff0c;和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 进阶&#xff1a; 你可以设计并实现时间复杂度为 O(log n) 的算法解…

计算机专业可以报考放射医学吗吗,文科生可以报考医学影像技术专业吗

近期很多文科同学都在疑惑可不可以报考医学影像技术专业&#xff0c;这里有途网小编告诉大家&#xff0c;医学影像技术专业是理科专业&#xff0c;文科生一般来说是不可以报考医学影像技术专业的&#xff0c;但在每年高校招生计划发布的时候也可能会考虑招收文科生的情况&#…

基于PaaS平台的多应用自集成方案之公共数据集成

源宝导读&#xff1a;在明源云“天际”PaaS平台之上&#xff0c;可以构建、部署和运行多个业务应用&#xff0c;并支持多应用分离部署&#xff0c;以提升系统整体的性能和稳定性。本文将介绍多应用自集成解决方案以及相关的实现细节。一、背景1.1、业务场景在明源云“天际”Paa…

可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践

&#xfeff;写在前面为了不违反广告法&#xff0c;我竭尽全力&#xff0c;不过“最佳实践”确是标题党无疑&#xff0c;如果硬要说的话 只能是个人最佳实践。问题引出可能很多新手都会遇到同样的问题&#xff1a;我要我的Asp.net Core 应用传统方式直接部署(host)&#xff0c;…

33. 搜索旋转排序数组(013)二分查找+思路详解+来干了这杯代码!!!!!!

一&#xff1a;题目 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], n…

计算机软件在矿井地质中的应用,(完整版)遥感导论知识点整理(梅安新版)

遥感导论知识点整理【题型】一、选择题二、填空题三、名词解释四、简答题五、论述题注意&#xff1a;标注页码的地方比较难理解&#xff0c;希望大家多看看书&#xff0c;看看ppt。【第一章】绪论1、【名】遥感(remote sensing)广义&#xff1a;泛指一切无接触的远距离探测&…

81. 搜索旋转排序数组 II(014)二分查找+思路+详解+二种做法

一&#xff1a;题目 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 [nums[k], nums[k1…

学校考的计算机三级证书,全国计算机等级考试证书用途

全国计算机等级考试证书用途计算机知识浩如瀚海&#xff0c;即使任何资深人士都不可能精通或熟悉所有的计算机软件&#xff0c;但是为什么他们无论什么软件都能很快就上手会用呢&#xff0c;那是因为本质上任何计算机软件都是C语言之类的编程语言开发出来的&#xff0c;所以我们…

如何校验内存数据的一致性,DynamicExpresso 算是帮上大忙了

一&#xff1a;背景1. 讲故事记的在上一家公司做全内存项目的时候&#xff0c;因为一些关键表会在程序 startup 的时候全量灌入到内存中&#xff0c;但随着时间的推移&#xff0c;内存和数据库的同步偶尔会出现数据差异的情况&#xff0c;伴随着就是运营那边报过来的 bug&#…

临界表储存图的数据(思路+详解+图示)

一&#xff1a;前言 当我们考虑用邻接表储存数据的时候&#xff0c;一定会拿邻接矩阵和其进行比较。邻接矩阵在储存数量较小的数据是耗费的内存是要高于邻接表的。那么我们在做题的时候如果出现内存超限&#xff0c;那就要注意了&#xff0c;可以考虑换用邻接表来储存数据了 …

译 | 在 Azure SQL 上节约成本的八种方法

点击上方关注“汪宇杰博客”原文&#xff1a;John JG Chirapurath翻译&#xff1a;汪宇杰导语当今世界&#xff0c;企业正崭露头角&#xff0c;渴望重整与重建&#xff0c;但仍处于不确定的时期。节约成本并将开支重新分配到最重要的位置与以往一样重要&#xff0c;许多公司将云…

7-2 单源最短路径 (10 分)(思路+详解+邻接表做法)Come Brather!!!!!!!!!!

一&#xff1a;前言 本次题解先展示用邻接矩阵做的&#xff0c;但其会出现内存超限&#xff0c;因为确实是临界矩阵在数据很大的时候相比临界表是耗内存的&#xff0c;但是以前习惯用临界矩阵了&#xff0c;所以一上来就用临界矩阵做了&#xff0c;后来上网查了后知道邻接矩阵…