前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务系列:通过Kong提供API服务

微服务系列:通过Kong提供API服务

原创
作者头像
AIOPS
发布2023-11-10 19:28:06
3941
发布2023-11-10 19:28:06
举报
文章被收录于专栏:高可用高可用

1. 背景

在上一篇文章中,我们完成了Kong单机环境的搭建,这篇文章我们就手搓一个API然后通过Kong对外提供服务,探索API网关是如何将内部API暴露给外部用户的。

微服务系列传送门:

1、 为什么需要API网关

2、 Kong初探

3、 Kong安装配置

2. 实验环境

服务器:CentOS7.6 X86_64

API:Django框架写的API,用于在随机的delay后返回请求URL的地址和服务器主机名组成的对象(镜像地址sgccr.ccs.tencentyun.com/experiment/api-hostinfo-randomdelay:v0.0.1

3. API对外提供服务流程

2.1 访问流程

Nginx代理内部API时,是通过http->server->location->proxy_pass完成的。Kong代理API流程如下:

2.2 service功能介绍

Kong网关的Service对象是一种配置对象,用于定义一组Pod的IP地址和端口,以及它们之间的通信规则。Service对象的主要作用是将请求负载均衡到多个Pod,提高服务的可用性和容错性。

它可以帮助我们更灵活地管理和控制服务的负载均衡、DNS解析、服务发现等功能。与Nginx相比,Kong的Service对象具有更丰富的功能和更高的灵活性。

Service对象参数列表

代码语言:javascript
复制
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
}

2.3 Route对象介绍

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指令只能与上游服务进行关联。

4. 开始实战

4.1 启动API服务

使用docker启动API服务

代码语言:javascript
复制
# 查找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"}

4.2 配置Service

这里service name我们设置为example_service,url设置为API的url127.0.0.1:8081

备注:API使用参考上一章的Kong安装配置

代码语言:javascript
复制
[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' 

4.3 配置Route

这里route name我们设置为example_route,前缀设置为v1,绑定到example_service

代码语言:javascript
复制
[root@VM-4-13-centos kong]# curl -i -X POST http://localhost:8001/services/example_service/routes --data 'paths[]=/v1' --data name=example_route

5. 访问验证

浏览器访问验证,如下图,测试通过

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景
  • 2. 实验环境
  • 3. API对外提供服务流程
    • 2.1 访问流程
      • 2.2 service功能介绍
        • 2.3 Route对象介绍
        • 4. 开始实战
          • 4.1 启动API服务
            • 4.2 配置Service
              • 4.3 配置Route
              • 5. 访问验证
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
              http://www.vxiaotou.com