0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

API 网关详细介绍(下)

jf_78858299 来源:Steve的后端小栈 作者: Steave  2023-05-04 17:28 次阅读

三、Kong Admin API

部署好 Kong 之后,则需要将我们自己的接口加入到 Kong 的中管理,Kong 提供了比较全面的RESTful API,每个版本会有所不同,详细可以参考官网:docs.konghq.com/2.0.x/admin… 。Kong 管理 API 的端口是 8001(8444),服务、路由、配置都是通过这个端口进行管理,所以部署好之后页面可以直接访问 http://102.168.1.200:8001

这里我们先来了解一下如何使用 RESTful 管理接口来管理 Service (服务)、Route(路由)。

  1. 添加一个Service

curl -i -X POST http://localhost:8001/services --data 'name=hello-service' --data 'url=http://localhost:9000/hello'

图片

curl -i -X POST --url http://localhost:8001/services/ --data 'name=example-service' --data 'url=http://www.baidu.com/'

2.查询Service

curl http://192.168.1.200:8001/services/hello-service
  curl -i -X POST --url http://localhost:8001/services/example-service/routes --data 'hosts[]=example.com'

图片

图片

3.为 Service 添加一个 Route

curl -i -X POST --url http://192.168.1.200:8001/services/hello-service/routes  --data 'paths[]=/hello' --data name=hello-route

图片

4.测试

我们可以通过访问 http://192.168.1.200:8000/hello 来验证一下配置是否正确。

Kong代理:
 url http://192.168.1.200:8000/hello
 Hello world !

真实服务: http://192.168.1.200:9000/hello/

前面的操作就等效于配置 nginx.conf:

server {
   listen 8000;
   location /hello {
     proxy_pass http://192.168.1.200:9000/hello;
   }
 }

不过,前面的配置操作都是动态的,无需像 Nginx一样需要重启。

Service是抽象层面的服务,它可以直接映射到一个物理服务,也可以指向一个Upstream(同Nginx中的Upstream,是对上游服务器的抽象)。Route是路由的抽象,它负责将实际的请求映射到 Service。除了Serivce、Route之外,还有 Tag、Consumer、Plugin、Certificate、SNI、Upstream、Target等,读者可以从 官网的介绍文档 中了解全貌。

下面在演示一个例子,修改 Service,将其映射到一个 Upstream:

添加 name为 hello-upstream 的 Upstream

curl -i -X POST http://192.168.1.200:8001/upstreams --data name=hello-upstream

图片

为 mock-upstream 添加 Target,Target 代表了一个物理服务(IP地址/hostname + port的抽象),一个Upstream可以包含多个Targets

curl -i -X POST http://192.168.1.200:8001/upstreams/hello-upstream/targets  --data target="192.168.1.200:9000"

图片

修改 hello-service,为其配置

curl -i -X PATCH  http://192.168.1.200:8001/services/hello-service --data url='http://hello-upstream/hello'

图片

上面的配置等同于 Nginx 中的nginx.conf配置 :


upstream hello-upstream{
   server 192.168.1.200:8001;
 }

 server {
   listen 8000;
   location /hello {
     proxy_pass http://hello-upstream/hello;
   }
 }

这里的配置我们也可以通过管理界面来操作。上面操作完之后,在Konga中也有相关信息展示出来:

图片

图片

图片

四、Kong Plugins

Kong通过插件Plugins实现日志记录、安全检测、性能监控和负载均衡等功能。下面我将演示一个例子,通过启动 apikey 实现简单网关安全检验。

  1. 配置 key-auth 插件

curl -i -X POST http://192.168.1.200:8001/routes/hello-route/plugins --data name=key-aut

图片

这个插件接收 config.key_names 定义参数,默认参数名称 ['apikey']。在 HTTP 请求中 header 和 params 参数中包含 apikey 参数,参数值必须 apikey 密钥,Kong 网关将坚持密钥验证通过才可以访问后续服务。

此时我们使用 curl -i http://192.168.1.200:8000/hello/ 来验证一下是否生效,如果如下所示,访问失败(HTTP/1.1 401 Unauthorized,"No API key found in request" ),说明 Kong 安全机制生效了。

图片

在 Konga 中我们也可以看到相关记录:

图片

2.为Service添加服务消费者(Consumer)

定义消费者访问 API Key, 让他拥有访问 hello-service 的权限。

创建消费者 Hidden:

curl -i -X POST http://192.168.1.200:8001/consumers/  --data username=Hidden

图片

创建成功之后,返回:


{"custom_id":null,"created_at":1678268549,"id":"e097fc26-ccd0-4fa7-b370-f6eec4797d5f","tags":null,"username":"Hidden"}

之后为消费者 Hidden 创建一个 api key,输入如下命令:

curl -i -X POST http://192.168.1.200:8001/consumers/Hidden/key-auth/  --data key=123456

图片


{"created_at":1678268632,"consumer":{"id":"e097fc26-ccd0-4fa7-b370-f6eec4797d5f"},"id":"d560969d-ff8b-4204-a09f-3474217a4a29","tags":null,"ttl":null,"key":"123456"}

现在我们再来验证一下 http://192.168.1.200:8000/hello:

curl -i http://192.168.1.200:8000/hello/ --header "apikey:123456"

返回:

HTTP/1.1 200 OK
 Content-Type: text/html; charset=utf-8
 Content-Length: 14
 Connection: keep-alive
 Date: Tue, 18 Oct 2022 01:32:30 GMT
 Server: WSGIServer/0.1 Python/2.7.5
 X-Frame-Options: SAMEORIGIN
 X-Kong-Upstream-Latency: 13
 X-Kong-Proxy-Latency: 19
 Via: kong/1.5.1

 Hello world !

其他的插件可选

图片

或者进入插件仓库去了解

https://docs.konghq.com/hub/

图片

Kong 网关插件概括为如下:

  • 身份认证插件:Kong 提供了 Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication 认证实现。
  • 安全控制插件:ACL(访问控制)、CORS(跨域资源共享)、动态 SSL、IP 限制、爬虫检测实现。
  • 流量控制插件:请求限流(基于请求计数限流)、上游响应限流(根据 upstream 响应计数限流)、请求大小限制。限流支持本地、Redis 和集群限流模式
  • 分析监控插件:Galileo(记录请求和响应数据,实现 API 分析)、Datadog(记录 API Metric 如请求次数、请求大小、响应状态和延迟,可视化 API Metric)、Runscope(记录请求和响应数据,实现 API 性能测试和监控)。
  • 协议转换插件:请求转换(在转发到 upstream 之前修改请求)、响应转换(在 upstream 响应返回给客户端之前修改响应)。
  • 日志应用插件:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly 等。

五、总结

Kong 作为 API 网关提供了 API 管理功能及围绕 API 管理实现了一些默认的插件,另外还具备集群水平扩展能力,从而提升整体吞吐量。Kong 本身是基于 OpenResty,可以在现有 Kong 的基础上进行一些扩展,从而实现更复杂的特性。虽然有一些特性 Kong 默认是缺失的,如 API 级别的超时、重试、fallback 策略、缓存、API 聚合、AB 测试等,这些功能插件需要企业开发人员通过 Lua 语言进行定制和扩展。综上所述,Kong API 网关默认提供的插件比较丰富, 适应针对企业级的 API 网关定位。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网关
    +关注

    关注

    9

    文章

    4444

    浏览量

    51057
  • API
    API
    +关注

    关注

    2

    文章

    1499

    浏览量

    61962
  • nginx
    +关注

    关注

    0

    文章

    149

    浏览量

    12170
  • go语言
    +关注

    关注

    1

    文章

    158

    浏览量

    9047
收藏 人收藏

    评论

    相关推荐

    API信息全掌控,方便你的日志管理——阿里云推出API网关打通日志服务

    摘要: 近日,阿里云API网关对接了日志服务,可以输出用户在API网关产生的API调用日志,目前支持将
    发表于 02-06 15:24

    哪位大神可以详细介绍MQTT API吗?

    MQTT API介绍
    发表于 04-02 07:24

    AI边缘计算网关介绍

    AI边缘计算网关介绍:智能网关支持物联网硬件多协议接入,适应各种无线通信协议场景。只需通过硬件板卡的快速装卸,就可以实现功能的自由增删。同时智能网关运行Mosquitto等服务实现了M
    发表于 07-26 06:41

    介绍ZigBee网关的架构

    前面的文章中,我们通过实际案例介绍了 ZigBee 网关的架构,相信大家对于网关该如何挑选合适的器件来实现相应功能有了一定了解。那么本文将从硬件设计的角度来继续网关的话题!硬件电路是
    发表于 11-11 08:18

    介绍LoRaWAN网关的技术基础及其工作原理

    /软件组件四、总结在上一篇文章中我大概解释了什么是LoRaWAN网关。今天我将会更详细地给大家介绍LoRaWAN网关的技术基础及其工作原理。只有了解这些,我们才能让我们更好地了解
    发表于 02-14 07:45

    基于Python的商标信息查询api调用代码实例的详细资料免费下载

    本文档的主要内容详细介绍的是基于Python的商标信息查询api调用代码实例的详细资料免费下载。
    发表于 09-06 15:00 12次下载
    基于Python的商标信息查询<b class='flag-5'>api</b>调用代码实例的<b class='flag-5'>详细</b>资料免费下载

    ESP8266 Node MCU-API 函数的详细中文说明

    本文档的主要内容详细介绍的是ESP8266的Node MCU-API 函数的详细中文说明。
    发表于 09-21 08:00 103次下载

    什么是API网关为什么需要API网关

    API网关可以看做系统与外界联通的入口,我们可以在网关进行处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等。
    发表于 12-23 09:57 1.3w次阅读
    什么是<b class='flag-5'>API</b><b class='flag-5'>网关</b>为什么需要<b class='flag-5'>API</b><b class='flag-5'>网关</b>

    ESP8266字符串API详细概述

    本文档的主要内容详细介绍的是ESP8266字符串API详细概述。
    发表于 07-17 08:00 1次下载
    ESP8266字符串<b class='flag-5'>API</b>的<b class='flag-5'>详细</b>概述

    Service Mesh和API网关正在逐步融合

    API Gateway 之间的关系,这个问题过去两年间经常被问起,社区也有不少文章和资料给出解答。其中不乏 Christian Posta 这样的网红给出过深度介绍。我在这里做一个资料的整理和汇总,结合
    的头像 发表于 10-10 16:39 1202次阅读

    关于API网关策略的知识分享

    近些年随着云原生和微服务架构的日趋发展,API 网关以流量入口的角色在技术架构中扮演着越来越重要的作用。API 网关主要负责接收所有请求的流量并进行处理转发至上游服务,
    的头像 发表于 02-11 10:45 1185次阅读

    API 网关详细介绍(上)

    业界有很多流行的 API 网关,开源的有 Nginx、Netflix Zuul、Kong 等。当然 Kong 还有商业版,类似的商业版网关还有 GoKu API Gateway 和 T
    的头像 发表于 05-04 17:28 1521次阅读
    <b class='flag-5'>API</b> <b class='flag-5'>网关</b><b class='flag-5'>详细</b><b class='flag-5'>介绍</b>(上)

    为什么需要 API 网关

    API 网关API 全生命周期管理的关键基础组件,负责生产环境中 API 的配置、发布、版本回滚、安全、负载均衡等。API
    的头像 发表于 05-04 17:47 777次阅读
    为什么需要 <b class='flag-5'>API</b> <b class='flag-5'>网关</b>?

    企业怎么选择API网关

    、腾讯公司的QQ开发平台、微信开放平台。 Open API开放平台必然涉及到客户应用的接入、API权限的管理、调用次数管理等,必然会有一个统一的入口进行管理,这正是API网关可以发挥作
    的头像 发表于 05-23 11:05 661次阅读
    企业怎么选择<b class='flag-5'>API</b><b class='flag-5'>网关</b>

    api网关 kong 教程入门

    统一权限控制、接口请求访问日志统计 安全,是保护内部服务而设计的一道屏障 开源-最大好处 当然也有一个很大的缺点,api-gw很可能成为性能瓶颈,因为所有的请求都经过这里,可以通过横向扩展和限流解决这个问题。 在众多API GATEWAY框架中,Mashape开源的高性
    的头像 发表于 11-10 11:39 775次阅读
    <b class='flag-5'>api</b><b class='flag-5'>网关</b> kong 教程入门