使用kong网关来实现负载均衡

news2025/1/23 2:13:51

一、负载均衡

当前一个服务进行多实例部署后,外部调用其中任意一个服务地址都可以得到响应。但是外部不可能记住也不应该记住所有的服务地址,这个时候就需要一个统一入口提供给外部进行调用,类似提供一个虚拟主机形式进行实现。后续就请求这个虚拟主机,由这个虚拟主机进行请求的转发,将请求依次转发给后面的服务,而kong服务就是承担这个虚拟主机的作用,其结构如下:
在这里插入图片描述
外部进行到kong里面后,先通过路径找到route,然后基于route寻找到其绑定的service。service通过load Banlancer(这里是指的upstream) 来任意选择一个tagert进行请求转发。
因此,从这里我们可以看出,kong实现负载均衡需要以下四个组件:ROUTE、SERVICE、UPSTREAM、TARGET
前提条件:已经基于kong网关安装及konga安装成功安装了kong组件,konga暂时不需要,安装的kong的地址是192.168.19.50

二、UPSTREAM

Upstream 是指 Kong Gateway 将请求转发到的 API、应用程序或微服务。 在 Kong Gateway 中,Upstream 对象代表一个虚拟主机名,可用于健康检查、断路和负载平衡多个服务的传入请求。

使用kong Admin API来创建一个upstream

使用curl工具或者postman工具调用都可以

curl命令调用

curl -X POST http://192.168.19.50:8001/upstreams \
  --data name=first_upstream

postman调用

postman成功创建一个新的upstream示例

三、为upstream绑定target对象

1、下载jar包

这里我们使用kong-demo.jar分别在192.168.19.50:8080及8081两个端口运行服务。
jar可以去下图所示地址进行下载,具体链接:https://blog.csdn.net/zhangshenglu1/article/details/130934300在这里插入图片描述

2、部署jar包

[root@min ~]# nohup java -jar kong-demo-0.0.1-SNAPSHOT.jar --server.port=8080 &
[1] 86373
[root@min ~]# nohup java -jar kong-demo-0.0.1-SNAPSHOT.jar --server.port=8081 > 8081.txt &
[2] 86439

使用curl命令检查服务是否已经成功运行,

[root@min ~]# curl http://192.168.19.50:8081/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8080/hello
hello : 8080[root@min ~]# 

可以看到服务已经正常运行了

3、为first_upstream添加192.168.19.50:8081、192.168.19.50:8080两个端口

curl命令如下:

curl -X POST http://192.168.19.50:8001/upstreams/first_upstream/targets \
  --data target='192.168.19.50:8080'
curl -X POST http://localhost:8001/upstreams/first_upstream/targets \
  --data target='192.168.19.50:8081'

postman调用如下:

添加192.168.19.50:8080target
在这里插入图片描述
添加192.168.19.50:8081target
在这里插入图片描述

四、新建一个service

在 Kong Gateway 中,服务是代表外部上游 API 或微服务的实体。 例如,数据转换微服务、计费 API 等。
服务的主要属性是它的 URL。 您可以使用单个字符串指定 URL,或者通过单独指定其协议、主机、端口和路径来指定。
使用admin api来进行创建,创建的官方参考文档:https://docs.konghq.com/gateway/latest/admin-api/#service-object

通过curl 命令进行创建

curl -i -s -X POST http://192.168.19.50:8001/services \
  --data name=first_service \
  --data host='first_upstream'

通过postman来进行创建

在这里插入图片描述

五、给first_service绑定一个新的route

使用admin api来进行创建,

curl命令创建

curl -i -X POST http://localhost:8001/services/first_service/routes \
  --data 'paths[]=/first_service' \
  --data name=first_route

使用postman来进行创建

在这里插入图片描述

六、测试具有负载均衡效果

使用curl命令来进行测试

[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello
hello : 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello

可以看到得到响应的中都是8080和8081两个机器进行轮询

七、测试新增一个示例并且给对应的upstream上新增target,流量是否会均衡到第三个服务上去

1、部署新服务,端口号为8082

[root@min ~]# nohup java -jar kong-demo-0.0.1-SNAPSHOT.jar --server.port=8082 > 8082.txt &
[3] 88221

2、新增一个target

在这里插入图片描述

3、测试新增的target已经可以生效

[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8082[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8082[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8080[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8081[root@min ~]# curl http://192.168.19.50:8000/first_service/hello/sub
sub-hello: 8082[root@min ~]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Socket(七)

文章目录 1. 单文件服务器2. 重定向器Redirector3. 功能完备的HTTP服务器 1. 单文件服务器 要研究HTTP服务器,先从一个简单的服务器开始,无论接受什么请求,这个服务器都始终发送同一个文件。这个单文件服务器名为SingleFileHTTPServer&#…

泛型的介绍以及原理

目录 一、前言 二、什么泛型 三、为什么要使用泛型 3.1、保证了类型的安全性。 3.2、消除强制转换 3.3、提高程序的性能 3.4、 提高了代码的重用性 四、如何使用泛型 4.1、 泛型类 4.2、泛型接口 4.3、泛型方法 五、泛型通配符 5.1、无边界的通配符 5.2、固定上边…

telnet 120.XX8888会超时或者无反应,防火墙加入8888,安全组也加入8888,但是访问120.XX:8888也没有反应

⚠️命令都是远程登录的哦 选这个远程连接: 初次密码自己设置别忘了 1、看是否8888端口是否有正常监听 netstat -ntlp我这边清楚看到没有8888 2、如果没有监听是无法连接,需要安装对应的程序同时监听8888端口 比如我想用宝塔面板 我就需要下载宝塔面…

一步步入门编写PHP扩展

1、写在最前 随着互联网飞速发展,lamp架构的流行,php支持的扩展也越来越多,这样直接促进了php的发展。 但是php也有脚本语言不可避免的问题,性能比例如C等编译型语言相差甚多,所以在考虑性能问题的时候最好还是通过php…

00后实在太强了,98年的我被卷废了,太离谱了...

前言 最近在公司我真的感受到了什么叫“卷”,以往的我划划水日子过的轻轻松松,直到公司最近招了一个00后进来,真的让我感受到了危机,刚进来工资就和我差不多,我刚开始其实有点不太舒服,凭什么我辛辛苦苦干…

在pycharm中调用qt界面功能

目录 一、新建designer文件 1、打开pycharm中的designer 2、创建个widget 3、拖动几个简单按钮 4、保存一下 5、右击test1.ui 这边首先环境已经配置完毕,可以参考之前写的博客: 关于PyQt5的环境搭建_Littlehero_121的博客-CSDN博客 一、新建desi…

如何使用PHM技术提高汽车工业的效率和性能?

在汽车工业中,预测性健康管理(PHM)技术正日益受到关注。作为一种基于数据驱动的解决方案,PHM技术通过实时监测和分析设备和系统的状态,实现对设备健康状况的预测和管理。 图.汽车制造(iStock) 汽…

代码示范【FabEdge v0.8.0】配置 connector 公开端口

FabEdge项目简介: FabEdge是博云在2021年8月发起,基于Kubernetes 构建的专注于边缘计算场景的容器网络方案,支持 KubeEdge 、SuperEdge、OpenYurt 等主流边缘计算框架。旨在解决边缘计算场景下容器网络配置管理复杂、网络割裂互不通信、缺少…

hadoop单机版部署

1.下载hadoop wget --no-check-certificate https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz 2.解压重命名 tar -zxvf hadoop-3.3.1.tar.gz mv hadoop-3.3.1.tar.gz hadoop 3.编辑hosts vim /etc/hosts 172.17.1.1 hadoop925 4.进入配置…

4.Apache网页优化

文章目录 Apache网页优化网页压缩网页缓存隐藏版本信息Apache防盗链 Apache网页优化 Apache网页优化 网页压缩网页缓存 Apache安全优化 隐藏版本信息配置防盗链 网页压缩 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器…

LNMT架构之反向代理负载均衡

目录 一、实验前提环境配置 (一)关闭防火墙,安装本地yum (二)部署tomcat (三)部署Mariadb (四)部署nginx 二、反向代理负载均衡 方法一:(轮…

【算法学习系列】07 - 无序数组中的局部最小值问题

文章目录 说明约束条件简单说下思路解决方案随机无序数组样本生成器算法实现验证代码进行大样本随机测试验证算法正确性 说明 在算法中,局部最小值是指一个函数在一个局部范围内的最小值。 具体而言,如果一个函数在一个小区间内的取值都比该区间内的其他…

C++:STL--priority_queue

文章目录 一.STL设计思想:容器适配器STL--stack的代码设计STL--queue的代码设计stack和queue的默认容器适配器deque的数据结构解析deque的存储结构示意图 二.C仿函数仿函数示例 三.STL--priority_queue(优先级队列)1.C优先级队列的数据结构2.priority_queue的实现框架比较函数(…

chatgpt赋能python:Python中创建画布的函数——matplotlib

Python中创建画布的函数——matplotlib Python作为一种强大的编程语言,拥有许多重要且广泛应用的模块和库。其中,matplotlib是一种用于制作高质量的图形和图表的库,而创建画布的函数便是其基础功能之一。 什么是matplotlib? Ma…

C语言---初始C语言

1、初始C语言 1、编译器主要有:Clang、GCC、WIN-TC、MSVC、Turbo C等 什么是编译? test.c----------------------------->test.exe 这个过程需要经过编译、链接等过程,而众多编译器实现的功能就是把我们写的test.c进行编译。 2、VS20…

如何把“困在”内网的数据释放,进行安全的流转传输呢?

互联网大时代,数据的生产使用与互联网紧密相关,但数据安全和网络安全却既有联系又互不相同。数据安全和网络安全的突出区别是核心主体不同,数据安全关注的数据全生命周期的安全,而网络安全则是侧重保障网络体系和网络环境的安全性…

硬卷完了!低代码打怪升级进阶成神之路(2023年最新版)

一、背景 应用开发周期长一直是IT部门和业务部门面临的问题。 IT部门总是被新的应用需求弄得不堪重负。他们不可能完成业务部门想要完成的每一个项目。同时,业务部门的用户厌倦了等待,并开始完全绕过IT部门。 今天,我们来探索一下“低代码开发…

制药企业高效过滤器检漏参考法规、方法及操作步骤

对制药企业来讲,高效过滤器检漏主要是现场检漏,通过DOP法来发现滤器本身及运输、安装过程中可能存在的问题。常使用气溶胶光度计及多分散气溶胶进行检漏。依据的标准是2010药品GMP指南(测试方法采用ISO14644-3)。 对于制药企业来说,高效过滤器…

自动驾驶TPM技术杂谈 ———— 边缘检测

文章目录 介绍边缘检测与微分运算离散信号的差分滤波Robert算子Prewitt算子Sobel算子拉普拉斯算子 介绍 计算机视觉(Computer Vision,CV)是一门使用计算机模拟生物视觉的学科,目的是使用计算机代替人眼实现对目标的识别、分类、跟…

3.2. 数学类(Math、BigInteger、BigDecimal)

1. Math类 Math类提供了一些基本的数学函数,如求平方根、绝对值、三角函数等。它是一个final类,并且所有的方法都是static的,因此无需创建对象,直接使用类名调用方法即可。 以下是Math类的一些常用方法: abs(double…