Kong网关

Kong网关

一、kong网关核心概念

1. Upstream

upstream 对象表示虚拟主机名,可用于通过多个服务对传入请求进行负载远的

2. Target

目标ip地址/主机名,其端口表示后端服务的实例。每个上游都可以有多个Target,并且可以动态添加Target。

3. Service

服务实例是每个上游服务的抽象。服务的主要属性是它的URL,其可以被设置为单个串或者通过指定其protocol,host,port和path。服务与路由相关联(服务可以有许多与之关联的路由)。路由是kong的入口点,并定义匹配客户端请求的规则。一量匹配路由,kong就会将请求代理到其关联的服务。

4. Route

路由实体定义规则以匹配客户端的请求,每个Route与一个Service相关联,一个服务可能有多个与之关联的路由。与给定路由匹配的每个请求都将代理到其关联的Service上。可以配置的字段有:

  • hosts
  • paths
  • methods

Service和Route的组合提供了一种强大的路由机制,通过它可以在kong中定义细粒度的入口点,从而使基础架构路由到不同上游服务。

5. Consumer

Consumer 对象表示服务的使用者或者用户,你可以依靠kong作为主数据库存储,也可以将使用者列表与数据库映射,以保持Kong与现有的主数据存储之间的一致性。

6. Plugin

插件实体表示将在httpygfi/响应生命周期执行的插件配置。它是为在kong后面运行的服务添加功能的。

将插件配置添加到服务时,客户端向该服务发出的每个请求都将运行所述插件。如果某个特定消费者需要将插件调整为不同的值,你可以通过 创建一个单独的插件实例,通过service和consumer字段指定服务和消费者。

对应关系

Upstream : target -> 1:n

Service:Upstream -> 1:1 or 1:0 (service 可以直接指向具体的Target,相当于不做负载均衡)

Service:Route -> 1:n

Client 请求的流量通过Route指向与之相关的Service,如果配置插件的话就会作用插件,Service接到流量后给到相应的Upstream的服务上面。

二、kong API操作

配置服务

通过向Admin发送Http请求来向Kong添加服务

{
 "connect_timeout":60000,
 "created_at":1587869247,
 "host":"test-service.com",
 "id":"dddddddddddddddddddddddddddd",
 "name":"test-service",
 "path":"/",
 "port":80,
 "protocol":"http",
 "read_timeout":60000,
 "retries":5,
 "updated_at":1587869247,
 "write_timeout":60000
}

url参数是一个简化参数,用于一次性添加protocol,host,port和path。

路由匹配规则

现在让我们讨论kong如何匹配针对路由的已配置host,path和methods属性的请求。请注意,所有这三个字段都是可选的,但必须至少指定其中一个。

对于匹配路线的请求:

  • 请求必须包含所有已配置的字段
  • 请求中的字段必须至少与其中一个配置值匹配(当字段配置接收一个或者多个值时,请求只需要其中一个值被视为匹配)
  • kong route 中的host的作用是什么,有什么意义哪些场景会用到设置多个host呢?

三、Kong运维

kong version   #查看版本

1. 运行目录

/usr/local/kong Kong的运行目录
/usr/local/kong/pids/nginx.pid nginx-master进程号
/usr/local/kong/logs/access.log 数据口的访问日志文件
/usr/local/kong/logs/admin_access.log 管理口的访问日志
/usr/local/kong/logs/error.log 错误日志

2.监听端口

#数据口:8000
curl http://127.0.0.1:8000
#管理口:8001
curl http://127.0.0.1:8001/
#查看连接数统计
curl http://127.0.01:8001/status 2>/dev/null | jq .server
{
  "connections_writing": 1,
  "total_requests": 13,
  "connections_handled": 13,
  "connections_accepted": 13,
  "connections_reading": 0,
  "connections_active": 1,
  "connections_waiting": 0
} 
#查看内存统计
curl http://127.0.01:8001/status 2>/dev/null | jq .memory
{
  "workers_lua_vms": [
    {
      "http_allocated_gc": "0.05 MiB",
      "pid": 1310
    }
  ],
  "lua_shared_dicts": {
    "kong_rate_limiting_counters": {
      "allocated_slabs": "0.08 MiB",
      "capacity": "12.00 MiB"
    },
    "kong_locks": {
      "allocated_slabs": "0.06 MiB",
      "capacity": "8.00 MiB"
    },
    "kong_healthchecks": {
      "allocated_slabs": "0.04 MiB",
      "capacity": "5.00 MiB"
    },
    "kong_cluster_events": {
      "allocated_slabs": "0.04 MiB",
      "capacity": "5.00 MiB"
......

3. 监控指标

  • 连接数
  • 内存
  • 错误日志
posted @   LukeZhang_sz  阅读(1453)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示