Spring CloudFoundry 中的云网关
Spring Cloud Gateway in CloudFoundry
我一直在尝试将我的应用程序部署到 CloudFoundry 实例后 运行。我正在使用的实例不允许使用 http 执行请求(它们只会超时)所以我必须将所有请求路由到 https。
我用的components/versions是:
- Java 10
- Spring Boot 2.0.4.RELEASE/Spring Cloud Finchley.SR1
- spring-云网关
- spring-云配置服务器
- spring-cloud-starter-netflix-eureka
失败的配置
EurekaClient Config(在网关和gw应该路由到的后端)
eureka:
client:
serviceUrl:
defaultZone: ${DISCOVERY_SERVICE_URL:http://localhost:8061}/eureka/
instance:
hostname: ${vcap.application.uris[0]:localhost}
nonSecurePortEnabled: false
securePortEnabled: true
securePort: ${server.port}
statusPageUrl: https://${eureka.instance.hostname}/actuator/info
healthCheckUrl: https://${eureka.instance.hostname}/actuator/health
homePageUrl: https://${eureka.instance.hostname}/
secure-virtual-host-name: https://${vcap.application.application_uris[0]}
网关配置
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- RewritePath=/user/(?<segment>.*), /$\{segment}
我已经尝试过的东西:
- 像docs中描述的那样使用
lb:https://user-service
-> 据我所知不会有任何效果
- 使用应用程序的真实 URL (
uri: https://user-service.cf-instance.io
) -> 路由按预期工作。
但我不想在我的配置中定义 url,它们应该由 eureka 返回并由网关正确构建。
提前致谢
编辑:
这是/eureka/apps
的输出
https://pastebin.com/WP3b6PQG
我目前正在努力将当前代码导入 GitHub 我会编辑这个 post 当我找到时间来获得清晰的状态时。
编辑 2:
您可以在 my GitHub 找到完整示例(使用 SpringCloudGateway、Eureka 等)
这是一个 运行ning 示例,应用的配置不会使用 Eureka。要使用 Eureka,必须采用配置服务中的 gateway-service-cloud.yml
。
- id: user-service
uri: lb://user-service
请忽略文档服务,这还行不通,我首先需要重写路径。
好的,我在修复 documentation-service
的 "routing" 问题时找到了解决方案。
我的问题是将 属性 eureka.instance.securePort
设置为 ${server.port}
。这个 属性 必须设置为 443
(没有设置时默认的 443 不应用)。将此添加到我的配置时,在推送我的应用程序后一切都按预期工作。
我一直在尝试将我的应用程序部署到 CloudFoundry 实例后 运行。我正在使用的实例不允许使用 http 执行请求(它们只会超时)所以我必须将所有请求路由到 https。
我用的components/versions是:
- Java 10
- Spring Boot 2.0.4.RELEASE/Spring Cloud Finchley.SR1
- spring-云网关
- spring-云配置服务器
- spring-cloud-starter-netflix-eureka
失败的配置
EurekaClient Config(在网关和gw应该路由到的后端)
eureka:
client:
serviceUrl:
defaultZone: ${DISCOVERY_SERVICE_URL:http://localhost:8061}/eureka/
instance:
hostname: ${vcap.application.uris[0]:localhost}
nonSecurePortEnabled: false
securePortEnabled: true
securePort: ${server.port}
statusPageUrl: https://${eureka.instance.hostname}/actuator/info
healthCheckUrl: https://${eureka.instance.hostname}/actuator/health
homePageUrl: https://${eureka.instance.hostname}/
secure-virtual-host-name: https://${vcap.application.application_uris[0]}
网关配置
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- RewritePath=/user/(?<segment>.*), /$\{segment}
我已经尝试过的东西:
- 像docs中描述的那样使用
lb:https://user-service
-> 据我所知不会有任何效果 - 使用应用程序的真实 URL (
uri: https://user-service.cf-instance.io
) -> 路由按预期工作。
但我不想在我的配置中定义 url,它们应该由 eureka 返回并由网关正确构建。
提前致谢
编辑:
这是/eureka/apps
的输出
https://pastebin.com/WP3b6PQG
我目前正在努力将当前代码导入 GitHub 我会编辑这个 post 当我找到时间来获得清晰的状态时。
编辑 2:
您可以在 my GitHub 找到完整示例(使用 SpringCloudGateway、Eureka 等)
这是一个 运行ning 示例,应用的配置不会使用 Eureka。要使用 Eureka,必须采用配置服务中的 gateway-service-cloud.yml
。
- id: user-service
uri: lb://user-service
请忽略文档服务,这还行不通,我首先需要重写路径。
好的,我在修复 documentation-service
的 "routing" 问题时找到了解决方案。
我的问题是将 属性 eureka.instance.securePort
设置为 ${server.port}
。这个 属性 必须设置为 443
(没有设置时默认的 443 不应用)。将此添加到我的配置时,在推送我的应用程序后一切都按预期工作。