API 网关详细介绍(下)

网友投稿 134 2024-01-24

三、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 管理接口来管理 Serv

ice (服务)、Route(路由)添加一个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.b

aidu.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代理: urlhttp://192.168.1.200:8000/hello。

Helloworld ! 真实服务: http://192.168.1.200:9000/hello/前面的操作就等效于配置 nginx.conf:复制server { listen8000;

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{ server192.168.1.200:8001; } server {

listen8000; location /hello { proxy_pass http://hello-upstream/hello; } } 这里的配置我们也可以通过管理界面来操作。

上面操作完之后,在Konga中也有相关信息展示出来:

四、Kong PluginsKong通过插件Plugins实现日志记录、安全检测、性能监控和负载均衡等功能下面我将演示一个例子,通过启动 apikey 实现简单网关安全检验配置 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/consume。

rs/ --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.1200 OK Content-Type: text/html; charset=utf-8Content-Length: 14Connection

: keep-alive Date: Tue, 18 Oct 202201:32:30 GMT Server: WSGIServer/0.1Python/2.7.5X-Frame-Options: SAMEORIGIN

X-Kong-Upstream-Latency: 13X-Kong-Proxy-Latency: 19Via: kong/1.5.1Hello 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、Stat。

sD、Loggly 等五、总结Kong 作为 API 网关提供了 API 管理功能及围绕 API 管理实现了一些默认的插件,另外还具备集群水平扩展能力,从而提升整体吞吐量Kong 本身是基于 OpenResty,可以在现有 Kong 的基础上进行一些扩展,从而实现更复杂的特性。

虽然有一些特性 Kong 默认是缺失的,如 API 级别的超时、重试、fallback 策略、缓存、API 聚合、AB 测试等,这些功能插件需要企业开发人员通过 Lua 语言进行定制和扩展综上所述,Kong API 网关默认提供的插件比较丰富, 适应针对企业级的 API 网关定位。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Katalon:API测试
下一篇:如何设计API返回码(错误码)?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~