我在Kubernetes中部署了一个带有两个吊舱的应用程序。如果我直接调用它的Kubernetes服务(http://app:8080),它将使用循环来平衡这两个荚之间的请求。
实际运行时在应用程序前面包含一个Spring pod,配置方式如下:
@Bean
fun customRouteLocator(builder: RouteLocatorBuilder): RouteLocator {
logger.info("Gateway configuration: {}", gatewayConfigurationProperties)
var routes = builder.routes()
gatewayConfigurationProperties.routes.forEach { service ->
routes = routes.route(service.key) { r ->
r.path("${service.value.contextPath}/**")
.filters { filters ->
filters.requestRateLimiter { rateLimiterConfig ->
rateLimiterConfig.rateLimiter = RedisRateLimiter(1000, 1000)
}
}
.uri(service.value.uri)
}
}
return routes.build()
}gateway:
routes:
app:
uri: http://app:8080
context-path: /app我原以为网关会在两个吊舱之间分配负载,但是它会粘在其中一个豆荚上。
----------------------- ------------
--->| spring-cloud-gateway |---calls-----> | app-pod-1 |
----------------------- X ------------
|
| ------------
---> | app-pod-2 |
------------ 如何使网关使用循环来平衡请求?
我尝试用lb:// (uri: lb://app:8080)作为服务url的前缀,但是我得到了一个503错误。
发布于 2022-01-07 11:10:05
为了使分发负载,而不是粘在一个荚上,我不得不:
lb://而不是http://。implementation("org.springframework.cloud:spring-cloud-loadbalancer")
implementation("org.springframework.cloud:spring-cloud-starter-kubernetes-fabric8")在此情况下,SCG将采用循环负载平衡。
https://stackoverflow.com/questions/70590120
复制相似问题