Kong简介
Kong是一个开源的云原生API网关和微服务管理平台,它可以帮助开发人员和团队轻松构建、部署和管理现代的API和微服务架构。Kong提供了丰富的功能,包括流量控制、认证和授权、日志记录、监控和安全性等,可以帮助用户更好地管理他们的API和微服务。Kong还支持插件化扩展,用户可以根据自己的需求选择合适的插件来增强网关的功能。Kong已经被广泛应用于各种规模的企业和组织中,成为他们构建和管理API和微服务的首选解决方案之一。
Docker部署Kong
Kong网关需要数据库持久化配置信息、路由规则、插件配置等,可以使用Cassandra或者PostgreSQL数据库,下面我们以PostgreSQL为例
-
创建一个Docker network
需要创建一个自定义网络,以允许容器相互发现和通信。在此示例中,
kong-net
是网络名称,您可以使用任何名称。
sh
docker network create kong-net
- 启动数据库
sh
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=123456" \
-e "POSTGRES_HOST_AUTH_METHOD=trust" \
postgres:9.6
- kong数据库初始化
sh
docker run --rm \
--network=kong-net \
-e "KONG_LOG_LEVEL=debug" \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=123456" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations bootstrap
- kong启动配置
sh
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=123456" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-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" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
- konga可视化部署
konga是kong的可视化插件,通过konga可以页面配置代理和插件等。
初始化konga数据库
sh
docker run --rm --network=kong-net --link kong-database pantsel/konga:latest -c prepare -a postgres -u postgresql://kong:123456@kong-database:5432/konga
konga启动配置
sh
docker run -itd -p 1337:1337 --network kong-net --name konga \
--link kong-local --link kong-database \
-e "NODE_ENV=production" \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgresql://kong:123456@kong-database:5432/konga" \
pantsel/konga:latest
kong的配置
- 访问konga: http://localhost:1337
- 注册用户
- 链接kong
需要点击链接才连接到kong
到底这里就已经顺利链接上kong网关了,接来可以配置代理和插件了,但是在配置之前,我们简单介绍一下kong的模型
由上图模型可知道有两条链路,取决于要不要配置负载均衡,这里我们两条链路都来配置一下
非负载均衡配置
目标代理地址是http://192.168.0.115:8080/
- 首先配置service
2.配置router (router提供了很多匹配模式,示例以path匹配) 3.访问kong的8000端口: http://localhost:8000/test 可以看到已经代理到我们的目标地址8080端口的服务
负载均衡配置
目标是将请求负载均衡到本地服务的8080端口和8887端口
- router的配置保持与上面不变
- 配置upstream
3.配置traget (负载到多少个服务就有多少个traget) 4.修改service配置 5.访问 http://localhost:8080/test (重复请求可以看到负载均衡效果)