Kong入门学习实践(5)API网关路由转发
最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。
本篇,我们学习快速配置一个最常见的基本功能:API网关场景下的路由转发。
API网关路由需求
在API网关的需求场景中,我们需要的路由转发往往是下面这个样子:

我们会用API网关作为上游所有API服务的入口,即前端只会通过API网关来调用各个不同的API,各个API服务之间通过路由前缀区分。
例如,当客户端请求 api.edisontalk.cn/order/api/health 接口时,Kong会将/order路由路径的所有请求都转发到上游的Order API,相当于请求的是Order API的/api/health接口。当请求 api.edisontalk.cn/stock/api/health 接口时,Kong则会将/stock路由路径的所有请求都转发到上游的Stock API,相当于请求的是Stock API的/api/health接口。
从上面的例子可以看出,客户端所有的API都是发给 api.edisontalk.cn 的,Kong会自动帮我们进行路由转发。
那么,接下来,我们就来配置实现这个需求。
准备工作
为了演示,我们两个ASP.NET Core WebAPI项目,分别是 sample-order-api 和 sample-stock-api,并且将其分别部署到服务器上,每个应用部署两个容器实例,它们都位于同一台服务器中。

本节示例应用:https://github.com/EdisonChou/EDT.EventBus.Sample,分支:feature/kong-practice-2
同时,为了演示方便,这里我们将Kong的代理监听端口8000和8443改为80和443,这样我们在访问的时候就不需要加8000端口了。
这里我们将之前的docker-compose.yml中关于Kong的部分的端口进行更改:
#######################################
# Kong: The API Gateway
#######################################
kong:
image: ${KONG_DOCKER_TAG:-kong:latest}
restart: on-failure
networks:
- kong-net
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
KONG_PROXY_LISTEN: 0.0.0.0:8000
KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_ADMIN_LISTEN_SSL: 0.0.0.0:8444
KONG_STREAM_LISTEN: 0.0.0.0:7000
depends_on:
- kong-database
healthcheck:
test: ["CMD", "kong", "health"]
interval: 10s
timeout: 10s
retries: 10
ports:
- "7000:7000"
- "80:8000" # "8000:8000"
- "8001:8001"
- "443:8443" #"8443:8443"
- "8444:8444"
然后,重新启动一下Kong即可:
docker-compose up -d
配置Upstream
参考之前 路由转发 一文中进行Upstream的配置,添加两个Upstream:sample-stock-api 和 sample-order-api:

其中,sample-stock-api的目标节点配置:

sample-order-api的目标节点配置:

两个Upstream的主动健康检查配置如下:
(1)Verify https certificate: No
(2)Http path: /api/health
配置Service
这里我们需要新建两个Service,分别是 sample-stock-api-service 和 sample-order-api-service。

这里我们以sample-stock-api-service为例:
(1)在新增Service时填写以下内容:

这里需要注意的是:Host的内容需要和Upstream的名字保持一致。
sample-order-api-service 参考上面的内容填写。
配置Route
这里我们为sample-stock-api-service添加一条路由:

这里我们为其添加了要监听的域名 和 路径,表示:只有在客户端请求api.edisontalk.cn/stock/******时才会匹配到这条路由。
另外几个重要的配置如下图所示:

(1)Strip Path:这里选择Yes,表示Kong将路由前缀删除后再传递给上游服务器,这里是去掉/stock前缀。
(2)Preserve Host:这里选择No,表示Kong不将客户端请求的Host带到上游服务器。
(3)Protocols:这里取消https,因为我们并没有配ssl证书。
验证结果
访问 http://api.edisontalk.cn/order/api/orders,可以正确匹配并返回数据。

访问 http://api.edisontalk.cn/stock/api/stocks,可以正确匹配并返回数据。

带未配置的路由http://api.edisontalk.cn/products/api/health,无法匹配路由。

示例应用
本节示例应用:https://github.com/EdisonChou/EDT.EventBus.Sample,分支:feature/kong-practice-2
参考资料
闫观涛,《Kong入门与实践-基于Nginx和OpenRestry的云原生微服务网关》

Kong入门学习实践(5)API网关路由转发的更多相关文章
- 测试开发:从0到1学习如何测试API网关
本文来自我的一名学员分享 日常工作中,难免会遇到临危受命的情况,虽然没有这么夸张,但是也可能会接到一个陌生的任务,也许只是对这个概念有所耳闻.也许这个时候会感到一丝的焦虑,生怕没法完成领导交给的测试任 ...
- springCloud学习05之api网关服务zuul过滤器filter
前面学习了zuul的反向代理.负载均衡.fallback回退.这张学习写过滤器filter,做java web开发的对filter都不陌生,那就是客户端(如浏览器)发起请求的时候,都先经过过滤器fil ...
- Spring Cloud入门教程 - Zuul实现API网关和请求过滤
简介 Zuul是Spring Cloud提供的api网关和过滤组件,它提供如下功能: 认证 过滤 压力测试 Canary测试 动态路由 服务迁移 负载均衡 安全 静态请求处理 动态流量管理 在本教程中 ...
- 万字长文:SpringCloud gateway入门学习&实践
官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/# ...
- Spring Cloud之搭建动态Zuul网关路由转发
传统方式将路由规则配置在配置文件中,如果路由规则发生了改变,需要重启服务器.这时候我们结合上节课内容整合SpringCloud Config分布式配置中心,实现动态路由规则. 将yml的内容粘贴到码云 ...
- Nacos入门学习&实践
文中涉及到了一些模块代码没有给出,我一并上传到github了,可以整个项目clone下来进行调试. 地址:https://github.com/stronglxp/springcloud-test 1 ...
- H5Plus 入门学习-Dcloud H5+ API调用实例
使用API Reference完整简单的操作,更多操作查看官方文档. 最后提供项目的下载地址[下载][一款移动APP演示]
- API网关学习及介绍
一.什么是API网关 API网关是一个服务器,是系统的后端统一入口.首先,它会提供最基本的路由服务,将调用转发到上游服务.其次,作为一个入口,它还可以进行认证,鉴权,限流等操作,对上游服务保护.所以说 ...
- 云原生API网关全生命周期管理Apache APISIX探究实操
@ 目录 概述 定义 NGINX 与 Kong 的痛点 APISIX 的技术优势 特性 架构 应用场景 主要概念 部署 快速入门 quickstart安装 Admin API创建路由 RPM安装 安装 ...
- 聊聊API网关的作用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "Trebuchet MS" } p.p2 { margin: 0.0px ...
随机推荐
- CSS那些事读书笔记-2
背景 作为一个后端开发,曾经尝试过学习前端,但是总觉不得要领,照猫画虎,而公司里又有专业的前端开发,工作中几乎接触不到实际的前端任务,所以前端的技能田野一直是一片荒芜.但是笔者深知前端的技能对找工作和 ...
- 【SpringMVC】RESTful CRUD
RESTful CRUD REST:即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方 ...
- WPF MessageBox
参考文档 MessageBox MessageBoxButton MessageBoxImage MessageBoxOptions MessageBoxResult
- PDA自带有红外扫描头,不用点击焦点就能超高速超精准的扫条码、扫二维码
参考牛人DelphiTeacher的<PDA扫码?不要慌,只要20行代码!> 摘要: 实现监听器接口 然后在系统中注册该监听器,注册时指定只接收名称为com.kte.scan.result ...
- 读取excel单元格填过得的坑
通过TdxSpreadSheet读取excel单元格值. 有一个cxDBTreeList来来表现科室单元,可是从科室单元excel文件中读取单元内容后,各种报错.一度怀疑cxdbtree的bug. 实 ...
- 国产的 Java Solon v3.2.0 发布(央企信创的优选)
Solon 框架! Solon 是新一代,Java 企业级应用开发框架.从零开始构建(No Java-EE),有灵活的接口规范与开放生态.采用商用友好的 Apache 2.0 开源协议,是" ...
- .NET 原生驾驭 AI 新基建实战系列(五):Milvus ── 大规模 AI 应用的向量数据库首选
1. 引言 Milvus 是一个强大的工具,帮助开发者处理大规模向量数据,尤其是在人工智能和机器学习领域.它可以高效地存储和检索高维向量数据,适合需要快速相似性搜索的场景.在 .NET 环境中,开发者 ...
- <HarmonyOS第一课10>ArkUI进阶#鸿蒙课程##鸿蒙生态#
课程介绍 <HarmonyOS第一课:ArkUI进阶>是专为HarmonyOS开发者设计的课程,旨在提升开发者在ArkUI框架中的布局技能.课程将重点讲解如何进行布局性能优化,包括精简节点 ...
- 【HUST】论于渊《Orange‘s:一个操作系统的实现》第三章中PagingDemoProc的必要性,是否可以直接调用LinearAddrDemo?
相关代码如下(第三章pmtest9a.asm改写): LinearAddrDemo equ 00401000h ProcHust equ 00401000h ProcIS19 equ 00501000 ...
- P1514 [NOIP 2010 提高组] 引水入城 题解
题意:P1514 [NOIP 2010 提高组] 引水入城有点复杂,自己看吧. 思路 这里提供一个好像没见过的纯 DP 做法,不需要神秘的证明以及任何脑子,直接顺着思路做即可. 首先判断正确性就是从第 ...