Я оцениваю создание микросервисов с использованием Spring Boot и Spring Cloud (Zuul и Eureka), работающих в отдельных контейнерах докеров, развернутых в отдельных экземплярах Amazon EC2.
У меня есть простая служба REST, которая регистрируется в Eureka, и я настроил Zuul для маршрутизации запросов к этой службе, просматривая ее в Eureka.
Я могу заставить это работать локально (то есть не в Amazon / EC2) на моем Mac с помощью boot2docker, но при развертывании на EC2 Zuul не может найти службу и сообщает об ошибке пересылки (статус 500).
В EC2 все настроено для работы на порту 80 (только во время оценки, чтобы я мог легко получить доступ через наш брандмауэр). Я вижу и Zuul, и мою службу на странице состояния системы Eureka (хотя ни одна из ссылок не работает!).
Клиенты настроены на поиск Eureka с полным доменным именем AWS, поэтому я могу видеть, как они находят 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/
Но клиенты, похоже, регистрируются со своим внутренним IP-адресом докера (на основе ссылок состояния системы Eureka).
Ссылка на пограничный сервер указывает на http://172.17.0.2/info Ссылка на пробную службу указывает на http://172.17.0.3/info
Я предполагаю, что это неверно, и что другие экземпляры EC2 не знают, как добраться до этого адреса.
Я прочитал эту страницу https://github.com/Netflix/eureka/wiki/Configuring-Eureka-in-AWS-Cloud, в котором предлагается использовать эластичные IP-адреса AWS EC2, но я надеялся, что мне не придется этого делать.
Я также видел здесь текущую дискуссию по этой теме, https://github.com/spring-cloud/spring-cloud-netflix/issues/432
Кому-нибудь удалось заставить этот тип настройки работать, и если да, то как они настроили свойства Eureka?