当前位置: 首页 > article >正文

使用API网关Kong配置反向代理和负载均衡

简介

Kong 是一个微服务API网关。

Kong是一个云原生,快速,可扩展和分布式微服务抽象层(也称为API网关,API中间件或在某些情况下为Service Mesh)。
作为2015年的开源项目,其核心价值在于高性能和可扩展性。
Kong积极维护,广泛应用于从创业公司到Global 5000以及政府组织等公司的生产。

Konga 是一个用于管理网关Kong的管理端,通过它可以方便的进网关进行管理配置。

使用网关能解决很多问题:

  1. 解决端口和域名问题,代理后消除端口,将域名映射到端口,将服务映射成目录
  2. 微服务代理,将微服务置于内网,统一由网关代理
  3. 授权,可以配置授权管理,主要用于API授权
  4. 负载均衡,可以增强高访问量下的可用性,解决部署时的服务中断问题

本文主要讲述使用 Konga 对 Kong 进行网关管理配置

安装

安装过程具体请参考官网文档,如果使用docker安装 Kong 和 Konga,可以参考 配置docker-compose

配置反向代理

在 APIS 一栏,点击 ADD NEW API 按钮,添加一个代理:

  • 其中,Name 为显示名称,可任意填写;
  • Hosts 为所要使用的域名,如果不填写,则使用网关绑定的域名;如果填写,则可通过该域名访问;
  • Uris 为访问路径,如果需要将某个服务映射为一个目录,则此处需要配置;
  • Upstream URL 为上游地址,即微服务实际地址,另外可将微服务置于内网,此处即为内网地址。

需要注意的是,如果页面中有301/302跳转,需要将 Preserve Host 勾选,以保证跳转后,header中携带的 Location 中的域名为代理后的域名,否则会出现实际域名/内网域名,造成混乱,甚至暴露微服务地址

示例一:普通反向代理

配置项内容说明
Namedashboard只是为了方便识别
Hostsdashboard.xxx.com绑定的域名,类似于vhosts
Uris/绑定目录
Methods请求方法,默认不填
Upstream URLhttp://192.168.0.2:8080实际微服务地址,建议使用内网ip, 并将该服务屏蔽外网访问
Strip uriYES
Preserve HostYES转发时保留域名,处理301问题
Https onlyYES如果不使用https,不勾选

配置负载均衡

需要注意的是,如果要使用负载均衡,需要配置 上游 (UPSTREAMS)。

在 UPSTREAMS 一栏,点击添加,Name 为一个域名形式的上游名称,如 dashboard.upstream.xxx.com, 添加完后,点击详情里面的Targets,添加一个目标,
Target 为实际的微服务地址,如 192.168.0.1:8080, 注意这里不写http协议,只写ip或域名。

一个 UPSTREAMS 可以配置多个 Targets, 针对每个 Targets 设置不同的 Weight,即实现了负载均衡。

示例二:负载均衡

UPSTREAMS 配置

配置项内容说明
Namecoupon.api.foundation.com类域名的别名

Targets 配置

配置项内容说明
Target192.168.0.2:8001微服务1的地址(建议使用内网)
WEIGHT100权重

Targets2 配置

配置项内容说明
Target192.168.0.3:8001微服务1的地址
WEIGHT100权重

Apis 配置

配置项内容说明
Namecoupon名称,任意
Hosts留空使用网关默认的域名,如 api.xxx.com
Uris/coupon通过 api.xxx.com/coupon 访问该服务
Methods留空不限制
Upstream URLhttp://coupon.api.foundation.com/api/这里为配置的 UPSTREAMS 里的 Name
Strip uriYES
Preserve HostYES
Https onlyYES如果不使用https,不勾选

参考文档

  • Kong
  • Konga
  • basic-auth-trans
http://www.lryc.cn/news/2403314.html

相关文章:

  • BugKu Web渗透之eval
  • DAY45 可视化
  • 11.RV1126-ROCKX项目 API和人脸检测画框
  • 超构光学与 AR 的深度融合 | 攻克 VAC 与眼动范围难题
  • [ Qt ] | 与系统相关的操作(三):QFile介绍和使用
  • RetroMAE 预训练任务
  • 软件工程:如何做好软件产品
  • 蓝桥杯 省赛 2025python(B组)题目(分析)
  • React - 组件通信
  • 《前端面试题:CSS的display属性》
  • 飞牛使用Docker部署Tailscale 内网穿透教程
  • 《数据挖掘》- 房价数据分析
  • centos中的ulimit命令
  • git提交代码和解决冲突修复bug
  • 华为仓颉语言初识:并发编程之同步机制(上)
  • php中实现邮件发送功能
  • C++之动态数组vector
  • arc3.2语言sort的时候报错:(sort < `(2 9 3 7 5 1)) 需要写成这种:(sort > (pair (list 3 2)))
  • Android动态广播注册收发原理
  • Ubuntu 系统通过防火墙管控 Docker 容器
  • AI 模型分类全解:特性与选择指南
  • 【Zephyr 系列 11】使用 NVS 实现 BLE 参数持久化:掉电不丢配置,开机自动加载
  • 【Android】Android Studio项目代码异常错乱问题处理(2020.3版本)
  • n皇后问题的 C++ 回溯算法教学攻略
  • 一些免费的大A数据接口库
  • DeepSeek本地部署及WebUI可视化教程
  • 机器学习算法时间复杂度解析:为什么它如此重要?
  • SSIM、PSNR、LPIPS、MUSIQ、NRQM、NIQE 六个图像质量评估指标
  • 【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程
  • centos查看开启关闭防火墙状态