最近在学习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的云原生微服务网关》

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

Kong入门学习实践(5)API网关路由转发的更多相关文章

  1. 测试开发:从0到1学习如何测试API网关

    本文来自我的一名学员分享 日常工作中,难免会遇到临危受命的情况,虽然没有这么夸张,但是也可能会接到一个陌生的任务,也许只是对这个概念有所耳闻.也许这个时候会感到一丝的焦虑,生怕没法完成领导交给的测试任 ...

  2. springCloud学习05之api网关服务zuul过滤器filter

    前面学习了zuul的反向代理.负载均衡.fallback回退.这张学习写过滤器filter,做java web开发的对filter都不陌生,那就是客户端(如浏览器)发起请求的时候,都先经过过滤器fil ...

  3. Spring Cloud入门教程 - Zuul实现API网关和请求过滤

    简介 Zuul是Spring Cloud提供的api网关和过滤组件,它提供如下功能: 认证 过滤 压力测试 Canary测试 动态路由 服务迁移 负载均衡 安全 静态请求处理 动态流量管理 在本教程中 ...

  4. 万字长文:SpringCloud gateway入门学习&实践

    官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/# ...

  5. Spring Cloud之搭建动态Zuul网关路由转发

    传统方式将路由规则配置在配置文件中,如果路由规则发生了改变,需要重启服务器.这时候我们结合上节课内容整合SpringCloud Config分布式配置中心,实现动态路由规则. 将yml的内容粘贴到码云 ...

  6. Nacos入门学习&实践

    文中涉及到了一些模块代码没有给出,我一并上传到github了,可以整个项目clone下来进行调试. 地址:https://github.com/stronglxp/springcloud-test 1 ...

  7. H5Plus 入门学习-Dcloud H5+ API调用实例

    使用API Reference完整简单的操作,更多操作查看官方文档. 最后提供项目的下载地址[下载][一款移动APP演示]

  8. API网关学习及介绍

    一.什么是API网关 API网关是一个服务器,是系统的后端统一入口.首先,它会提供最基本的路由服务,将调用转发到上游服务.其次,作为一个入口,它还可以进行认证,鉴权,限流等操作,对上游服务保护.所以说 ...

  9. 云原生API网关全生命周期管理Apache APISIX探究实操

    @ 目录 概述 定义 NGINX 与 Kong 的痛点 APISIX 的技术优势 特性 架构 应用场景 主要概念 部署 快速入门 quickstart安装 Admin API创建路由 RPM安装 安装 ...

  10. 聊聊API网关的作用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "Trebuchet MS" } p.p2 { margin: 0.0px ...

随机推荐

  1. PHP 读取csv中的指定某些列的值

    封装一个方法,用于从CSV文件中读取指定的某些列的值时,可以使用以下示例代码: <?php class CSVReader { private $filename; private $delim ...

  2. leetcode每日一题:k-avoiding 数组的最小总和

    引言 ​ 今天是本次开始坚持leetcode每日1题的第10天,也算是迈出了一小步. 题目 2829. k-avoiding 数组的最小总和 给你两个整数 n 和 k . 对于一个由 不同 正整数组成 ...

  3. 从零实现富文本编辑器#2-基于MVC模式的编辑器架构设计

    在先前的规划中我们是需要实现MVC架构的编辑器,将应用程序分为控制器.模型.视图三个核心组件,通过控制器执行命令时会修改当前的数据模型,进而表现到视图的渲染上.简单来说就是构建一个描述文档结构与内容的 ...

  4. fiddler断点应用

    一.作用 1.模拟网络中断 2.断点时篡改数据 3.测试时做一些极端测试 二.断点步骤 1.全局断点 1)全局断点的两种方式 点击状态栏空白框,点击一下请求前断点,两下请求后断点,三下取消断点 Rul ...

  5. element-ui $prompt输入弹框和$confirm确认弹框用法--输入框默认值、校验、阻止关闭等问题

    可输入弹框 $prompt 1.默认值.校验 this.$prompt( '请输入文件夹名称:', '提示', { confirmButtonText: '确定', cancelButtonText: ...

  6. Spring 中@Autowired,@Resource,@Inject 注解实现原理

    使用案例 前置条件: 现在有一个 Vehicle 接口,它有两个实现类 Bus 和 Car ,现在还有一个类 VehicleService 需要注入一个 Vehicle 类型的 Bean: publi ...

  7. 20K star!让网页设计秒变手绘风,这个开源库太有创意了!

    "Rough.js 是一个轻量级的图形库(仅8KB),能够为网页元素赋予自然的手绘质感.通过独特的算法模拟人类绘画的不规则性,开发者只需几行代码即可为图表.流程图.UI组件等数字内容注入生动 ...

  8. 【HUST】网安纳米|2023年研究生纳米技术考试参考

    目录 1 纳米材料是什么 2 纳米材料的结构特性 3 纳米结构的其他特性 4 纳米结构的检测技术 5 纳米材料的应用 打印建议:PPT彩印(这样重点比较突出),每面12张PPT,简单做一下关键词目录, ...

  9. pyqt点击右上角关闭界面但子线程仍在运行

    现象: 通过右上角的叉关闭图形界面后,程序运行的子线程却不会被自动关闭,依然留存在系统中 原因: 子线程没有正确关闭 解决方法: 1.将子线程设置成守护线程 self.your_thread = th ...

  10. Palindrome Number——LeetCode进阶路⑨

    //原题链接https://leetcode.com/problems/palindrome-number/ 题目描述 Determine whether an integer is a palind ...