KONG API 网关中的负载均衡

Posted

技术标签:

【中文标题】KONG API 网关中的负载均衡【英文标题】:Load balancing in KONG API Gateway 【发布时间】:2017-01-14 19:20:19 【问题描述】:

我们在 Kong API 网关后面有多个微服务实例,我们希望在其中平衡用户请求的负载。

说微服务1在多个实例中相乘,这些实例保存在KONG API网关后面;在这种情况下,来自用户 1 的请求应该命中第一个实例,来自用户 2 的请求应该根据它们的可用性(负载平衡)命中同一服务的其他实例。 (ie) 我是否可以在 kong 中为单个 API 提供多个上游 URL。我们不想使用 nginx 进行负载平衡。请建议我们如何解决它。

【问题讨论】:

关注此问题github.com/Mashape/kong/issues/157 - 此功能应在 v0.10 中发布 【参考方案1】:

如果您不想要基于 DNS 的负载平衡,可以在 Kong 中使用环平衡器策略。详情请参考Kong Load Balancing Reference!

# create an upstream
$ curl -X POST http://kong:8001/upstreams \
    --data "name=address.v1.service"

# add two targets to the upstream
$ curl -X POST http://kong:8001/upstreams/address.v1.service/targets \
    --data "target=192.168.34.15:80"
    --data "weight=100"
$ curl -X POST http://kong:8001/upstreams/address.v1.service/targets \
    --data "target=192.168.34.16:80"
    --data "weight=50"

# create an API targeting the Blue upstream
$ curl -X POST http://kong:8001/apis/ \
    --data "name=address-service" \
    --data "hosts=address.mydomain.com" \
    --data "upstream_url=http://address.v1.service/address"

主机头设置为 address.mydomain.com 的请求现在将由 Kong 代理到两个定义的目标; 2/3 的请求将转到http://192.168.34.15:80/address(权重=100),1/3 将转到http://192.168.34.16:80/address(权重=50)。

【讨论】:

【参考方案2】:

从 0.10 开始,您将能够创建命名上游,并从中关联/删除目标。

例如,如果您有 upstream_url=http://helloworld/,您可以创建一个 helloworld 上游并将目标关联到它:

curl -d "name=helloworld" 127.0.0.1:8001/upstreams
curl -d "host=some.host.com" 127.0.0.1:8001/upstreams/helloworld/targets/
curl -d "host=2.2.2.2" 127.0.0.1:8001/upstreams/helloworld/targets/

【讨论】:

上游(helloworld)如何链接到upstream_url(helloworld)?或者upstream是如何链接到api对象的?

以上是关于KONG API 网关中的负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Kong网关之负载均衡、动态路由配置

9.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 高级进阶

我们如何使用 Kong 替换现有的 Nginx?

用于微服务的私有子网 ecs 连接上负载均衡器的 AWS API 网关

API网关之Kong简介

API网关——Kong实践分享