为微服务实现Kong API网关 - Medium

作者:API传播员 · 2025-11-23 · 阅读时间:5分钟
本文详细介绍了如何在food-delivery微服务项目中集成Kong API网关,重点阐述了无数据库模式下的配置方法,包括Docker设置和声明性配置文件(kong.yml),以实现高效的API流量管理和微服务路由。

为微服务架构实现 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-servicerestaurant-serviceorder-servicenotification-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