字数 1131,阅读大约需 6 分钟
容器化部署kong,配置service和router
选择Kong 主要因为它是一款成熟的、高性能的开源API 网关,具有高可用性和易扩展性,并且通过插件机制可以轻松实现认证、限流、负载均衡等功能,此外它可以在多种基础设施上运行,包括云端和本地部署。
原文
Kong网关介绍 - 元气少女郭德纲!! - 博客园[1]
什么是kong
Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。Kong Gateway | Kong Docs[2]
什么是OpenResty
OpenResty(又称ngx_openresty)是一个基于NGINX的可伸缩的WEB平台,提供了很多高质量的第三方模块,OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统。总的来说OpenResty的主要优势在于模块化并发响应速度快的超性能Web 应用服务器
组成部分
1、Kong Server :基于nginx的服务器,用来接收API请求。
2、Apache Cassandra/PostgreSQL :用来存储操作数据。
3、Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。
Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,
目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、
API请求限流、请求转发以及Nginx监控。
kong 控制面与数据面的区别:
1. kong 控制面:对外提供admin api供用户设置各种规则设置
2. kong 数据面:根据路由规则将流量转发至对应实例,
控制面将配置规则写入DB中,数据面中的kong会定期从数据库读取配置规则更新规则
视图
传统网关
Kong
数据流
部署
version: "3"
services:
#######################################
# Postgres: The database used by Kong
#######################################
kong-database:
image: docker.1ms.run/postgres:9.6
restart: always
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
ports:
- "15432:5432"
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 5s
timeout: 5s
retries: 5
#######################################
# Kong database migration
#######################################
kong-migration:
image: docker.1ms.run/kong:latest
command: "kong migrations bootstrap"
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong-database
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
links:
- kong-database
depends_on:
- kong-database
#######################################
# Kong: The API Gateway
#######################################
kong:
image: docker.1ms.run/kong:latest
restart: always
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
# 8000:用来接收客户端的 HTTP 请求,并转发到 upstream。
# 8443:用来接收客户端的 HTTPS 请求,并转发到 upstream。
# 8001:HTTP 监听的 API 管理接口。
# 8444:HTTPS 监听的 API 管理接口。
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
#######################################
# Konga database prepare
#######################################
konga-prepare:
image: docker.1ms.run/pantsel/konga:latest
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga"
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong-database
- KONG_PG_DATABASE=konga
- KONG_PG_PASSWORD=kong
links:
- kong-database
depends_on:
- kong-database
#######################################
# Konga: Kong GUI
#######################################
konga:
image: docker.1ms.run/pantsel/konga:latest
restart: always
environment:
DB_ADAPTER: postgres
DB_URI: postgresql://kong:kong@kong-database:5432/konga
NODE_ENV: production
links:
- kong-database
depends_on:
- kong
- konga-prepare
ports:
- "1337:1337"
使用
云原生API网关-Kong部署与konga基本使用-CSDN博客[3]
(1)services:配置要被转发的域名和地(址启动的后端服务)
(2)routes:配置转发到的域名和地址(前端要访问的地址)
(3)consumers:kong的用户管理
(4)plugins:kong的插件。
(5)cwetificates:域名的证书,https肯定有证书吧,配置在这
(6)upstreams:负载均衡(跟nginx中的upstreams一个道理)
service即抽象层面的服务,他可以直接映射到一个物理服务 (host 指向 ip + port),也可以指向一个 upstream 来做到负载均衡。通俗说,这个service就是后台访问接口配置。
Router是路由的抽象,他负责将实际的 request 映射到 service
验证
使用8000端口,验证API请求,在kong的请求里可以看到,有kong_request_id,且在log里显示请求转发成功
178.128.69.202 - - [30/Sep/2025:06:21:11 +0000] "GET /api/v1/scmp/{省略} HTTP/1.1" 200 604 "-" "Apifox/1.0.0 (https://apifox.com)" kong_request_id: "81050c7aa6b3ca240807241148381f1b"
引用链接
[1]
Kong网关介绍 - 元气少女郭德纲!! - 博客园: https://www.cnblogs.com/tcy1/p/16853952.html[2]
Kong Gateway | Kong Docs: https://developer.konghq.com/gateway/[3]
云原生API网关-Kong部署与konga基本使用-CSDN博客: https://blog.csdn.net/qq_42515722/article/details/130721597
评论区