[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_USER
和POSTGRES_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_USER
和KONG_PG_PASSWORD
:Postgres用户名和密码。Kong Gateway需要登录信息来将配置数据存储在KONG_PG_HOST
数据库中。 -
所有
_LOG
参数:设置输出日志的文件路径,或者使用示例中的值将消息和错误打印到stdout
和stderr
。 -
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正常情况会出现如下界面:
以上参考 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获取到网关数据。