我正在评估使用在单独的 docker 容器中运行的 Spring Boot 和 Spring Cloud(Zuul 和 Eureka)构建微服务,部署在单独的 Amazon EC2 实例中。
我有一个向 Eureka 注册的简单 REST 服务,并已将 Zuul 配置为通过在 Eureka 中查找来将请求路由到该服务。
我可以使用 boot2docker 在我的 Mac 上本地运行(即不在 Amazon/EC2 中),但是当部署在 EC2 上时,Zuul 找不到该服务,并报告“转发错误”(状态 500)。
在 EC2 中,所有内容都配置为在端口 80 上运行(在评估时,我可以轻松地通过我们的防火墙访问)。我可以在 Eureka 系统状态页面中看到 Zuul 和我的服务(尽管所有链接都不起作用!)。
客户端配置为使用完整的 AWS 域名查找 Eureka,因此我可以看到他们如何找到 Eureka OK。例如
client:
serviceUrl:
defaultZone: http://ec2-XX-XX-XX-XX.ap-southeast-2.compute.amazonaws.com:80/eureka/,http://ec2-YY-YY-YY-YY.ap-southeast-2.compute.amazonaws.com:80/eureka/
但是,客户端似乎正在使用其内部 docker IP 地址注册自己(基于 Eureka 系统状态链接)。
edgeserver 链接指向http://172.17.0.2/info trialservice 链接指向http://172.17.0.3/info
我猜这是不正确的,其他 EC2 实例不知道如何访问该地址。
我已阅读此页面https://github.com/Netflix/eureka/wiki/Configuring-Eureka-in-AWS-Cloud建议使用 AWS EC2 弹性 IP 地址,但我希望我不必这样做.
我还看到这里有一个关于这个主题的当前讨论,https://github.com/spring-cloud/spring-cloud-netflix/issues/432
有没有人设法让这种类型的设置工作,如果是这样,他们是如何配置 Eureka 属性的?