深入理解API网关Kong:动态负载均衡配置

news2024/12/21 3:58:41

深入理解API网关Kong:动态负载均衡配置

背景

在 NGINX 中,负载均衡的配置主要在 upstream 指令中进行。upstream 指令用于定义一个服务器群组和负载均衡方法。客户端请求在这个服务器群组中进行分发。

NGINX 提供了以下几种负载均衡方法:

  1. 轮询(round-robin):这是默认的负载均衡方法,每个请求按照时间分发,从第一个服务器开始,直到最后一个,然后重新开始。

  2. 最少连接(least_conn):这种方法优先分发给当前活动连接数最少的服务器。

  3. IP 散列(ip_hash):每个请求的分发根据客户端 IP 地址的 hash 结果进行。这样,来自同一个 IP 的客户端会总是连接到同一个服务器,除非该服务器不可用。

  4. 基于权重(weight):你可以在每个 server 指令后添加一个 weight 参数,用来调整该服务器的权重。权重越大,分配到的请求越多。

以下是一个简单的例子,展示如何配置一个使用轮询方法的负载均衡:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

在这个例子中,我们定义了一个名为 backend 的服务器群组,其中包含三个服务器:backend1.example.combackend2.example.combackend3.example.com。NGINX 将按照轮询方法在这三个服务器之间分发请求。

这是一个带权重的轮询负载均衡配置的例子:

http {
    upstream backend {
        server backend1.example.com weight=3;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

在这个例子中,backend1.example.com 的权重为 3,而其他两个服务器的权重默认为 1。因此,backend1.example.com 将接收到大约三倍于其他服务器的请求。

但这种使用nginx配置的方式,其实是比较麻烦的是静态的,每次改完配置都要重启nginx服务(当然nginx也可以动态就是比较麻烦)。

Kong动态负载均衡

kong就解决了这个问题,可以动态配置且无需重启。接下来就介绍kong如何配置动态负载均衡,用konga可视化配置。

使用http接口操作

设置upstreams

Kong 通过 Upstream 和 Target 实体来提供负载均衡功能。Upstream 对象表示一个可以路由 HTTP 请求的虚拟主机。Target 则是 Upstream 的成员,即实际的服务器。

以下是如何使用 Kong Admin API 创建和配置 Upstream 的步骤:

创建一个 Upstream:

$ curl -X POST http://localhost:8001/upstreams \
    --data "name=example-upstream"

在这个例子中,我们创建了一个名为 “example-upstream” 的 Upstream。

添加 Target 到 Upstream:

$ curl -X POST http://localhost:8001/upstreams/example-upstream/targets \
    --data "target=example.com:80" \
    --data "weight=100"

这个例子将一个新的 Target(example.com:80)添加到了我们刚才创建的 “example-upstream” Upstream。Target 的权重被设定为 100,权重值越高,该服务器处理的流量就越多。

更新一个 Upstream:

$ curl -X PATCH http://localhost:8001/upstreams/example-upstream \
    --data "slots=500"

在这个例子中,我们更新了 “example-upstream” Upstream 的 slots 值。slots 是一个可选参数,用于设置 Upstream 的一致性哈希轮询算法的大小。

删除一个 Upstream:

$ curl -X DELETE http://localhost:8001/upstreams/example-upstream

这个例子将删除我们之前创建的 “example-upstream” Upstream。

以上就是在 Kong 中设置 Upstream 的一般步骤。

设置services

在 Kong 中,Service 是你想代理的上游 API 或者微服务的抽象。你可以使用 Kong 的 Admin API 来创建和配置服务。

以下是使用 Kong Admin API 创建和配置 Service 的基本步骤:

创建一个 Service:

$ curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=example-service' \
  --data 'url=http://example.com'

这个例子创建了一个名为 “example-service” 的 Service,代理的 URL 是 http://example.com

更新一个 Service:

$ curl -i -X PATCH \
  --url http://localhost:8001/services/example-service \
  --data 'url=http://new-example.com'

这个例子更新了 “example-service” Service 的 URL,新的 URL 是 http://new-example.com

删除一个 Service:

$ curl -i -X DELETE \
  --url http://localhost:8001/services/example-service

这个例子删除了 “example-service” Service。

设置route

在 Kong 中,Route 是请求的入口,将接入的请求路由到指定的 Service。每个 Route 都必须关联到一个 Service,这个 Service 可以是 Kong 本地的,也可以是外部的。每个 Service 可以有多个 Route。

以下是使用 Kong Admin API 创建和配置 Route 的基本步骤:

创建一个 Route 并关联到 Service:

$ curl -i -X POST \
  --url http://localhost:8001/services/example-service/routes \
  --data 'paths[]=/testpath'

在这个例子中,我们创建了一个新的路由,并将其关联到了 “example-service” Service。当请求的路径为 “/testpath” 时,请求将被路由到 “example-service”。

更新一个 Route:

$ curl -i -X PATCH \
  --url http://localhost:8001/routes/{route_id} \
  --data 'paths[]=/newpath'

在这个例子中,我们更新了路由的路径。新的路径是 “/newpath”。请将 {route_id} 替换为你想更新的路由的 ID。

删除一个 Route:

$ curl -i -X DELETE \
  --url http://localhost:8001/routes/{route_id}

在这个例子中,我们删除了指定的路由。请将 {route_id} 替换为你想删除的路由的 ID。

路由的匹配可以基于多个条件,如主机名(host)、路径(path)、HTTP 方法(method)和客户端 IP 地址等。你可以根据需要配置这些条件。

使用konga页面操作

这里以代理一个后台接口为例(http://192.168.100.22:8888/swagger-resources):

image-20230604223527773

设置upstreams

如图所示,选择左侧菜单的UPSTREAMS,点击CREATE UPSTREAM创建upstreams

image-20230604221835167

create upstream

image-20230604222417700

点击detals

image-20230604222528226

image-20230604222609301

设置targets

image-20230604222635309

image-20230604222654029

设置services

image-20230604223051728
image-20230604223109356

设置route

image-20230604223136456

设置paths的时候记得回车

image-20230604223233249

效果

代理前的地址:

image-20230604223749565

代理后的地址:

image-20230604223828687

到这证明我们的代理生效了!

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

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

相关文章

python接口自动化 —— 什么是接口、接口优势、类型(详解)

简介 经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚。接下来先看一下…

从简历被拒到收割 8 个高薪 offer,我用了 3 个月...

半年前我一个小老弟从外包离职了,本以为有两年经验进个一般的公司没有问题的,结果人家一看是外包出来的,面试问的问题也不是很懂,简历被拒了好几次。还好这个小老弟没有气馁,在论坛博客和里面的大佬虚心学习&#xff0…

地震勘探基础(八)之地震动校正

地震动校正 在地震资料数字处理过程中,速度分析,动校正和水平叠加三个处理内容是相互关联的。水平叠加是为了提高地震资料的信噪比,要想得到好的叠加效果,必须做好动校正。而做好动校正,需要进行准确的速度分析。只有…

Tomcat部署

目录 Tomcat 什么是 servlet? 什么是 JSP? Tomcat 功能组件结构: Container 结构分析: Tomcat 请求过程: ---------------------Tomcat 服务部署------------------------- 1.关闭防火墙,将安装 Tomcat 所需软…

长尾词挖掘,长尾词的优化方法有哪些

我们都知道,长尾词能给我们带来较高的流量和转化率,且优化难度低,成本低。今天就来分享长尾词的优化方法。 首先需要挖掘长尾词,挖掘长尾词的方法以下3种比较实用: 1、使用长尾词挖掘工具 可以通过第三方工…

ROS:tf坐标系广播与监听的编程实现

目录 一、创建功能包二、创建代码并编译运行(C)2.1创建代码2.2编译2.3运行 一、创建功能包 创建的 learning_tf 包来进行代码存放和编译 cd ~/catkin_ws/src catkin_create_pkg learning_tf roscpp rospy tf turtlesim二、创建代码并编译运行&#xff…

银行业务相关

省联社,农商行、农村信用社之间的关系 一些知乎回答 省联社、农商行、农村信用社之间有什么联系? - mobye的回答 - 知乎 https://www.zhihu.com/question/24220844/answer/28276903 发源于空想社会主义,世界上第一个信用合作社诞生于1984年的…

第9章集 合

文章目录 9.1 Java集合框架9.1.1 集合接口与实现分离9.1.3 迭代器9.1.4 泛型实用方法 9.2 集合框架中的接口9.3.1 链表9.3.2 数组列表9.3.3散列集9.3.4 树集9.3.5 队列与双端队列9.3.6 优先队列 9.4 映射9.4.1 基本映射操作9.4.2 更新映射条目9.4.3 映射视图9.4.4 弱散列映射9.…

python数据可视化-matplotlib学习总结

目录 (一)常见的图形 1、趋势图(直线图):plot() 2、散点图:scatter(): (二)统计图形 1、柱状图:bar( 2、条形图:barh() 3、直方图&#xff…

RSA加密算法解析

目录 RSA加密 数学原理 证明: 欧拉函数 欧拉定理 模反元素 模运算 指数运算 同余 欧几里德算法GCD 填充(padding) 对称加密的应用工作流程 非对称加密的应用工作流程 1)加密过程 2)解密过程 代码实现 密码学知识扩展 加密体制 如何破解…

亚马逊云科技出海日倒计时,潮向新世界,亮点抢先知

数字化浪潮之下,中国企业的全球化步伐明显提速。从“借帆出海”到“生而全球化”,中国企业实现了从传统制造业“中国产品”出口,向创新“中国技术”和先导“中国品牌”的逐步升级。 作为全球云计算的开创者与引领者,亚马逊云科技…

org.apache.commons.io.monitor+logback.xml+vue实时显示当前日志信息

使用记录: 第一: 刷新页面导致session问题 可以在java的session中记录,如果是同一个客户重新链接的话,直接返回java的session的数据ssemiter给前端,前端自动接着获取日志。 ssemiter:详情自行百度ssemit…

墨天轮专访TDengine陶建辉:坚持做难而正确的事,三次创业成就不悔人生

导读: 时序数据库(Time Series Database)在最近几年被越来越多的用户接受并使用,并有广泛的应用场景。云原生时序数据库 TDengine 一直稳居墨天轮时序数据库榜首,其近期的海外发展也初见成效。本期,墨天轮技…

Mybatis(黑马程序员)

1. Mybatis基础操作 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询条件查询 新增 更新 …

分享几个实用又有趣的工具类网站

今天来给大家分享几个众多网友们推荐的,实用又有趣的工具类网站 DeepL翻译:免费的在线翻译网站,大名鼎鼎的翻译神器 DeepL,翻译准确、语句通顺,效果相当好。 https://www.deepl.com/translator BgSub 消除或者替换图…

几句话说清楚数据库的基本范式

第一范式 1NF:属性不能再被拆分。 人(身份证号, 姓名, 性别, 联系方式) 不满足 1NF因为联系方式包含了电话号码、电子邮箱、微信、QQ 等人(身份证号, 姓名, 性别, 电话号码) 满足 1NF 第二范式 2NF:不存在非主属性对主键的部分函数依赖关系。 R(A, B,…

替换jar包中的yml,class等文件的方法

文章目录 1.使用场景2.先准备好待替换的文件3.下载服务器上的jar包4.解压出来指定的文件5.将文件打入jar包6.查看是否替换成功 1.使用场景 由于线上项目中突然爆出一个bug问题,影响到用户使用,但是 线上的jar包版本,已经是很久的了&#xff…

rpmbuild编译安装制作rpm包

什么是rpm包? rpm 相当于windows中的安装文件,它会自动处理软件包之间的依赖关系。 rpm优点: 包管理系统简单,通过几个命令就可以实现包的安装、升级、卸载。 安装速度比源码包快的多。 缺点: 经过编译,不能看到源代码,功能选择不如源码灵活。依赖性强。 首先说一下流程…

基于RPC协议的接口自动化测试可以用Python语言实现

基于RPC协议的接口自动化测试可以用Python语言实现。下面是实现步骤: 1、安装依赖库,如protobuf、grpc。 2、编写.proto文件定义接口参数和返回值。 3、使用protoc编译.proto文件生成Python代码。 4、编写客户端代码调用远程接口进行测试。 具体实现…

C++【红黑树封装mapset】

文章目录 前言(一) 修改原红黑树(1)逐步修改并调试运行(2)红黑树的迭代器(3)最后一步最重要的 二、源代码压缩包 前言 我们在开始之前,首先要明白一点,前面我…