Kong入门学习实践(3)路由转发

发布时间 2023-06-14 19:58:58作者: EdisonZhou

最近在学习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