aoe*_*oez 6 service-discovery spring-boot spring-cloud spring-cloud-gateway spring-cloud-kubernetes
我创建了两个 Spring Boot 应用程序,它们都将部署在 Kubernetes 集群中。其中一个应用程序将充当网关,因此使用 Spring Cloud Gateway 作为依赖项。另外我想将服务发现与 Spring Cloud Kubernetes 集成,网关使用服务发现来自动生成相应的路由。但是,当我公开在本地 Minikube 集群中运行的网关应用程序并调用第二个应用程序/服务时,我收到 503 错误并显示以下消息:Unable to find instance for ...-service
目前我已经安装了以下内容:
我创建了一个包含两个子项目(网关和另一个服务)的 Gradle 项目。所有项目都将在本地构建/部署。默认服务帐户具有读取 Kubernetes API 的权限。部署这些服务后,我向外部公开网关服务。在网关服务中,我实现了一些端点,其中
一切似乎都有效,但是当我使用其他服务调用时URI/serviceId,出现 503 错误...
使用以下 Spring Cloud 版本: spring-cloud-starter-kubernetes 1.0.1.RELEASE spring-cloud-starter-gateway 2.1.1.RELEASE
我的演示应用程序可从https://github.com/nmaoez/spring-cloud-gateway-kubernetes 获得,README.md 提供了在本地 Minikube 集群中部署这两种服务的步骤。还显示了所有可用的端点。但有趣的部分是 application.yaml 和网关的应用程序类。
应用程序.yaml:
spring:
application:
name: gateway-service
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
management:
endpoints:
web:
exposure:
include: '*'
Run Code Online (Sandbox Code Playgroud)
网关应用程序
spring:
application:
name: gateway-service
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
management:
endpoints:
web:
exposure:
include: '*'
Run Code Online (Sandbox Code Playgroud)
在将 gateway-service/application.yaml 中的 url-expression 字段覆盖为
url-expression: "uri+'/'"
Run Code Online (Sandbox Code Playgroud)
之后,我在调用后得到了正确的响应gateway-uri/another-service/。但我的愿望是不明确替换lb://serviceid. 我怎样才能做到这一点?
我希望如果我通过网关调用集群中的另一个服务,我会得到 200 响应和基于应用程序其余控制器的正确答案。
spring-cloud-starter-kubernetes-ribbon您还必须添加依赖项。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后它就可以工作而无需任何重写,只需使用spring.cloud.gateway.discovery.locator.enabled: true
| 归档时间: |
|
| 查看次数: |
4185 次 |
| 最近记录: |