我在k8s集群中使用spring云网关2021.0.0。我还有一个k8s服务,有两个豆荚。我的问题是,春季网关总是将流量路由到同一个吊舱。如果我移开那个吊舱,那么弹簧网关就会开始使用另一个。如何将spring网关配置为使用与k8s服务关联的所有吊舱?我知道k8s服务工作得很好,因为如果一个进入网关容器并对服务做卷曲,请求有时会发送到一个容器,有时会发送到另一个,但是正如我所说的,使用spring网关请求总是发送到同一个容器。
我的春季网关配置
spring:
cloud:
gateway:
routes:
- id: product
uri: http://product-service
predicates:
- Path=/api/product/**如果我更改uri并将lb替换为http,我将得到503
spring.cloud.gateway.requests tags: [tag(httpMethod=GET),tag(httpStatusCode=503),tag(outcome=SERVER_ERROR),tag(routeId=product),tag(routeUri=lb://product-service),tag(status=SERVICE_UNAVAILABLE)]提前感谢
更新
我在这里发现了问题-- https://learnk8s.io/kubernetes-long-lived-connections --我刚刚将httpClient keepAlive属性设置为false,现在它正在按预期工作。
发布于 2022-01-21 17:06:48
您需要通过在网关应用程序中添加kubernetes和kubernetes-lb启动依赖关系来启用客户端负载平衡。还需要用户将路由配置为lb://service-name,而不是使用http端点。它将以循环的方式进行负载平衡。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-loadbalancer</artifactId>
<version>${spring-cloud-starter-kubernetes.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
<version>${spring-cloud-starter-kubernetes.version}</version>
</dependency>发布于 2022-11-03 21:13:09
如果有人还在问这个问题的话。我设法通过向pom.xml添加以下依赖项来解决这个问题
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-client-loadbalancer</artifactId>
</dependency>此外,还应该将以下属性添加到application.properties中,该属性支持基于Kubernetes服务名称的负载平衡。
spring.cloud.kubernetes.loadbalancer.mode=SERVICE此外,路由的URI应该使用lb方案来定义,而不是使用http或https。
参考:Spring文档
https://stackoverflow.com/questions/70771033
复制相似问题