Включите Netflix Zuul для перенаправления трафика в контейнер на другом хосте - PullRequest
0 голосов
/ 10 февраля 2019

Я настроил Zuul как Docker-контейнер с двумя различными приложениями (назовем Docker-приложение A и Docker-приложение B), на HOST 1.

Я также настроил Eureka в качестве Docker-контейнера с однимприложение (назовем приложение Docker C), на HOST 2.

Что работает: Eureka может успешно зарегистрировать приложение A, B, C и шлюз Zuul.Поскольку Zuul и приложения A и B находятся на одном хосте, оба приложения (A и B) прекрасно работают, и Zuul корректно интегрируется с ними.

Проблема: Когда я прошу шлюз Zuul подключиться к конечной точке покоя в Приложении C (который содержится в HOST 2 - тот же HOST, что и Eureka), Zuul не может переслать запрос в HOST 2.

Мое понимание: Итак, я ясно видел, что, если я запускаю приложение C на том же хосте, что и Zuul, оно счастливо интегрируется и находит перенаправляющий ipAdd и порт.Но когда я пытаюсь запустить приложение C на HOST 2, Zuul ищет порт ipAdd: на HOST1 (где приложение явно находится на HOST2) и, следовательно, попадает в

"com.netflix.zuul.exception.ZuulException: ошибка пересылки "

F1, пожалуйста, помогите.Заранее спасибо.

Я прилагаю трассировку сбоя здесь:

WARN 1 --- [nio-8762-exec-1] oscnzfilters.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.RELE.jar! /: 2.0.1.RELEASE] at 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: исключение ввода-вывода (java.net.NoRouteToHostException) перехватывается при обработке запроса к {} -> http://172.17.0.17:8099: Нет маршрута к хосту 2019-02-10 10: 19: 08.367 INFO 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" - IP-адрес всех контейнеров (для всех приложений и ZUUL) совпадает с IP-адресом, зарегистрированным на информационной панели Eureka.Кроме того, если это помогает, я устанавливаю значение trueIpAddress в значение true.

eureka.instance.preferIpAddress: false

Панель управления Eureka показывает мне:

UPLOADLOCAL (c93c01ff3872: uploadLocal: 8099), где UPLOADLOCAL - идентификатор службы, c93c01ff3872 - идентификатор контейнера, имя приложения uploadLocal и 8099 - порт.

Это мой файл application.yml для Eureka:

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