CloudFoundry中的Spring Cloud Gateway

时间:2018-08-18 22:50:36

标签: spring-boot spring-cloud netflix-eureka spring-cloud-gateway

在将我的应用程序部署到CloudFoundry实例后,我一直试图使其运行。我正在使用的实例不允许使用http执行请求(它们只会超时),因此我必须将所有请求路由到https。

我正在使用的组件/版本是:

  • Java 10
  • Spring Boot 2.0.4.RELEASE / Spring Cloud Finchley.SR1
  • spring-cloud-gateway
  • spring-cloud-config-server
  • spring-cloud-starter-netflix-eureka

配置失败

EurekaClient配置(在网关和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->据我所知,不会起作用
  • 对应用使用真实的网址(uri: https://user-service.cf-instance.io)->路由工作正常。

但是我不想在配置中定义URL,它们应该由eureka返回并由网关正确建立。

预先感谢

编辑:

这是/eureka/apps的输出 https://pastebin.com/WP3b6PQG

我目前正在努力将当前代码添加到GitHub中,我将在找到清除状态的时间后对其进行编辑。

编辑2:

您可以在my GitHub找到完整的示例(使用SpringCloudGateway,Eureka等)。 这是一个正在运行的示例,应用的配置将不使用Eureka。要使用Eureka,必须在配置服务中使用gateway-service-cloud.yml

- id: user-service uri: lb://user-service

请忽略文档服务,它将无法正常工作,我首先需要重写路径。

1 个答案:

答案 0 :(得分:0)

好的,我在解决documentation-service的“路由”问题时找到了解决方法。

我的问题是将属性eureka.instance.securePort设置为${server.port}。此属性必须设置为443(未设置任何内容时,将不应用默认值443)。将其添加到我的配置中后,在推送我的应用程序后一切正常。