使Netflix Zuul能够将流量重定向到另一台主机上的容器

时间:2019-02-10 17:06:47

标签: java docker spring-cloud netflix-eureka netflix-zuul

我已将Zuul设置为具有两个不同应用程序(分别称为Docker应用程序A和Docker应用程序B)的Docker容器,位于主机1上。

我还在EOST 2上将Eureka设置为具有一个应用程序(称为Docker应用程序C)的Docker容器。

有效方法:Eureka能够成功注册应用程序A,B,C和Zuul网关。由于Zuul和应用程序A和B在同一主机上,因此两个应用程序(A和B)都可以正常工作,并且Zuul可以正确地与其集成。

问题:当我要求Zuul网关访问应用程序C的其余端点(包含在主机2中-与Eureka相同的主机)时,Zuul无法将请求转发到主机2。

我的理解:因此,我已经清楚地看到,如果我在与Zuul相同的主机上启动Application C,它将快乐集成,并找到转发ipAdd和端口。但是,当我尝试在HOST 2上启动Application C时,Zuul正在HOST1上寻找ipAdd:Port(因为应用程序显然在HOST2上),因此进入

  

“ com.netflix.zuul.exception.ZuulException:转发错误”

F1,请帮助。提前致谢。

我在此处附加失败跟踪:

  

WARN 1 --- [nio-8762-exec-1] o.s.c.n.z.filters.post.SendErrorFilter:过滤期间出错   com.netflix.zuul.exception.ZuulException:org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:189)处的转发错误〜[spring-cloud-netflix-zuul-2.0.1 .RELEASE.jar!/:2.0.1.RELEASE]           在org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:164)〜[spring-cloud-netflix-zuul-2.0.1.RELEASE.jar!/:2.0.1.RELEASE ]

此错误归因于:

  

原因:com.netflix.client.ClientException:负载均衡器没有适用于客户端的服务器:ApplicationC

此跟踪信息归因于:

  

原因:java.lang.RuntimeException:org.apache.http.conn.ConnectTimeoutException:连接到172.17.0.17:8099 [/172.17.0.17]失败:连接超时   原因:org.apache.http.conn.ConnectTimeoutException:连接到172.17.0.17:8099 [/172.17.0.17]失败:连接超时   [io-8762-exec-10] o.apache.http.impl.execchain.RetryExec:在处理对{}-> http://172.17.0.17:8099的请求时捕获了I / O异常(java.net.NoRouteToHostException):没有路由到主办   2019-02-10 10:19:08.367信息1 --- [io-8762-exec-10] o.apache.http.impl.execchain.RetryExec:重试对{}-> http://172.17.0.17:8099的请求

很显然,Zuul正在尝试转发HOST1上的请求,因此收到转发错误。应用程序C在HOST2上。请问我如何告诉ZUUL在HOST2上转发它。谢谢!

更新2 :我运行了docker inspect container_ID | grep“ IPAddress”-所有容器(用于所有应用程序和ZUUL)的IP地址与在Eureka仪表板中注册的IP地址相同。另外,如果有帮助,我可以将preferredIpAddress设置为true。

  

eureka.instance.preferIpAddress:错误

Eureka仪表板显示:

  

UPLOADLOCAL(c93c01ff3872:uploadLocal:8099)    其中UPLOADLOCAL是serviceId,c93c01ff3872是docker容器ID,uploadLocal应用程序名称,8099是端口。

这是我的Eureka的application.yml文件:

eureka:
  instance:
    hostname: localhost 
client:
    registerWithEureka: false
fetchRegistry: false 
serviceUrl:
  defaultZone: http://localhost:8877/eureka/

0 个答案:

没有答案