首页 > 其他分享 >Kong入门学习实践(5)API网关路由转发

Kong入门学习实践(5)API网关路由转发

时间:2023-06-26 19:00:45浏览次数:61  
标签:API 网关 KONG api kong Kong 路由

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

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

标签:API,网关,KONG,api,kong,Kong,路由
From: https://www.cnblogs.com/edisonchou/p/edc_kong_learning_notes_chap5.html

相关文章

  • JavaScript 常用 API 集合
     一、节点1.1节点属性Node.nodeName//返回节点名称,只读Node.nodeType//返回节点类型的常数值,只读Node.nodeValue//返回Text或Comment节点的文本值,只读Node.textContent//返回当前节点和它的所有后代节点的文本内容,可读写Node.baseURI//返回当前网页的绝对路径......
  • 【1688阿里巴巴api接口】获得店铺详情数据PHP展示示例
    ​店铺详情API接口的作用是获取一个电商平台上某个店铺的详细信息,包括店铺名称、销售商品数量、好评度、logo、店铺描述等。开发者可以通过该接口获取到店铺的原始数据,方便进行数据分析、爬取等操作。通过该接口获取到的店铺详情数据可以结合其他数据进行深度挖掘,例如可以将店铺......
  • 作为一个客户经理你一个如何给客户介绍API接口
    随着科技的发展,API(ApplicationProgrammingInterface,应用程序接口)的应用已经逐渐普及,而API接口作为现代企业实现智能化运营和管理的重要工具之一,也备受关注。作为一名客户经理,向客户介绍API接口,需要做好充分的准备工作和沟通,下面是一些我在实践中总结的建议:确定客户需求:在与客......
  • Kubernetes编程——通过命令行使用 API
    通过命令行使用API 长话短说,我们将使用以batchAPI组为例来讲cli相关的操作。 首先,需要在终端运行下面的命令:[root@localhost~]#kubectlproxy--port=8089Startingtoserveon127.0.0.1:8089这个命令把kubernetesAPI服务代理到了本地,并处理了有关身......
  • Redfish是一种现代、开放且标准化的远程管理和监控接口,由DMTF(Distributed Management
    Redfish是一种现代、开放且标准化的远程管理和监控接口,由DMTF(DistributedManagementTaskForce)开发和维护。它基于RESTfulAPI设计,使用JSON或OData格式进行数据交换。Redfish旨在提供简化、灵活和可互操作的远程管理解决方案,取代或与传统的远程管理技术(如IPMI)配合使用。Redfish......
  • RESTful API(Representational State Transfer API)是一种设计和构建网络应用程序的软件
    RESTfulAPI(RepresentationalStateTransferAPI)是一种设计和构建网络应用程序的软件架构风格。它是一种基于HTTP协议的API设计理念,旨在实现系统的可伸缩性、简洁性、可靠性和可扩展性。RESTfulAPI的设计原则可以概括为以下几点:资源(Resource):将系统中的数据和功能抽象为资源,每......
  • 通过网关添加过滤器【SpringCloud】
    spring:application:name:gateway#服务名称cloud:nacos:server-addr:localhost:8848#nacos地址gateway:routes:#网关路由配置-id:itemservice#路由id,自定义,只要唯一即可#uri:http://127.0.0.1:8081#路由......
  • 原子能力业务化网关架构设计之功能需求
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址技术架构概览A原子能力接口已具备,不在本架构讨论范围内,是一个黑盒,也不对齐进行业务修改供业务调用原子能力业务化目标实现层(本质是网关)业务处理根据业务需求实现相关功能路由转发根据请求的URL路径,将请求转发给相......
  • html5之文件api
    这篇主要是探讨一下HTML5的文件API 1、FileList对象与file对象  FileList对象表示用户选择文件的列表,在HTML5中,加了multiple属性,file控件允许放置多个文件。控件内的每一个用户选择的文件都是一个file对象FileList对象是这些file对象的列表file对象有两个属性:name属性表示文......
  • 【拼多多商品详情数据】API接口获得宝贝详情数据、商品标题数据等Java调用示例
    ​拼多多商品详情API接口的作用是获取拼多多平台上某个商品的详细信息,包括商品标题、价格、图片、规格、参数、店铺信息等。开发者可以通过该接口获取到商品的原始数据,方便进行数据分析、价格比较、爬取等操作。通过该接口获取到的商品详情数据可以结合其他数据进行深度挖掘,例如......