使用Spring Cloud + Zuul + Consul的API网关:使用HTTPS时动态路由不起作用

时间:2019-02-20 16:58:04

标签: netflix-zuul consul spring-cloud-consul

我目前正在使用API​​网关来集中对REST API的调用。我们正在使用Spring Cloud(Edgware.SR3版本)和Zuul(1.3.0)来处理服务发现和Consul作为服务注册表。

在第一个版本中,使用zuul.routes.myApiName.url在网关配置中注册了通往每个服务的路由,并且运行正常。

然后,我们想使用动态路由来允许每个API具有多个实例。

我为此删除了zuul.routes.myApiName.url。 问题是我通过网关对API的调用返回并出现错误:

  

错误请求主机和端口的这种组合需要TLS。

以下是在Consul中注册的API的配置:

spring.cloud.discovery.enabled=true
spring.cloud.consul.host=@consul_host_ip@
spring.cloud.consul.port=@consul_host_port@
spring.cloud.consul.discovery.scheme=https

这是网关中Zuul路由的配置:

zuul.host.socket-timeout-millis=60000
zuul.add-proxy-headers=false
zuul.ignored-services=*
zuul.routes.myApiName.path=/myApiName/**
zuul.routes.myApiName.serviceId=myApiName

API已在Consul中正确注册,并且运行状况检查已成功使用HTTPS:

HTTP GET https://hostname:port/health: 200  Output: {"description":"Composite Discovery Client","status":"UP"}

由于我能够使用HTTPS直接调用我的API,因此证书的配置也很好。 但是看来Zuul重定向使用的是HTTP而不是HTTPS(如果我使用HTTP以直接模式(无网关)调用API,则会遇到相同的错误)。

我已经为此苦苦挣扎了一段时间,所以我想知道是否缺少配置来强迫Zuul在对API的路由调用中使用HTTPS?

谢谢!

2 个答案:

答案 0 :(得分:0)

只需配置

  zuul.addProxyHeaders = false

Zuul在将任何请求转发到后端时添加了代理标头。

答案 1 :(得分:0)

我终于找到了解决方案:我必须添加此属性: ribbon.IsSecure=true