Kong API Gateway 深度剖析与实战指南 [复制链接]
发表于 2025-12-18 15:18:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1. 简介

1.1 什么是Kong API Gateway?

Kong 是一款广泛使用的开源 API Gateway 和微服务管理工具,最初由 Mashape(现为 Kong Inc.)在 2015 年推出。它基于 Nginx 和 OpenResty 构建,旨在为当代应用步调提供高性能、可扩展的 API 网关办理方案。
Kong 的焦点功能是资助开辟者和企业管理 API 哀求的路由、认证、安全、流量控制以及其他与 API 生命周期干系的使命。无论是单体应用照旧微服务架构,Kong 都可以高效地帮忙处置处罚复杂的 API 管理需求。
1.2 Kong 的紧张功能和特点


  • 性能和可扩展性
    Kong 以其极高的性能著称,可以或许轻松处置处罚每秒数万次哀求,同时支持横向扩展,以顺应业务增长。
  • 插件化架构
    Kong 提供了丰富的插件生态体系,支持开箱即用的功能扩展,如身份认证、流量控制、日志日志纪录和分析等。开辟者也可以根据需求开辟自界说插件。
  • 支持多种协议
    Kong 支持 HTTP、HTTPS、gRPC 和 WebSocket 等多种协议,可以或许适配各种当代应用的通讯需求。
  • 多租户管理
    Kong 支持多租户情况,可以为差异团队、应用或客户提供隔离的 API 管理本领。
  • 强盛的安全机制
    内置的安全功能支持多种身份认证方式(如 OAuth2.0、JWT、API Key 等),同时可以与外部身份提供商集成。
  • 容器云原生支持
    Kong 与容器化和云原生技能无缝集成,可以或许运行在 Kubernetes、Docker 等情况中,方便快速摆设和扩展。
  • 多语言支持
    Kong 的插件使用 Lua 编写,但其 API 是语言无关的,任何语言的应用都可以轻松与 Kong 集成。
  • 社区与企业支持
    Kong 提供开源社区版(Kong Gateway)和付费的企业版(Kong Enterprise),以满足差异规模企业的需求。
1.3 为什么选择 Kong?



  • 适配当代架构:在微服务容器化和 DevOps 的配景下,Kong 提供了企业级的办理方案来处置处罚 API 管理的复杂性。
  • 开源社区活泼:得益于开源社区的支持,Kong 拥有丰富的文档、教程和插件生态,且发展快速。
  • 机动性:无论是摆设到裸机、捏造机,照旧当代容器编排平台,Kong 都可以或许快速适配,支持动态扩展。
2. Kong 的焦点架构

2.1 Kong Gateway 的工作原理

Kong 的焦点是基于 Nginx 和 OpenResty 构建的高性能署理服务器。它的紧张职责是吸收客户端的 API 哀求,将这些哀求根据设置路由到后端服务,同时实行一系列预界说的功能(如认证、限流、日志日志纪录等)。Kong 的运行可以分别为三个紧张阶段:

  • 吸收哀求:客户端发送哀求到 Kong 网关,Kong 根据哀求的 URL、方法和头信息来匹配设置的服务和路由。
  • 实行插件:匹配乐成后,Kong 会在哀求和相应的生命周期中实行干系插件(如身份验证、速率限定等)。
  • 转发哀求:颠末处置处罚后,Kong 将哀求转发到后端服务,并将相应返回给客户端。
这种模块化的计划使得 Kong 非常机动,可轻松扩展功能并顺应复杂的业务需求。
2.2 数据平面和控制平面的区别

Kong 的架构接纳了当代化的分布式计划,紧张分为 数据平面(Data Plane)控制平面(Control Plane)

  • 数据平面
    数据平面负责处置处罚实际的 API 流量,包罗吸收客户端哀求、实行插件功能并转发哀求到后端服务。数据平面的节点通常是无状态的,便于横向扩展。
  • 控制平面
    控制平面负责管理和设置 Kong 的运行状态。它存储 API 设置、路由规则和插件数据,并将这些设置同步到数据平面的节点。控制平面通常必要毗连到一个数据库(如 PostgreSQL)来存储元数据。
在生产情况中,控制平面和数据平面可以分开摆设,以实现更高的可靠性和扩展性。
2.3 插件机制先容

Kong 的插件机制是其焦点功能之一,允许用户在哀求和相应的生命周期中自界说逻辑。这些插件是 Lua 脚本,运行在 OpenResty 的实行情况中。插件分为以下几个阶段实行:

  • 访问阶段(Access Phase)
    在哀求进入后端服务之前实行,常用于身份验证、限流和权限控制。
  • 认证阶段(Authentication Phase)
    验证哀求的身份是否正当,确保只有授权用户可以访问服务。
  • 变更阶段(Transformation Phase)
    可以修改哀求的内容(如头信息、参数)或相应的内容(如相应体)。
  • 日志日志阶段(Log Phase)
    在哀求完成后实行,纪录哀求和相应的干系数据,用于分析和监控监控
2.4 插件的分类



  • 安全插件:如 OAuth2、JWT、API Key 验证等。
  • 流量控制插件:如速率限定、毗连限定等。
  • 观察与监控监控插件:如日志纪录、分布式追踪、Prometheus 集成等。
  • 自界说插件:用户可以编写 Lua 脚本开辟自界说功能。
2.5 插件的加载方式



  • 全局插件:应用于全部服务和路由。
  • 服务级插件:仅应用于特定的服务。
  • 路由级插件:仅应用于特定的路由。
  • 消耗者级插件:与特定的 API 消耗者干系联。
Kong 的插件机制为其提供了强盛的扩展本领,实用于从简单到复杂的各种场景。
3. Kong 的安装与摆设

Kong 提供了多种安装和摆设方式,可以运行在裸机、捏造机、Docker 容器和 Kubernetes 等多种情况中。以下内容将涵盖常见的安装和摆设方法。
3.1 安装前的准备工作

在安装 Kong 之前,必要确保以下情况准备停当:

  • 利用体系要求

    • 支持的利用体系包罗 CentOS、Ubuntu、Debian、MacOS 等。
    • 假如是容器化摆设,必要预装 Docker 或 Kubernetes。

  • 数据库

    • Kong 支持两种模式:

      • DB-less 模式:无需数据库,实用于简单设置或静态情况。
      • 传统模式:必要使用 PostgreSQL 或 Cassandra 数据库存储设置。

    • PostgreSQL 是更常见的选择,需确保数据库可用。

  • 依靠工具

    • 须要工具包罗 curl、wget、tar 等。
    • 假如必要安装 Kong 企业版,需获取授权密钥。

3.2 安装 Kong:单机模式

单机模式得当测试或开辟情况,以下以 Ubuntu 体系为例:

  • 更新体系
    1. sudo apt update && sudo apt upgrade
    复制代码
  • 添加 Kong 的 APT 堆栈
    1. echo "deb [trusted=yes] https://download.konghq.com/gateway-3.x-ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/kong.list
    2. sudo apt update
    复制代码
  • 安装 Kong
    1. sudo apt install -y kong
    复制代码
  • 初始化数据库(假如使用数据库模式):
    1. kong migrations bootstrap
    复制代码
  • 启动 Kong
    1. kong start
    复制代码
  • 验证安装
    在欣赏器中访问 http://localhost:8001,假如返回 Kong 的管理 API 信息,则安装乐成。
3.3 安装 Kong:集群模式

在生产情况中,通常会摆设多台 Kong 实例以实现高可用和负载均衡。

  • 摆设数据库

    • 使用 PostgreSQL 作为后端数据库,并设置多实例访问。

  • 设置 Kong 实例

    • 编辑 /etc/kong/kong.conf 文件,确保全部 Kong 实例指向雷同的数据库。
    1. database = postgres
    2. pg_host = <PostgreSQL-Host>
    3. pg_port = 5432
    4. pg_user = kong
    5. pg_password = <your-password>
    6. pg_database = kong
    复制代码

  • 初始化数据库(只在第一个实例上运行):
    1. kong migrations bootstrap
    复制代码
  • 启动多个 Kong 实例
    在每台服务器上运行:
    1. kong start
    复制代码
  • 负载均衡

    • 在前端使用负载均衡器(如 Nginx 或 AWS ELB),将流量分配到多个 Kong 实例。

3.4 容器化摆设(Docker 和 Kubernetes)


  • 使用 Docker 摆设 Kong

    • 拉取 Kong 的 Docker 镜像:
      1. docker pull kong
      复制代码
    • 运行容器(DB-less 模式):
      1. docker run -d --name kong -p 8000:8000 -p 8443:8443 -p 8001:8001 kong:latest
      复制代码

  • 使用 Kubernetes 摆设 Kong

    • 安装 kubectl 和 Helm 工具。
    • 添加 Kong 的 Helm 堆栈:
      1. helm repo add kong https://charts.konghq.com
      2. helm repo update
      复制代码
    • 摆设 Kong:
      1. helm install kong kong/kong --set ingressController.installCRDs=false
      复制代码
    • 验证摆设:
      1. kubectl get pods -n kong
      复制代码

3.5 安装后的根本设置


  • 设置服务和路由

    • 创建服务:
      1. curl -i -X POST http://localhost:8001/services/ \
      2. --data "name=example-service" \
      3. --data "url=http://httpbin.org"
      复制代码
    • 添加路由:
      1. curl -i -X POST http://localhost:8001/services/example-service/routes \
      2. --data "paths[]=/example"
      复制代码

  • 测试 API

    • 使用 curl 或欣赏器访问:
      1. http://localhost:8000/example
      复制代码

4. 设置和管理 API

在安装并启动 Kong 后,下一步是设置和管理 API 服务、路由以及流量控制规则。Kong 提供了简单直观的管理方式,包罗 RESTful API、下令行工具(CLI)和图形化管理界面(Kong Manager)。
4.1 创建和管理服务与路由

Kong 的焦点概念是 服务(Service)路由(Route)


  • 服务:代表一个后端 API 服务的界说,通常是一个上游服务的 URL。
  • 路由:界说了哀求怎样与服务匹配和绑定。
创建服务
通过 Admin API 创建服务:
  1. curl -i -X POST http://localhost:8001/services/ \
  2. --data "name=example-service" \
  3. --data "url=http://httpbin.org"
复制代码
上述下令创建了一个名为 example-service 的服务,指向 http://httpbin.org。
创建路由
为服务添加路由:
  1. curl -i -X POST http://localhost:8001/services/example-service/routes/ \
  2. --data "paths[]=/example"
复制代码
这将创建一个路由,当访问 http://<Kong-IP>:8000/example 时,Kong 会将流量转发到 http://httpbin.org。
验证设置
通过以下下令测试路由是否收效:
  1. curl -i http://localhost:8000/example
复制代码
假如返回了 httpbin.org 的相应,分析设置乐成。
更新和删除服务/路由


  • 更新服务:
    1. curl -i -X PATCH http://localhost:8001/services/example-service \
    2. --data "url=http://new-url.com"
    复制代码
  • 删除服务:
    1. curl -i -X DELETE http://localhost:8001/services/example-service
    复制代码
4.2 设置负载均衡

Kong 内置了强盛的负载均衡功能,可以为服务设置多个上游节点,实现高可用和故障转移。
创建上游(Upstream)服务
上游服务是后端服务的逻辑分组,用于管理多个节点:
  1. curl -i -X POST http://localhost:8001/upstreams/ \
  2. --data "name=example-upstream"
复制代码
添加目标(Target)节点
为上游服务添加后端节点:
  1. curl -i -X POST http://localhost:8001/upstreams/example-upstream/targets \
  2. --data "target=192.168.1.101:80" \
  3. --data "weight=10"
  4. curl -i -X POST http://localhost:8001/upstreams/example-upstream/targets \
  5. --data "target=192.168.1.102:80" \
  6. --data "weight=5"
复制代码
这里的 weight 表现流量分配的权重。
将服务绑定到上游
将服务的 URL 指向上游服务:
  1. curl -i -X POST http://localhost:8001/services/ \
  2. --data "name=example-service" \
  3. --data "url=http://example-upstream"
复制代码
康健查抄
为上游服务启用康健查抄:
  1. curl -i -X PATCH http://localhost:8001/upstreams/example-upstream \
  2. --data "healthchecks.active.type=http" \
  3. --data "healthchecks.active.http_path=/status" \
  4. --data "healthchecks.active.timeout=1" \
  5. --data "healthchecks.active.concurrency=10" \
  6. --data "healthchecks.active.healthy.http_statuses[1]=200"
复制代码
4.3 使用 Kong Manager 的 GUI 管理 API

Kong 提供了图形化界面(Kong Manager)来简化设置管理工作。

  • 启动 Kong Manager
    确保在安装 Kong 企业版或启用了 GUI 插件后,可以访问 Kong Manager:
    1. http://<Kong-IP>:8002
    复制代码
  • 通过 GUI 创建服务和路由

    • 登录 Kong Manager。
    • 在 “Services” 菜单中创建新的服务。
    • 添加路由,绑定到服务。
    • 设置高级设置,如插件、康健查抄等。

  • 查察及时流量
    Kong Manager 提供及时流量监控监控,可以查察服务的性能和哀求量。
4.4 高级设置示例

绑定域名
Kong 支持绑定域名以匹配特定哀求:
  1. curl -i -X POST http://localhost:8001/services/example-service/routes/ \
  2. --data "hosts[]=example.com"
复制代码
启用 HTTPS
为服务启用 HTTPS:

  • 上传证书和密钥:
    1. curl -i -X POST http://localhost:8001/certificates \
    2. --form "cert=@/path/to/cert.pem" \
    3. --form "key=@/path/to/key.pem"
    复制代码
  • 绑定证书到服务的域名:
    1. curl -i -X POST http://localhost:8001/snis \
    2. --data "name=example.com" \
    3. --data "certificate.id=<CERTIFICATE_ID>"
    复制代码
全局路由规则
可以为全部服务设置全局规则(如认证、限流等):
  1. curl -i -X POST http://localhost:8001/plugins/ \
  2. --data "name=rate-limiting" \
  3. --data "config.minute=100"
复制代码
5. Kong 插件生态体系

Kong 的插件体系是其焦点特性之一,允许用户在 API 哀求和相应的生命周期中实行各种增强功能,如身份认证、流量控制、日志纪录等。插件可以轻松地通过设置启用,无需修改代码,极大地提拔了机动性和可扩展性。
5.1 插件的根本概念

Kong 插件分为两种范例:

  • 内置插件
    Kong 提供了多种开箱即用的插件,如 rate-limiting(限流)、jwt(JWT 身份认证)等,涵盖了常见的 API 管理需求。
  • 自界说插件
    用户可以使用 Lua 开辟自界说插件,满足特定业务需求。
插件的作用范围


  • 全局插件:对全部服务和路由收效。
  • 服务插件:仅对特定服务收效。
  • 路由插件:仅对特定路由收效。
  • 消耗者插件:绑定到特定的 API 消耗者。
5.2 常用插件先容

以下是几种常用插件及其功能:

  • 身份认证插件

    • Key Authentication:基于 API 密钥的身份验证。
    • JWT:支持 JSON Web Token(JWT)认证。
    • OAuth2:支持 OAuth2.0 协议。
    • 设置示例(启用 Key Authentication 插件):
      1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
      2. --data "name=key-auth"
      复制代码
      测试时必要在哀求头中添加 apikey。

  • 流量控制插件

    • Rate Limiting:限定哀求速率。
    • Connection Limiting:限定并发毗连数。
    • 设置示例(启用限流):
      1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
      2. --data "name=rate-limiting" \
      3. --data "config.minute=10" \
      4. --data "config.hour=100"
      复制代码

  • 日志纪录插件

    • File Log:将日志写入文件。
    • Syslog:将日志发送到体系日志。
    • HTTP Log:将日志通过 HTTP 发送到远程服务器
    • 设置示例(启用 HTTP Log):
      1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
      2. --data "name=http-log" \
      3. --data "config.http_endpoint=http://log-server.local"
      复制代码

  • 监控和追踪插件

    • Prometheus:集成 Prometheus,用于监控和指标网络。
    • ZipkinJaeger:支持分布式追踪。
    • 设置示例(启用 Prometheus 插件):
      1. curl -i -X POST http://localhost:8001/plugins \
      2. --data "name=prometheus"
      复制代码

  • 安全插件

    • IP Restriction:限定特定 IP 所在的访问。
    • Bot Detection:检测和制止恶意呆板人流量。
    • 设置示例(启用 IP 限定):
      1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
      2. --data "name=ip-restriction" \
      3. --data "config.whitelist=192.168.1.1"
      复制代码

5.3 自界说插件开辟

假如内置插件无法满足需求,可以开辟自界说插件。
步调:

  • 安装开辟情况
    确保已安装 OpenResty 和 Lua 情况。
  • 创建插件目次和文件
    在 /usr/local/share/lua/5.1/kong/plugins/ 下创建插件目次:
    1. mkdir -p /usr/local/share/lua/5.1/kong/plugins/custom-plugin
    复制代码
    创建 handler.lua 文件:
    1. local BasePlugin = require "kong.plugins.base_plugin"
    2. local CustomPlugin = BasePlugin:extend()
    3. function CustomPlugin:new()
    4.     CustomPlugin.super.new(self, "custom-plugin")
    5. end
    6. function CustomPlugin:access(conf)
    7.     CustomPlugin.super.access(self)
    8.     kong.response.set_header("X-Custom-Header", "Hello World")
    9. end
    10. return CustomPlugin
    复制代码
  • 设置插件
    将插件注册到 /etc/kong/kong.conf 的 plugins 设置项中:
    1. plugins = bundled,custom-plugin
    复制代码
  • 重启 Kong
    1. kong restart
    复制代码
  • 启用插件
    使用 Admin API 为服务或路由启用自界说插件:
    1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
    2. --data "name=custom-plugin"
    复制代码
5.4 插件的调试和管理



  • 查察已启用的插件
    1. curl -i http://localhost:8001/plugins
    复制代码
  • 更新插件设置
    1. curl -i -X PATCH http://localhost:8001/plugins/<plugin_id> \
    2. --data "config.new_option=value"
    复制代码
  • 删除插件
    1. curl -i -X DELETE http://localhost:8001/plugins/<plugin_id>
    复制代码
6. 安全性与认证

在当代 API 网关中,安全性是一个至关紧张的方面。Kong 提供了多种内置的安全插件和机制,资助开辟者掩护 API 免受未授权访问、恶意流量和数据泄漏的威胁。以下是 Kong 安全性与认证的焦点内容。
6.1 Kong 支持的认证机制

Kong 支持多种认证机制,以顺应差异的安全需求:

  • API 密钥认证(API Key Authentication)
    通太过发唯一的 API Key 来对消耗者举行认证。API Key 可放置在哀求头、查询参数或 Cookie 中。
  • JSON Web Token(JWT)认证
    使用标准的 JWT 令牌对哀求举行认证,支持无状态的分布式认证。
  • OAuth2.0
    实现 OAuth2.0 的完备认证流程,包罗授权码、隐式、客户端根据和暗码模式。
  • HMAC 署名认证(HMAC Authentication)
    使用基于 HMAC 的署名认证机制,实用于高安全性需求的 API。
  • LDAP 认证
    将 Kong 与企业的 LDAP 服务器集成,提供会合式的认证管理。
  • Basic Auth
    提供简单的 HTTP 根本认证,得当开辟和测试情况。
  • IP 所在限定(IP Restriction)
    通过白名单或黑名单限定特定 IP 所在访问 API。
6.2 设置认证插件

以下是设置常见认证插件的示例:
1. API 密钥认证

启用插件
  1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
  2. --data "name=key-auth"
复制代码
创建消耗者并分配 API Key
  1. curl -i -X POST http://localhost:8001/consumers/ \
  2. --data "username=example-consumer"
  3. curl -i -X POST http://localhost:8001/consumers/example-consumer/key-auth \
  4. --data "key=my-secret-key"
复制代码
测试 API
使用 curl 测试:
  1. curl -i -X GET http://localhost:8000/example
  2. \--header "apikey: my-secret-key"
复制代码
2. JWT 认证

启用插件
  1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
  2. --data "name=jwt"
复制代码
创建消耗者并分配 JWT 密钥
  1. curl -i -X POST http://localhost:8001/consumers/ \
  2. --data "username=example-consumer"
  3. curl -i -X POST http://localhost:8001/consumers/example-consumer/jwt \
  4. --data "key=example-key" \
  5. --data "secret=example-secret"
复制代码
测试 API
天生 JWT 令牌并测试:
  1. JWT=$(echo -n '{"alg":"HS256","typ":"JWT"}' | base64).$(echo -n '{"iss":"example-key"}' | base64)SIGNATURE=$(echo -n $JWT | openssl dgst -sha256 -hmac "example-secret" | awk '{print $2}')TOKEN=$JWT.$SIGNATUREcurl -i -X GET http://localhost:8000/example
  2. \--header "Authorization: Bearer $TOKEN"
复制代码
3. OAuth2.0 认证

启用插件
  1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
  2. --data "name=oauth2" \
  3. --data "config.enable_password_grant=true"
复制代码
创建 OAuth 应用
  1. curl -i -X POST http://localhost:8001/consumers/example-consumer/oauth2 \
  2. --data "name=example-app" \
  3. --data "client_id=example-client-id" \
  4. --data "client_secret=example-client-secret" \
  5. --data "redirect_uris[]=http://example.com/callback"
复制代码
获取访问令牌
  1. curl -i -X POST http://localhost:8000/example
  2. /oauth2/token \--data "client_id=example-client-id" \--data "client_secret=example-client-secret" \--data "grant_type=password" \--data "provision_key=<provision-key>" \--data "authenticated_userid=user123"
复制代码
6.3 Kong 的安全实践

为了增强 API 的安全性,以下是一些最佳实践:

  • 逼迫使用 HTTPS
    在生产情况中,确保全部 API 哀求都通过 HTTPS 举行传输。
  • IP 所在过滤
    使用 ip-restriction 插件限定特定 IP 所在访问:
    1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
    2. --data "name=ip-restriction" \
    3. --data "config.whitelist=192.168.1.1,192.168.1.2"
    复制代码
  • 限定哀求速率
    设置 rate-limiting 插件限定 API 哀求的频率,防止恶意流量攻击。
  • 使用分布式追踪
    集成 Zipkin 或 Jaeger 插件,对 API 哀求的全链路举行追踪,发现潜伏的安全威胁。
  • 审计日志
    设置 http-log 或 file-log 插件,纪录全部 API 哀求和相应信息。
  • 定期更新 Kong
    确保 Kong 和干系插件始终运行在最新版本,制止已知毛病被使用。
6.4 使用外部身份提供商

Kong 支持与外部身份提供商(如 Auth0、Okta)集成,通过 OpenID Connect 实现同一认证。
启用 OpenID Connect 插件(Kong Enterprise)
  1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
  2. --data "name=openid-connect" \
  3. --data "config.issuer=https://example.com" \
  4. --data "config.client_id=client-id" \
  5. --data "config.client_secret=client-secret"
复制代码
7. 性能优化

在高流量和复杂场景下,优化 Kong 的性能至关紧张。通过公道的设置和监控,可以明显进步 Kong 的吞吐量、低落耽误,并确保其运行的稳固性和高可用性。
7.1 性能基准测试

在开始优化之前,相识 Kong 的基准性能指标是紧张的一步。

  • 官方基准
    根据 Kong 官方基准测试,在使用默认设置下,单节点可以处置处罚高出 1 万次哀求/秒,耽误低于 1 毫秒。
  • 性能测试工具
    使用以下工具对 Kong 举行当地测试:

    • wrk:一种简单高效的 HTTP 压力测试工具。
    • Apache Bench(ab):得当快速举行吞吐量测试。
    • JMeter:用于复杂场景和集成测试。

示例测试下令(使用 wrk 工具):
  1. wrk -t4 -c200 -d30s http://localhost:8000/example
复制代码
参数表明:


  • -t:线程数。
  • -c:并发毗连数。
  • -d:测试连续时间。
7.2 设置缓存

缓存是优化性能的关键。Kong 支持多种缓存机制,可镌汰后端服务的负载并进步相应速率。

  • DNS 缓存
    Kong 内置 DNS 缓存,可以制止频仍的 DNS 查询:

    • 设置 dns_resolver 和 dns_stale_ttl 参数。
    1. dns_resolver = 8.8.8.8
    2. dns_stale_ttl = 60
    复制代码

  • 插件级缓存
    使用插件缓存特定哀求:

    • 启用 proxy-cache 插件:
      1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
      2. --data "name=proxy-cache" \
      3. --data "config.strategy=memory" \
      4. --data "config.cache_ttl=60"
      复制代码

  • 自界说缓存战略
    开辟自界说插件,实现更复杂的缓存逻辑。
7.3 设置毗连池和超时

通过优化毗连池和超时设置,可以镌汰资源斲丧并进步吞吐量。

  • 数据库毗连池
    设置 pg_max_concurrent_queries 和 pg_semaphore_timeout 参数,进步数据库访问性能。
  • 后端毗连池
    调解后端服务的毗连池:
    1. upstream_keepalive = 60
    复制代码
  • 哀求超时
    设置公道的超时时间,制止资源长期占用:
    1. proxy_connect_timeout = 5000
    2. proxy_send_timeout = 5000
    3. proxy_read_timeout = 5000
    复制代码
7.4 Kong 的集群扩展

对于高流量场景,可以通过集群扩展来进步吞吐量和容错本领。

  • 水平扩展
    增长 Kong 实例的数目,并在前端设置负载均衡器(如 Nginx、AWS ELB 等)。
  • 使用 DB-less 模式
    在高并发情况中,启用 DB-less 模式可镌汰对数据库的依靠,进步性能。
DB-less 模式设置


  • 编辑 kong.conf 文件,将 database 设置为 off。
  • 使用 YAML 文件加载设置:
    1. kong start
    2. --conf kong.conf --vitals
    复制代码

  • 集群摆设
    使用 Kubernetes 摆设 Kong,并联合 Horizontal Pod Autoscaler(HPA)举行主动扩容:
    1. kubectl autoscale deployment kong --cpu-percent=80 --min=3 --max=10
    复制代码
7.5 使用负载均衡优化


  • 内部负载均衡
    设置 Kong 的 Upstream 功能,为后端服务设置多个节点:
    1. curl -i -X POST http://localhost:8001/upstreams/ \
    2. --data "name=example-upstream"
    3. curl -i -X POST http://localhost:8001/upstreams/example-upstream/targets \--data "target=192.168.1.1:80" \--data "weight=10"
    复制代码
  • 动态负载调解
    设置康健查抄,主动剔除故障节点:
    1. curl -i -X PATCH http://localhost:8001/upstreams/example-upstream \
    2. --data "healthchecks.active.type=http" \
    3. --data "healthchecks.active.timeout=1" \
    4. --data "healthchecks.active.concurrency=10"
    复制代码
7.6 常见性能题目及办理方案


  • 高耽误

    • 缘故原由:DNS 查询频仍或后端服务相应慢。
    • 办理方案:启用 DNS 缓存,优化后端服务。

  • 高 CPU 使用率

    • 缘故原由:插件实行时间过长或设置不公道。
    • 办理方案:分析插件运行时间,移除不须要的插件。

  • 数据库瓶颈

    • 缘故原由:数据库毗连数不敷。
    • 办理方案:优化数据库毗连池,启用 DB-less 模式。

  • 内存走漏

    • 缘故原由:缓存未精确整理。
    • 办理方案:设置公道的缓存逾期时间,并定期整理缓存。

8. 监控与日志

Kong 提供了丰富的监控和日志功能,资助开辟者和运维职员及时相识网关的运行状态、流量模式和潜伏题目。通过集成外部工具和服务,可以进一步增强监控和日志分析的本领。
8.1 Kong 的内置监控功能

Kong 内置了根本的监控指标,可以通过以下方式查察网关的康健状态:

  • Admin API 的监控端点
    使用 Kong 提供的 Admin API 查察服务和插件的状态:
    1. curl http://localhost:8001/status
    复制代码
    返回的信息包罗:

    • 数据库毗连状态
    • 内存使用情况
    • 流量统计

  • Metrics 插件
    启用 Prometheus 插件网络网关的运行指标:
    1. curl -i -X POST http://localhost:8001/plugins/ \
    2. --data "name=prometheus"
    复制代码
    设置完成后,可通过 Prometheus 收罗指标,并通过 Grafana 可视化。
8.2 日志管理

Kong 支持多种日志插件,用于纪录哀求和相应的详细信息。

  • 常见日志插件

    • File Log:将日志写入当地文件。
    • HTTP Log:将日志发送到远程 HTTP 服务器。
    • Syslog:将日志发送到体系日志。
    • TCP Log:通过 TCP 协议发送日志到远程服务器。

  • 设置日志插件
File Log 插件示例
  1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
  2. --data "name=file-log" \
  3. --data "config.path=/tmp/kong.log"
复制代码
HTTP Log 插件示例
  1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
  2. --data "name=http-log" \
  3. --data "config.http_endpoint=http://log-server.local"
复制代码
Syslog 插件示例
  1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
  2. --data "name=syslog" \
  3. --data "config.facility=local0"
复制代码
8.3 分布式追踪

Kong 支持分布式追踪,可以通过 Zipkin 或 Jaeger 插件跟踪 API 哀求的全链路性能。

  • 启用 Zipkin 插件
    1. curl -i -X POST http://localhost:8001/plugins/ \
    2. --data "name=zipkin" \
    3. --data "config.http_endpoint=http://zipkin-server.local:9411/api/v2/spans" \
    4. --data "config.sample_ratio=1.0" \
    5. --data "config.service_name=kong-gateway"
    复制代码
  • 启用 Jaeger 插件
    1. curl -i -X POST http://localhost:8001/plugins/ \
    2. --data "name=jaeger" \
    3. --data "config.reporter_local_agent_host_port=jaeger-agent.local:6831" \
    4. --data "config.sample_ratio=1.0" \
    5. --data "config.service_name=kong-gateway"
    复制代码
通过这些插件,可以在追踪体系中看到每个哀求的详细信息,包罗耽误、错误和后端服务的性能。
8.4 集成 Prometheus 和 Grafana

Kong 提供了对 Prometheus 的原生支持,便于网络和分析性能指标。

  • 安装 Prometheus 插件
    1. curl -i -X POST http://localhost:8001/plugins/ \
    2. --data "name=prometheus"
    复制代码
  • 访问 Prometheus 指标
    默认情况下,指标在 /metrics 路径提供:
    1. http://<Kong-IP>:8001/metrics
    复制代码
  • 设置 Grafana

    • 在 Grafana 中添加 Prometheus 数据源。
    • 导入 Kong 官方的 Grafana Dashboard(ID: 7424)。
    • 查察网关的及时流量、耽误、错误率等关键指标。

8.5 日志和监控最佳实践


  • 会合化日志管理

    • 将日志发送到会合式日志平台(如 ELK、Fluentd 或 Loki),便于搜索和分析。
    • 使用结构化日志格式,便于剖析。

  • 定期分析流量和性能数据

    • 监控高耽误和错误哀求,及时优化设置。
    • 根据流量模式调解资源分配。

  • 设置告警机制

    • 设置 Prometheus 或 Grafana 的告警规则,及时关照非常情况。
    • 常见告警包罗高耽误、哀求错误率上升、CPU 或内存使用率过高。

  • 启用分布式追踪

    • 对复杂的微服务架构,分布式追踪是排查题目的利器。
    • 定期分析追踪数据,优化服务调用链。

  • 整理昔日志

    • 设置日志轮换机制,制止占用过多磁盘空间。

11. 总结与预测

11.1 Kong 的优点

通过前面的先容和使用案例,可以总结出 Kong 在 API 管理中的关键上风:

  • 高性能与可扩展性

    • 基于 Nginx 和 OpenResty 构建,Kong 提供极高的吞吐量和低耽误。
    • 支持水平扩展,可轻松应对高并发流量。

  • 机动的插件生态

    • 内置丰富的插件,包罗认证、限流、日志和监控等功能。
    • 支持自界说插件开辟,满足特定业务需求。

  • 多协议支持

    • Kong 支持 HTTP、HTTPS、gRPC 和 WebSocket 等协议,顺应差异的通讯场景。

  • 强盛的安全性

    • 提供全面的认证插件(如 JWT、OAuth2.0 等)和安全功能(如 IP 限定、HMAC 验证)。
    • 集成 TLS 加密,掩护数据传输安全。

  • 摆设机动性

    • 支持多种摆设模式(裸机、容器、Kubernetes、云平台)。
    • 提供 DB-less 模式,镌汰数据库依靠,得当无状态情况。

  • 云原生与微服务友爱

    • 与 Kubernetes 无缝集成,支持服务网格架构。
    • 提供 declarative 设置(声明式设置),实现主动化运维。

  • 强盛的可观测可观测

    • 提供 Prometheus、Zipkin 和 Jaeger 等插件,方便监控和追踪哀求路径。

11.2 Kong 的不敷与寻衅

只管 Kong 功能强盛,但在实际使用中仍存在一些寻衅:

  • 学习曲线

    • 对于初次打仗 API 网关的开辟者,Kong 的设置和插件机制大概必要肯定的学习时间。

  • 资源占用

    • 在高流量场景下,Kong 的性能优化必要公道设置,否则大概导致较高的内存和 CPU 斲丧。

  • 插件依靠 Lua

    • 自界说插件必要把握 Lua 编程语言,对于风俗主流语言的开辟者大概不敷友爱。

  • 社区版与企业版的差异

    • 一些高级功能(如 Kong Manager、OpenID Connect 插件)仅在企业版中提供,大概会限定部门企业的选择。

11.3 Kong 的未来发展方向

Kong 社区和企业版都在不绝演进,以下是其未来大概的发展方向:

  • 进一步优化性能

    • 进步网关的处置处罚本领,支持更高的吞吐量和更低的耽误。

  • 增强服务网格支持

    • 深化与服务网格(如 Istio 和 Kuma)的集成,为微服务架构提供更丰富的管理功能。

  • 扩展插件生态

    • 增长更多开箱即用的插件,支持更多协媾和集成场景。

  • 支持更多编程语言

    • 除 Lua 外,大概支持更多语言编写自界说插件,低落开辟门槛。

  • 更多云原生功能

    • 深化与 Kubernetes 和云平台(如 AWS、GCP)的集成,优化容器化摆设体验。

  • 强化 AI 和主动化本领

    • 使用呆板学习算法,主动优化流量分配、非常检测和故障清除。

12. 附录

12.1 常用下令速查表

以下是 Kong 管理中常用的下令,便于快速参考和利用:
启动与克制 Kong



  • 启动 Kong:
    1. kong start
    复制代码
  • 克制 Kong:
    1. kong stop
    复制代码
  • 重新加载设置:
    1. kong reload
    复制代码
数据库管理



  • 初始化数据库:
    1. kong migrations bootstrap
    复制代码
  • 升级数据库:
    1. kong migrations up
    复制代码
  • 回滚数据库:
    1. kong migrations down
    复制代码
服务与路由管理



  • 创建服务:
    1. curl -i -X POST http://localhost:8001/services/ \
    2. --data "name=example-service" \
    3. --data "url=http://example.com"
    复制代码
  • 添加路由:
    1. curl -i -X POST http://localhost:8001/services/example-service/routes/ \
    2. --data "paths[]=/example"
    复制代码
  • 列出全部服务:
    1. curl -i http://localhost:8001/services
    复制代码
插件管理



  • 查察可用插件:
    1. curl -i http://localhost:8001/plugins
    2. /enabled
    复制代码
  • 启用插件:
    1. curl -i -X POST http://localhost:8001/services/example-service/plugins \
    2. --data "name=rate-limiting" \
    3. --data "config.minute=100"
    复制代码
消耗者管理



  • 创建消耗者:
    1. curl -i -X POST http://localhost:8001/consumers/ \
    2. --data "username=example-consumer"
    复制代码
  • 列出全部消耗者:
    1. curl -i http://localhost:8001/consumers
    复制代码
12.2 官方资源链接


  • 官方文档
    Kong Documentation
  • GitHub 堆栈
    Kong GitHub Repository
  • 官方博客
    Kong Blog
  • 社区支持
    Kong Community Forum
  • Kong 企业版
    Kong Enterprise Overview
12.3 常见题目解答(FAQ)

1. 为什么 Kong 服务无法启动?



  • 大概缘故原由

    • 数据库毗连失败。
    • 设置文件错误。

  • 办理方法

    • 查抄 kong.conf 文件是否精确设置。
    • 确保 PostgreSQL 服务正在运行,并可以通过网络访问。

2. DB-less 模式无法加载设置?



  • 大概缘故原由

    • 设置文件路径错误。
    • 设置文件格式不符合 YAML 规范。

  • 办理方法

    • 使用以下下令验证设置文件:
      1. kong config parse /path/to/config.yaml
      复制代码

3. 插件无法正常运行?



  • 大概缘故原由

    • 插件未启用或设置错误。

  • 办理方法

    • 查抄插件是否已启用:
      1. curl -i http://localhost:8001/plugins
      复制代码

4. 怎样进步 Kong 的性能?



  • 办理方法

    • 使用 DB-less 模式镌汰数据库查询。
    • 调解毗连池设置。
    • 启用缓存插件。

12.4 社区与学习资源


  • 学习教程

    • Kong 101
    • Kong Declarative Configuration

  • 在线培训与认证

    • Kong Training and Certification

  • 开源贡献

    • 提交题目或贡献代码到 Kong GitHub 堆栈。

12.5 示例设置文件

以下是一个 Kong 声明式设置文件示例(YAML 格式):
  1. _format_version: "3.0"
  2. services:
  3. - name: example-service
  4.   url: http://example.com
  5.   routes:
  6.   - name: example-route
  7.     paths:
  8.     - /example
  9. plugins:
  10. - name: rate-limiting
  11.   config:
  12.     minute: 100
  13.     hour: 1000
复制代码
加载设置文件:
  1. kong config db_import /path/to/config.yaml
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表