为微服务实现Kong API网关 - Medium
为微服务架构实现 Kong API 网关
在本文中,我将分享如何将 **Kong RESTful API 的前端,可以通过多种插件进行扩展。它为管理 API 流量和高效处理微服务请求提供了便捷的解决方案。
为什么选择 Kong?
在探索了多种 API 网关选项后,如 Traefik(既可作为 API 网关也可作为反向代理)、Kong 和 AWS API 网关,我最终选择了 Kong。原因在于它在 无数据库模式 和 数据库模式 下都表现出色,具备强大的功能、灵活性和可扩展性。在本项目中,我选择将 Kong 配置为无数据库模式,通过声明性配置文件(Kong.yml)简化了设置流程。
Kong 的用户类型
Kong 提供两种主要用户类型:
- 管理员用户:通过 管理员 API 管理和配置 Kong。
- 消费者:与通过 Kong 路由的 API 交互的客户端或外部用户。
Docker 配置示例
以下是我在无数据库模式下运行 Kong 的 Docker 配置。虽然其他服务集成了 PostgreSQL,但 Kong 本身在无数据库模式下并不依赖数据库。
使用 kong.yml 配置
- KONG_ADMIN_LISTEN=0.0.0.0:8001
- KONG_ADMIN_GUI_URL=http://localhost:7002
volumes:
- ./kong/kong.yml:/etc/kong/kong.yml:ro
networks: - food-network
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:7001/" ]
interval: 30s
timeout: 10s
retries: 3
Proxy
- "7443:8443"
Proxy (SSL)
- "8001:8001"
Admin
- "7002:8002"
GUI
- "7444:8444"
Admin (SSL)
environment:
- KONG_DATABASE=off
无数据库模式
- KONG_DECLARATIVE_CONFIG=/etc/kong/kong.yml
使用 kong.yml 配置
- KONG_ADMIN_LISTEN=0.0.0.0:8001
- KONG_ADMIN_GUI_URL=http://localhost:7002
volumes:
- ./kong/kong.yml:/etc/kong/kong.yml:ro
networks: - food-network
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:7001/" ]
interval: 30s
timeout: 10s
retries: 3
配置说明
- 无数据库模式(DB-less Mode):通过设置
KONG_DATABASE=off,Kong 运行在无数据库模式下,所有配置通过声明性 YAML 文件(kong.yml)进行管理。 - 管理员 API:Kong 的管理员 API 监听在端口
8001,用于执行管理操作和配置。 - 代理端口:API 请求通过 Kong 的代理端口
8000(HTTP)和8443(HTTPS)进行路由。 - 健康检查:配置了健康检查以确保 Kong 服务正常运行。
声明性配置文件示例
在无数据库模式下,Kong 使用声明性配置文件来定义服务、路由及其他设置。以下是一个基础配置示例,用于路由四个微服务:auth-service、restaurant-service、order-service 和 notification-service。
_format_version: "3.0"
_transform: true
services:
- name: auth-service
url: http://auth-service:5000
connect_timeout: 60000
write_timeout: 60000
read_timeout: 60000
routes:
- name: auth-route
paths:
- /api/auth/
- name: restaurant-service
url: http://restaurant-service:5001
connect_timeout: 60000
write_timeout: 60000
read_timeout: 60000
routes:
- name: restaurant-route
paths:
- /api/restaurants/
- name: order-service
url: http://order-service:5002
connect_timeout: 60000
write_timeout: 60000
read_timeout: 60000
routes:
- name: order-route
paths:
- /api/orders/
- name: notification-service
url: http://notification-service:5003
connect_timeout: 60000
write_timeout: 60000
read_timeout: 60000
routes:
- name: notification-route
paths:
- /api/notifications/
配置解析
- 服务:每个服务对应于食品配送架构中的一个微服务,包括“身份验证服务”、“餐厅服务”、“点餐服务”和“通知服务”。
- 路由:定义外部请求如何映射到内部服务。例如,
/api/auth/路由到auth-service。
启动 Kong
完成上述配置后,只需运行以下命令即可启动 Kong:
docker-compose up
Kong 将作为 API 流量的入口,处理负载均衡、路由以及其他插件配置。通过定义的路由,您可以轻松与各个微服务交互。
总结
Kong 的灵活性及其在无数据库模式下的高效运行,使其成为 food-delivery 微服务项目的理想 API 网关。它能够有效地在多个服务之间路由流量,简化了微服务架构的管理。
如果您正在寻找一个高性能、易于集成的 API 网关,Kong 是一个值得考虑的选择。未来,我还将为项目添加身份验证功能,进一步增强安全性。
原文链接: https://medium.com/@manzurulhoque/implementing-kong-api-gateway-for-microservices-1a4a85303102
最新文章
- 如何测试实时视频流API性能 – FastPix
- 如何用 OpenAPI 在 Express 中构建更好的 API
- 使用 Intersection Observer API 实现懒加载 – LogRocket 博客
- API在社交媒体中的应用
- 实战拆解:如何使用 ChatGPT Agent 实现自动化多步骤任务
- 使用AI进行API设计
- 深入解析API Gateway:微服务架构中的关键组件及其重要功能
- 如何获取巴法云开放平台 API Key 密钥(分步指南)
- 没有中国银行卡怎么用微信支付?探索国际用户的支付新思路
- Python字典(dict)完全指南
- OWASP API十大漏洞及DAST如何保护您 …
- API安全在物联网(IoT)中的关键作用