记录部署kong网关过程

[TOC]

安装Kong网关过程记录

*Kong网关简介

​ Kong是一个轻量级的API网关和微服务管理平台,它基于Nginx和Lua开发,可以快速地将现有的微服务架构转换为一个高效的API网关。

​ Kong提供了一系列的功能,包括路由、负载均衡、认证、授权、监控和日志等,可以帮助开发者轻松地管理和维护微服务架构下的API。

​ Kong网关还支持插件热插拔,不仅支持Lua语言编写插件,还支持Golang、Java等语言编写插件,可以帮助开发者快速地实现API网关的功能。

安装步骤

使用Docker模式部署Kong网关CE版本

1. 安装数据库

1.1 创建一个自定义的Docker网络

此步骤允许与KONG网关交互相关的容器发现并相互通信,与主机网络隔离

docker network create kong-net

1.2 安装PostgraSQL数据库本体

 docker run -d --name kong-database \
  --network=kong-net \
  -p 5432:5432 \
  -e "POSTGRES_USER=root" \
  -e "POSTGRES_DB=kong" \
  -e "POSTGRES_PASSWORD=kongpass" \ #如果密码含特殊符号需要把双引号改为单引号,否则无法正常识别指令
  postgres:13
  • POSTGRES_USERPOSTGRES_DB :将这些值设置为 kong 。这是Kong Gateway期望的默认值。
  • POSTGRES_PASSWORD :将数据库密码设置为任意字符串。
  • 在这个例子中,名为 kong-database 的Postgres容器可以与 kong-net 网络上的任何容器通信。

1.3 初始化Kong网关数据库

docker run --rm --network=kong-net \
 -e "KONG_DATABASE=postgres" \
 -e "KONG_PG_HOST=kong-database" \
 -e "KONG_PG_PASSWORD=kongpass" \
kong:3.6.1 kong migrations bootstrap

其中:

  • KONG_DATABASE :指定Kong使用的数据库类型。
  • KONG_PG_HOST :上一步中通过 kong-net 网络进行通信的Postgres Docker容器的名称。
  • KONG_PG_PASSWORD :您在上一步中打开Postgres容器时设置的密码。
  • KONG_PASSWORD (仅限企业):Kong Gateway的管理员超级用户的默认密码。
  • {IMAGE-NAME:TAG} kong migrations bootstrap :按顺序,这是Kong Gateway容器的名称和标记,后面是命令Kong来准备Postgres数据库。

2. 安装Kong网关

2.1 安装Kong Gateway组件

运行以下命令,启动一个带有Kong Gateway的容器:

docker run -d --name kong-gateway \
 --network=kong-net \
 -e "KONG_DATABASE=postgres" \
 -e "KONG_PG_HOST=kong-database" \
 -e "KONG_PG_USER=kong" \
 -e "KONG_PG_PASSWORD=kongpass" \
 -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
 -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
 -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
 -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
 -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
 -e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
 -p 8000:8000 \
 -p 8443:8443 \
 -p 127.0.0.1:8001:8001 \
 -p 127.0.0.1:8002:8002 \
 -p 127.0.0.1:8444:8444 \
 kong:3.6.1

其中:

  • --name--network :要创建的容器的名称,以及它在其上通信的Docker网络。

  • KONG_DATABASE :指定Kong使用的数据库类型。

  • KONG_PG_HOST :通过 kong-net 网络进行通信的Postgres Docker容器的名称。

  • KONG_PG_USERKONG_PG_PASSWORD :Postgres用户名和密码。Kong Gateway需要登录信息来将配置数据存储在 KONG_PG_HOST 数据库中。

  • 所有 _LOG 参数:设置输出日志的文件路径,或者使用示例中的值将消息和错误打印到 stdoutstderr

  • KONG_ADMIN_LISTEN :Kong Admin API监听请求的端口。

  • KONG_ADMIN_GUI_URL :访问Kong Manager的URL,前面有协议(例如 http:// )。

  • KONG_LICENSE_DATA :(仅限企业)如果您有许可证文件并已将其保存为环境变量,则此参数将从您的环境中提取许可证。

2.2 验证安装

​ 使用Admin API访问 /services 服务:

curl -i -X GET --url http://localhost:8001/services

​ 应该会收到一个 类似如下的200 状态代码。

HTTP/1.1 200 OK
Date: Thu, 16 May 2024 20:40:13 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: http://172.28.14.226:8002
X-Kong-Admin-Request-ID: c987174effca9e0e8417ca5050a14735
vary: Origin
Access-Control-Allow-Credentials: true
Content-Length: 783
X-Kong-Admin-Latency: 8
Server: kong/3.6.1.3-enterprise-edition

2.3 登录Kong网关后台

​ 输入http://127.0.0.1:8002正常情况会出现如下界面:

image-20240517044338830

以上参考 Kong文档 Install with Docker章节

4. Done!

遇到的问题:

1.首次安装完毕后访问 Kong Manager 时,Kong Manager向Admin API请求数据会出现跨域问题,无法正常获取数据。需要在 安装步骤 -> Kong网关部分 -> 第一步初始化Kong网关时把KONG_ADMIN_GUI_URL变量设置为实际访问的地址。

或者安装完毕后执行以下命令

docker exec -i <这里填Kong网关容器ID> /bin/sh -c "export KONG_ADMIN_GUI_PATH='/'; export KONG_ADMIN_GUI_URL='http://172.28.14.226:8002'; kong reload; exit"

KONG_ADMIN_GUI_URL=‘http://172.28.14.226:8002’,需要填写实际访问Kong Manager管理平台的地址;比如通过172.28.14.226访问就不能填写127.0.0.1,或者通过127.0.0.1访问就不能填写172.28.14.226,否则跨域规则匹配不上导致Kong Manager无法通过Admin API获取到网关数据。