微服务 Api 网关 Kong 单机节点部署学习

Kong 与 Nginx 对比及部署指南

一、Kong 与 Nginx 核心区别

Kong 和 Nginx 都是网络服务领域的常用工具,但定位、功能和适用场景有显著差异,二者并非简单替代关系,而是各有侧重。

维度 Nginx Kong
定位 高性能 HTTP 服务器、反向代理服务器、负载均衡器 基于 Nginx 的开源 API 网关(API Gateway)
技术基础 纯 C 语言开发,轻量高效 基于 Nginx + OpenResty(扩展 Lua 脚本支持)构建
核心功能 静态资源服务、反向代理、负载均衡、缓存、SSL 终结等通用 web 服务能力 专注于 API 全生命周期管理:API 路由、认证授权(JWT/OAuth)、限流熔断、监控日志、插件扩展等
适用场景 通用 web 服务(如静态网站、动态应用代理)、负载均衡、反向代理等 API 网关场景(如微服务架构中统一管理 API 入口、控制 API 访问)
扩展性 需通过 C 语言模块扩展,门槛较高 基于 Lua 脚本的插件系统,扩展灵活,社区提供丰富插件(限流、监控、安全等)

二、Kong 能否替代 Nginx?

不能完全替代,二者定位互补,常结合使用

  1. 技术层面
    Kong 本质是“基于 Nginx 的上层应用”,其底层依赖 Nginx 的网络处理能力(如请求转发、连接管理等)。因此,Kong 无法脱离 Nginx 独立运行,更谈不上“替代 Nginx 的核心功能”。

  2. 功能层面

    • 若场景是“通用 web 服务”(如部署静态网站、代理传统应用),Nginx 更轻量、直接,Kong 反而冗余。
    • 若场景是“API 管理”(如微服务中统一 API 入口、控制访问权限、监控 API 调用),Kong 提供的 API 专属功能(如插件化限流、认证)是 Nginx 原生不具备的,此时 Kong 是更好选择,但底层仍需 Nginx 处理基础网络转发。
  3. 实际应用
    二者常配合使用:

    • Nginx 作为底层反向代理/负载均衡器,处理通用流量;
    • Kong 作为 API 网关,专注管理 API 流量(如对 /api/* 路径的请求进行认证、限流等)。

三、Kong 环境搭建准备

1. 安装依赖工具

1
apt install docker && apt install docker-compose

2. 更换镜像源(加速下载)

1
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

更换镜像源执行效果

四、编写 docker-compose.yml 文件

创建并编辑配置文件:

1
vim docker-compose.yml

配置内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
version: '3'
services:
kong-database:
image: postgres:9.6
restart: always # 每次总是启动
networks:
- kong-net
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
ports:
- "5432:5432"

kong-migration:
image: kong:latest
command: "kong migrations bootstrap"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
- KONG_PG_HOST=kong-database
links:
- kong-database
depends_on:
- kong-database


kong:
image: kong:latest
restart: always
networks:
- kong-net
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_PROXY_LISTEN: 0.0.0.0:8000
KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
KONG_ADMIN_LISTEN: 0.0.0.0:8001
depends_on:
- kong-migration
links:
- kong-database
healthcheck:
test: ["CMD", "curl", "-f", "http://kong:8001"]
interval: 5s
timeout: 2s
retries: 15
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"

konga-prepare:
image: pantsel/konga:latest
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga"
networks:
- kong-net
restart: on-failure
links:
- kong-database
depends_on:
- kong
- kong-database

konga:
image: pantsel/konga:latest
restart: always
networks:
- kong-net
environment:
DB_ADAPTER: postgres
DB_HOST: kong-database
DB_USER: kong
DB_DATABASE: konga
DB_PASSWORD: kong
depends_on:
- kong
- kong-database
ports:
- "1337:1337"
networks:
kong-net:
driver: bridge

五、启动服务

拉取并启动所需镜像:

1
docker-compose up -d

启动服务执行效果

六、访问 Konga 管理界面

  1. 浏览器访问服务器的 1337 端口(http://服务器IP:1337
  2. 完成登录后,设置 Kong 地址为 http://服务器IP:8001

Konga 管理界面配置

Konga 配置完成效果

至此,Kong 及配套管理工具 Konga 安装完成。