最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。
本篇,我们学习快速配置一个最常见的基本功能:路由转发。
关于路由转发
路由转发是Nginx等代理软件最常见的使用场景,对于这类应用层路由转发,通常相对传输层路由转发(例如LVS)来说能够解析出更多的信息,从而做出更加灵活的路由决策。
对于Kong来说,我们需要先添加一个服务和路由信息,当一个请求到达Kong网关之后要先进行路由匹配,匹配后再将请求转发到路由匹配的服务上。
NOTE:一个服务可以配置多个路由
配置服务
配置服务和和路由由两种方式:一种是通过Kong Admin API,另一种则是通过Konga可视化操作。
这里,我们选择Konga来进行可视化的配置操作。
假设,我们已经部署了一个ASP.NET Core WebAPI项目 sample-order-api,它的地址为:172.16.16.4:5000。
首先,在Konga的Services面板中,单击ADD NEW SERVICE按钮,输入以下信息:
点击Submit后即可在Services列表看到新添加的Service:
配置路由
在Services列表点击新创建的这个sample.order-api.com进入详情页,然后点击Routes,即可看到路由列表。我们刚刚说到,一个服务可以绑定多个路由。在路由列表,点击ADD ROUTE即可添加路由。
需要注意的是,这里的Host的名字需要和后面要添加的Upstream的名字保持一致,否则无法找到上游服务器。
配置上游
点击Konga左侧菜单中的UPSTREAMS,然后再点击CREATE UPSTREAM按钮,添加上游信息:
这里只需要填写Name即可,其他均为默认参数。
然后设置ACTIVE HEALTHCHECK,暂时设置以下内容为3。
配置目标节点
上游创建完成后,在上游列表中即可看到刚刚创建的上游,点击DETAILS按钮进入详情页,然后点击Targets即可看到目标节点列表,随后点击ADD TARGET按钮进入添加目标节点界面。
填写sample-order-api项目的IP和端口号即可,相信配置过Nginx的童鞋应该都很熟悉:
验证结果
首先,在本机的Windows Hosts中将sample.order-api.com指向Kong网关的IP地址。
其次,在浏览器中进行验证:http://sample.order-api.com:8000/api/orders
这里通过Host方式指向Kong网关的代理端口8000,Kong网关帮我们做了路由转发,从sample-order-api项目中获取到了数据。
最后,如果配置了目标节点但是节点状态为Unhealthy,在测试验证时会返回以下错误信息:
它表示Kong无法从环形均衡器中获取到有效的上游服务器目标节点。对此,你可以手动先将其设置为Healthy再做测试验证:
当然,要解决这个问题还需要为我们的sample-order-api项目增加一个健康检查的接口用于Kong进行主动的健康检查。
using Microsoft.AspNetCore.Mvc; namespace EDT.MSA.Ordering.API.Controllers { [Route("api/Health")] [ApiController] [ApiExplorerSettings(IgnoreApi = true)] public class HealthController : ControllerBase { [HttpGet] public IActionResult Get() => Ok($"ok"); } }
重新部署sample-order-api之后,编辑UPSTEAM的健康检查Path为/api/health即可:
配置之后,目标节点再也不会Unhealthy了:
示例应用
本节示例应用:https://github.com/EdisonChou/EDT.EventBus.Sample,分支:feature/kong-practice-1
参考资料
闫观涛,《Kong入门与实践-基于Nginx和OpenRestry的云原生微服务网关》
风起云边,《Kong - Overview》
风一样的程序员,《45张图带你从0玩转Kong Gateway》
作者:周旭龙
出处:https://edisonchou.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
标签:Kong,sample,api,转发,order,路由 From: https://www.cnblogs.com/edisonchou/p/edc_kong_learning_notes_chap3.html