(.net core)Kong网关的使用
一、优势:
提供统一的 API 管理,简化流量控制、负载均衡、安全性控制等工作。
有可视化界面可操作,支持高度 可扩展性,可以通过插件来扩展功能。
在 微服务架构 中表现优异,支持多种协议和高并发场景。
具有 高可用性、高性能 和良好的 监控、日志记录 功能。
基于 Nginx 和 Lua 构建,能够提供低延迟的请求处理。
二、使用Docker安装,.net core webapi做测试
这里有个坑,国内很多镜像加速网址都失效了,所以我们加载镜像很可能会报错:
Unable to find image 'postgres:13' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded.
东找西找 找到了目前我的配置:
点击查看代码
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://6k0ibwjk.mirror.aliyuncs.com",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
1.docker network create kong-net
【Docker 容器默认运行在隔离的网络环境中。如果你运行多个容器(例如,Kong 网关、数据库、服务容器等),这些容器之间需要通信,而 Docker 的自定义网络可以实现以下目的:
- 容器互通:在同一个网络中的容器可以通过容器名(而不是 IP 地址)直接访问彼此。
- 网络隔离:只有加入相同网络的容器才能相互通信,增强了安全性。
- 网络驱动:自定义网络支持不同的驱动类型(如 bridge、overlay 等),满足多样化需求。】
2.docker run -d --name kong-database --network=kong-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e "POSTGRES_PASSWORD=kongpass" postgres:13
【Kong 目前使用PostgreSql(也可以使用Facebook开源的分布式的NoSQL数据库:Cassandra)】
3.docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_PASSWORD=kongpass" kong:3.5.0 kong migrations bootstrap
【初始化或者迁移数据库】
4.docker run -d --name kong-gateway --network=kong-net -u root -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" -p 8000:8000 -p 8443:8443 -p 192.168.1.4:8001:8001 -p 192.168.1.4:8444:8444 kong:3.5.0
【启动kong容器】
如果想支持所有IP都可以访问,那就可以不加本机IP
5.浏览器调用 http://{服务器ip}:8001/ 来验证Kong Admin 是否联通 (出现大json说明安装成功了)。
6.docker run -p 1337:1337 --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_CASSANDRA_CONTACT_POINTS=kong-database" -e "DB_DATABASE=konga" -e "KONGA_HOOK_TIMEOUT=120000" --name konga pantsel/konga:latest
【安装konga】
我这里是简单的Development环境
注意!!!这里有个坑就是,我所有的国内镜像加速器都用了但是仍然拉取失败(连接超时),后来查了查,可能是因为konga的镜像存放位置国内镜像获取不到,爬梯子才成功拉取到了......
运行完后,如果成功的话可以通过http://192.168.1.4:1337/访问控制台
这里的URL要填写http://192.168.1.4:8001/(kong admin)
Kong实现负载均衡
1.IIS发布两个webapi项目,分别是9999和9998端口(两个项目的方法路径一致)
这里我遇到过一个问题就是任务栏可以显示IIS但是界面上没有
先查看IIS管理器属性,找到其位置
管理员模式打开cmd命令行,并切换到上面的文件夹下运行Inetmgr.exe /reset
2.首先创建一个UPSTREAM
3.给我们创建的UPSTREAM创建两个Target
4.创建Service
Host对应UPSTREAM的Name
5.Route设置
- Path Handling v0:Kong 会将路径 /activity 去除,只留下 /,因此请求会被转发到后端服务的 / 路径。
- Path Handling v1:Kong 会保留 /activity 路径,将请求转发到后端服务的 /activity 路径。
6.实现负载均衡
Kong实现API限流
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤