在上一篇文章中,我们完成了Kong单机环境的搭建,这篇文章我们就手搓一个API然后通过Kong对外提供服务,探索API网关是如何将内部API暴露给外部用户的。
微服务系列传送门:
1、 为什么需要API网关
2、 Kong初探
3、 Kong安装配置
服务器:CentOS7.6 X86_64
API:Django框架写的API,用于在随机的delay后返回请求URL的地址和服务器主机名组成的对象(镜像地址sgccr.ccs.tencentyun.com/experiment/api-hostinfo-randomdelay:v0.0.1)
Nginx代理内部API时,是通过http->server->location->proxy_pass完成的。Kong代理API流程如下:
Kong网关的Service对象是一种配置对象,用于定义一组Pod的IP地址和端口,以及它们之间的通信规则。Service对象的主要作用是将请求负载均衡到多个Pod,提高服务的可用性和容错性。
它可以帮助我们更灵活地管理和控制服务的负载均衡、DNS解析、服务发现等功能。与Nginx相比,Kong的Service对象具有更丰富的功能和更高的灵活性。
Service对象参数列表
curl -s http://localhost:8001/services/example_service |jq
{
"tls_verify_depth": null,
"client_certificate": null,
"protocol": "http",
"id": "c6396272-655d-4c2c-ba84-943ce2570b36",
"created_at": 1699586315,
"connect_timeout": 60000,
"read_timeout": 60000,
"updated_at": 1699599043,
"host": "example_upstream",
"path": null,
"name": "example_service",
"enabled": true,
"retries": 5,
"write_timeout": 60000,
"ca_certificates": null,
"tags": null,
"tls_verify": null,
"port": 80
}
Kong网关的Route对象与Nginx的location指令类似,根据请求的URL和其他属性将请求映射到上游服务。Route对象可以看作是Kong网关中的虚拟主机,它可以将多个不同的域名或路径映射到同一个上游服务。
但它们之间有一些区别。首先,Kong的Route对象是动态配置的,可以通过API进行添加、修改和删除,而Nginx的location指令是静态配置的,需要手动修改配置文件。其次,Kong的Route对象可以根据请求的属性(如Header、Query参数等)进行匹配,而Nginx的location指令只能根据URL的路径进行匹配。最后,Kong的Route对象可以与其他Kong对象(如Service、Plugin等)进行关联,实现更丰富的功能,而Nginx的location指令只能与上游服务进行关联。
使用docker启动API服务
# 查找image ID
[root@VM-4-13-centos kong]# docker images | grep delay
http://sgccr.ccs.tencentyun.com/experiment/api-hostinfo-randomdelay
# 启动image
[root@VM-4-13-centos kong]# docker run -d -p 8081:8000 9e857de79af8
# 验证API可用性
[root@VM-4-13-centos kong]# curl -s http://127.0.0.1:8081/api/random_value/
{"address": "127.0.0.1:8081", "hostname": "7f1edf0ec3f1"}
这里service name我们设置为example_service,url设置为API的url127.0.0.1:8081
备注:API使用参考上一章的Kong安装配置
[root@VM-4-13-centos kong]# curl -i -s -X POST http://localhost:8001/services --data name=example_service --data url='http://127.0.0.1:8081'
这里route name我们设置为example_route,前缀设置为v1,绑定到example_service
[root@VM-4-13-centos kong]# curl -i -X POST http://localhost:8001/services/example_service/routes --data 'paths[]=/v1' --data name=example_route
浏览器访问验证,如下图,测试通过
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。