马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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 体系为例:
- 更新体系:
- sudo apt update && sudo apt upgrade
复制代码 - 添加 Kong 的 APT 堆栈:
- 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
- sudo apt update
复制代码 - 安装 Kong:
- 初始化数据库(假如使用数据库模式):
- kong migrations bootstrap
复制代码 - 启动 Kong:
- 验证安装:
在欣赏器中访问 http://localhost:8001,假如返回 Kong 的管理 API 信息,则安装乐成。
3.3 安装 Kong:集群模式
在生产情况中,通常会摆设多台 Kong 实例以实现高可用和负载均衡。
- 摆设数据库:
- 使用 PostgreSQL 作为后端数据库,并设置多实例访问。
- 设置 Kong 实例:
- 编辑 /etc/kong/kong.conf 文件,确保全部 Kong 实例指向雷同的数据库。
- database = postgres
- pg_host = <PostgreSQL-Host>
- pg_port = 5432
- pg_user = kong
- pg_password = <your-password>
- pg_database = kong
复制代码
- 初始化数据库(只在第一个实例上运行):
- kong migrations bootstrap
复制代码 - 启动多个 Kong 实例:
在每台服务器上运行:
- 负载均衡:
- 在前端使用负载均衡器(如 Nginx 或 AWS ELB),将流量分配到多个 Kong 实例。
3.4 容器化摆设(Docker 和 Kubernetes)
- 使用 Docker 摆设 Kong:
- 拉取 Kong 的 Docker 镜像:
- 运行容器(DB-less 模式):
- docker run -d --name kong -p 8000:8000 -p 8443:8443 -p 8001:8001 kong:latest
复制代码
- 使用 Kubernetes 摆设 Kong:
- 安装 kubectl 和 Helm 工具。
- 添加 Kong 的 Helm 堆栈:
- helm repo add kong https://charts.konghq.com
- helm repo update
复制代码 - 摆设 Kong:
- helm install kong kong/kong --set ingressController.installCRDs=false
复制代码 - 验证摆设:
3.5 安装后的根本设置
- 设置服务和路由:
- 创建服务:
- curl -i -X POST http://localhost:8001/services/ \
- --data "name=example-service" \
- --data "url=http://httpbin.org"
复制代码 - 添加路由:
- curl -i -X POST http://localhost:8001/services/example-service/routes \
- --data "paths[]=/example"
复制代码
- 测试 API:
- 使用 curl 或欣赏器访问:
- http://localhost:8000/example
复制代码
4. 设置和管理 API
在安装并启动 Kong 后,下一步是设置和管理 API 服务、路由以及流量控制规则。Kong 提供了简单直观的管理方式,包罗 RESTful API、下令行工具(CLI)和图形化管理界面(Kong Manager)。
4.1 创建和管理服务与路由
Kong 的焦点概念是 服务(Service) 和 路由(Route):
- 服务:代表一个后端 API 服务的界说,通常是一个上游服务的 URL。
- 路由:界说了哀求怎样与服务匹配和绑定。
创建服务
通过 Admin API 创建服务:
- curl -i -X POST http://localhost:8001/services/ \
- --data "name=example-service" \
- --data "url=http://httpbin.org"
复制代码 上述下令创建了一个名为 example-service 的服务,指向 http://httpbin.org。
创建路由
为服务添加路由:
- curl -i -X POST http://localhost:8001/services/example-service/routes/ \
- --data "paths[]=/example"
复制代码 这将创建一个路由,当访问 http://<Kong-IP>:8000/example 时,Kong 会将流量转发到 http://httpbin.org。
验证设置
通过以下下令测试路由是否收效:
- curl -i http://localhost:8000/example
复制代码 假如返回了 httpbin.org 的相应,分析设置乐成。
更新和删除服务/路由
- 更新服务:
- curl -i -X PATCH http://localhost:8001/services/example-service \
- --data "url=http://new-url.com"
复制代码 - 删除服务:
- curl -i -X DELETE http://localhost:8001/services/example-service
复制代码 4.2 设置负载均衡
Kong 内置了强盛的负载均衡功能,可以为服务设置多个上游节点,实现高可用和故障转移。
创建上游(Upstream)服务
上游服务是后端服务的逻辑分组,用于管理多个节点:
- curl -i -X POST http://localhost:8001/upstreams/ \
- --data "name=example-upstream"
复制代码 添加目标(Target)节点
为上游服务添加后端节点:
- curl -i -X POST http://localhost:8001/upstreams/example-upstream/targets \
- --data "target=192.168.1.101:80" \
- --data "weight=10"
- curl -i -X POST http://localhost:8001/upstreams/example-upstream/targets \
- --data "target=192.168.1.102:80" \
- --data "weight=5"
复制代码 这里的 weight 表现流量分配的权重。
将服务绑定到上游
将服务的 URL 指向上游服务:
- curl -i -X POST http://localhost:8001/services/ \
- --data "name=example-service" \
- --data "url=http://example-upstream"
复制代码 康健查抄
为上游服务启用康健查抄:
- curl -i -X PATCH http://localhost:8001/upstreams/example-upstream \
- --data "healthchecks.active.type=http" \
- --data "healthchecks.active.http_path=/status" \
- --data "healthchecks.active.timeout=1" \
- --data "healthchecks.active.concurrency=10" \
- --data "healthchecks.active.healthy.http_statuses[1]=200"
复制代码 4.3 使用 Kong Manager 的 GUI 管理 API
Kong 提供了图形化界面(Kong Manager)来简化设置管理工作。
- 启动 Kong Manager:
确保在安装 Kong 企业版或启用了 GUI 插件后,可以访问 Kong Manager:
- 通过 GUI 创建服务和路由:
- 登录 Kong Manager。
- 在 “Services” 菜单中创建新的服务。
- 添加路由,绑定到服务。
- 设置高级设置,如插件、康健查抄等。
- 查察及时流量:
Kong Manager 提供及时流量监控 ,可以查察服务的性能和哀求量。
4.4 高级设置示例
绑定域名
Kong 支持绑定域名以匹配特定哀求:
- curl -i -X POST http://localhost:8001/services/example-service/routes/ \
- --data "hosts[]=example.com"
复制代码 启用 HTTPS
为服务启用 HTTPS:
- 上传证书和密钥:
- curl -i -X POST http://localhost:8001/certificates \
- --form "cert=@/path/to/cert.pem" \
- --form "key=@/path/to/key.pem"
复制代码 - 绑定证书到服务的域名:
- curl -i -X POST http://localhost:8001/snis \
- --data "name=example.com" \
- --data "certificate.id=<CERTIFICATE_ID>"
复制代码 全局路由规则
可以为全部服务设置全局规则(如认证、限流等):
- curl -i -X POST http://localhost:8001/plugins/ \
- --data "name=rate-limiting" \
- --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 插件):
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=key-auth"
复制代码 测试时必要在哀求头中添加 apikey。
- 流量控制插件
- Rate Limiting:限定哀求速率。
- Connection Limiting:限定并发毗连数。
- 设置示例(启用限流):
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=rate-limiting" \
- --data "config.minute=10" \
- --data "config.hour=100"
复制代码
- 日志纪录插件
- File Log:将日志写入文件。
- Syslog:将日志发送到体系日志。
- HTTP Log:将日志通过 HTTP 发送到远程服务器。
- 设置示例(启用 HTTP Log):
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=http-log" \
- --data "config.http_endpoint=http://log-server.local"
复制代码
- 监控和追踪插件
- Prometheus:集成 Prometheus,用于监控和指标网络。
- Zipkin 和 Jaeger:支持分布式追踪。
- 设置示例(启用 Prometheus 插件):
- curl -i -X POST http://localhost:8001/plugins \
- --data "name=prometheus"
复制代码
- 安全插件
- IP Restriction:限定特定 IP 所在的访问。
- Bot Detection:检测和制止恶意呆板人流量。
- 设置示例(启用 IP 限定):
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=ip-restriction" \
- --data "config.whitelist=192.168.1.1"
复制代码
5.3 自界说插件开辟
假如内置插件无法满足需求,可以开辟自界说插件。
步调:
- 安装开辟情况
确保已安装 OpenResty 和 Lua 情况。
- 创建插件目次和文件
在 /usr/local/share/lua/5.1/kong/plugins/ 下创建插件目次:
- mkdir -p /usr/local/share/lua/5.1/kong/plugins/custom-plugin
复制代码 创建 handler.lua 文件:
- local BasePlugin = require "kong.plugins.base_plugin"
- local CustomPlugin = BasePlugin:extend()
- function CustomPlugin:new()
- CustomPlugin.super.new(self, "custom-plugin")
- end
- function CustomPlugin:access(conf)
- CustomPlugin.super.access(self)
- kong.response.set_header("X-Custom-Header", "Hello World")
- end
- return CustomPlugin
复制代码 - 设置插件
将插件注册到 /etc/kong/kong.conf 的 plugins 设置项中:
- plugins = bundled,custom-plugin
复制代码 - 重启 Kong
- 启用插件
使用 Admin API 为服务或路由启用自界说插件:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=custom-plugin"
复制代码 5.4 插件的调试和管理
- 查察已启用的插件:
- curl -i http://localhost:8001/plugins
复制代码 - 更新插件设置:
- curl -i -X PATCH http://localhost:8001/plugins/<plugin_id> \
- --data "config.new_option=value"
复制代码 - 删除插件:
- 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 密钥认证
启用插件:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=key-auth"
复制代码 创建消耗者并分配 API Key:
- curl -i -X POST http://localhost:8001/consumers/ \
- --data "username=example-consumer"
- curl -i -X POST http://localhost:8001/consumers/example-consumer/key-auth \
- --data "key=my-secret-key"
复制代码 测试 API:
使用 curl 测试:
- curl -i -X GET http://localhost:8000/example
- \--header "apikey: my-secret-key"
复制代码 2. JWT 认证
启用插件:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=jwt"
复制代码 创建消耗者并分配 JWT 密钥:
- curl -i -X POST http://localhost:8001/consumers/ \
- --data "username=example-consumer"
- curl -i -X POST http://localhost:8001/consumers/example-consumer/jwt \
- --data "key=example-key" \
- --data "secret=example-secret"
复制代码 测试 API:
天生 JWT 令牌并测试:
- 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
- \--header "Authorization: Bearer $TOKEN"
复制代码 3. OAuth2.0 认证
启用插件:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=oauth2" \
- --data "config.enable_password_grant=true"
复制代码 创建 OAuth 应用:
- curl -i -X POST http://localhost:8001/consumers/example-consumer/oauth2 \
- --data "name=example-app" \
- --data "client_id=example-client-id" \
- --data "client_secret=example-client-secret" \
- --data "redirect_uris[]=http://example.com/callback"
复制代码 获取访问令牌:
- curl -i -X POST http://localhost:8000/example
- /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 所在访问:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=ip-restriction" \
- --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):
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=openid-connect" \
- --data "config.issuer=https://example.com" \
- --data "config.client_id=client-id" \
- --data "config.client_secret=client-secret"
复制代码 7. 性能优化
在高流量和复杂场景下,优化 Kong 的性能至关紧张。通过公道的设置和监控,可以明显进步 Kong 的吞吐量、低落耽误,并确保其运行的稳固性和高可用性。
7.1 性能基准测试
在开始优化之前,相识 Kong 的基准性能指标是紧张的一步。
- 官方基准
根据 Kong 官方基准测试,在使用默认设置下,单节点可以处置处罚高出 1 万次哀求/秒,耽误低于 1 毫秒。
- 性能测试工具
使用以下工具对 Kong 举行当地测试:
- wrk:一种简单高效的 HTTP 压力测试工具。
- Apache Bench(ab):得当快速举行吞吐量测试。
- JMeter:用于复杂场景和集成测试。
示例测试下令(使用 wrk 工具):
- wrk -t4 -c200 -d30s http://localhost:8000/example
复制代码 参数表明:
- -t:线程数。
- -c:并发毗连数。
- -d:测试连续时间。
7.2 设置缓存
缓存是优化性能的关键。Kong 支持多种缓存机制,可镌汰后端服务的负载并进步相应速率。
- DNS 缓存
Kong 内置 DNS 缓存,可以制止频仍的 DNS 查询:
- 设置 dns_resolver 和 dns_stale_ttl 参数。
- dns_resolver = 8.8.8.8
- dns_stale_ttl = 60
复制代码
- 插件级缓存
使用插件缓存特定哀求:
- 启用 proxy-cache 插件:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=proxy-cache" \
- --data "config.strategy=memory" \
- --data "config.cache_ttl=60"
复制代码
- 自界说缓存战略
开辟自界说插件,实现更复杂的缓存逻辑。
7.3 设置毗连池和超时
通过优化毗连池和超时设置,可以镌汰资源斲丧并进步吞吐量。
- 数据库毗连池
设置 pg_max_concurrent_queries 和 pg_semaphore_timeout 参数,进步数据库访问性能。
- 后端毗连池
调解后端服务的毗连池:
- 哀求超时
设置公道的超时时间,制止资源长期占用:
- proxy_connect_timeout = 5000
- proxy_send_timeout = 5000
- proxy_read_timeout = 5000
复制代码 7.4 Kong 的集群扩展
对于高流量场景,可以通过集群扩展来进步吞吐量和容错本领。
- 水平扩展
增长 Kong 实例的数目,并在前端设置负载均衡器(如 Nginx、AWS ELB 等)。
- 使用 DB-less 模式
在高并发情况中,启用 DB-less 模式可镌汰对数据库的依靠,进步性能。
DB-less 模式设置:
- 编辑 kong.conf 文件,将 database 设置为 off。
- 使用 YAML 文件加载设置:
- kong start
- --conf kong.conf --vitals
复制代码
- 集群摆设
使用 Kubernetes 摆设 Kong,并联合 Horizontal Pod Autoscaler(HPA)举行主动扩容:- kubectl autoscale deployment kong --cpu-percent=80 --min=3 --max=10
复制代码 7.5 使用负载均衡优化
- 内部负载均衡
设置 Kong 的 Upstream 功能,为后端服务设置多个节点:
- curl -i -X POST http://localhost:8001/upstreams/ \
- --data "name=example-upstream"
- curl -i -X POST http://localhost:8001/upstreams/example-upstream/targets \--data "target=192.168.1.1:80" \--data "weight=10"
复制代码 - 动态负载调解
设置康健查抄,主动剔除故障节点:
- curl -i -X PATCH http://localhost:8001/upstreams/example-upstream \
- --data "healthchecks.active.type=http" \
- --data "healthchecks.active.timeout=1" \
- --data "healthchecks.active.concurrency=10"
复制代码 7.6 常见性能题目及办理方案
- 高耽误
- 缘故原由:DNS 查询频仍或后端服务相应慢。
- 办理方案:启用 DNS 缓存,优化后端服务。
- 高 CPU 使用率
- 缘故原由:插件实行时间过长或设置不公道。
- 办理方案:分析插件运行时间,移除不须要的插件。
- 数据库瓶颈
- 缘故原由:数据库毗连数不敷。
- 办理方案:优化数据库毗连池,启用 DB-less 模式。
- 内存走漏
- 缘故原由:缓存未精确整理。
- 办理方案:设置公道的缓存逾期时间,并定期整理缓存。
8. 监控与日志
Kong 提供了丰富的监控和日志功能,资助开辟者和运维职员及时相识网关的运行状态、流量模式和潜伏题目。通过集成外部工具和服务,可以进一步增强监控和日志分析的本领。
8.1 Kong 的内置监控功能
Kong 内置了根本的监控指标,可以通过以下方式查察网关的康健状态:
- Admin API 的监控端点
使用 Kong 提供的 Admin API 查察服务和插件的状态:
- curl http://localhost:8001/status
复制代码 返回的信息包罗:
- Metrics 插件
启用 Prometheus 插件网络网关的运行指标:
- curl -i -X POST http://localhost:8001/plugins/ \
- --data "name=prometheus"
复制代码 设置完成后,可通过 Prometheus 收罗指标,并通过 Grafana 可视化。
8.2 日志管理
Kong 支持多种日志插件,用于纪录哀求和相应的详细信息。
- 常见日志插件
- File Log:将日志写入当地文件。
- HTTP Log:将日志发送到远程 HTTP 服务器。
- Syslog:将日志发送到体系日志。
- TCP Log:通过 TCP 协议发送日志到远程服务器。
- 设置日志插件
File Log 插件示例:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=file-log" \
- --data "config.path=/tmp/kong.log"
复制代码 HTTP Log 插件示例:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=http-log" \
- --data "config.http_endpoint=http://log-server.local"
复制代码 Syslog 插件示例:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=syslog" \
- --data "config.facility=local0"
复制代码 8.3 分布式追踪
Kong 支持分布式追踪,可以通过 Zipkin 或 Jaeger 插件跟踪 API 哀求的全链路性能。
- 启用 Zipkin 插件
- curl -i -X POST http://localhost:8001/plugins/ \
- --data "name=zipkin" \
- --data "config.http_endpoint=http://zipkin-server.local:9411/api/v2/spans" \
- --data "config.sample_ratio=1.0" \
- --data "config.service_name=kong-gateway"
复制代码 - 启用 Jaeger 插件
- curl -i -X POST http://localhost:8001/plugins/ \
- --data "name=jaeger" \
- --data "config.reporter_local_agent_host_port=jaeger-agent.local:6831" \
- --data "config.sample_ratio=1.0" \
- --data "config.service_name=kong-gateway"
复制代码 通过这些插件,可以在追踪体系中看到每个哀求的详细信息,包罗耽误、错误和后端服务的性能。
8.4 集成 Prometheus 和 Grafana
Kong 提供了对 Prometheus 的原生支持,便于网络和分析性能指标。
- 安装 Prometheus 插件
- curl -i -X POST http://localhost:8001/plugins/ \
- --data "name=prometheus"
复制代码 - 访问 Prometheus 指标
默认情况下,指标在 /metrics 路径提供:
- 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 migrations bootstrap
复制代码 - 升级数据库:
- 回滚数据库:
服务与路由管理
- 创建服务:
- curl -i -X POST http://localhost:8001/services/ \
- --data "name=example-service" \
- --data "url=http://example.com"
复制代码 - 添加路由:
- curl -i -X POST http://localhost:8001/services/example-service/routes/ \
- --data "paths[]=/example"
复制代码 - 列出全部服务:
- curl -i http://localhost:8001/services
复制代码 插件管理
- 查察可用插件:
- curl -i http://localhost:8001/plugins
- /enabled
复制代码 - 启用插件:
- curl -i -X POST http://localhost:8001/services/example-service/plugins \
- --data "name=rate-limiting" \
- --data "config.minute=100"
复制代码 消耗者管理
- 创建消耗者:
- curl -i -X POST http://localhost:8001/consumers/ \
- --data "username=example-consumer"
复制代码 - 列出全部消耗者:
- 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 规范。
- 办理方法:
- 使用以下下令验证设置文件:
- kong config parse /path/to/config.yaml
复制代码
3. 插件无法正常运行?
- 大概缘故原由:
- 办理方法:
- 查抄插件是否已启用:
- 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 格式):
- _format_version: "3.0"
- services:
- - name: example-service
- url: http://example.com
- routes:
- - name: example-route
- paths:
- - /example
- plugins:
- - name: rate-limiting
- config:
- minute: 100
- hour: 1000
复制代码 加载设置文件:
- kong config db_import /path/to/config.yaml
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |