目 录CONTENT

文章目录

kong 开源网关部署、配置service和router

Administrator
2025-09-30 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

 

字数 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. 1. kong 控制面:对外提供admin api供用户设置各种规则设置

  2. 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

 

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区