Почему Apache HTTP mod_proxy непредсказуемо работает в Docker Swarm? - PullRequest
0 голосов
/ 11 декабря 2018

У меня довольно простая реализация Docker, которая состоит из двух контейнеров, работающих в оверлейной сети: один с Apache HTTP 2.4.16, а другой с приложением Spring Boot (с использованием Tomcat 8).Контейнер Apache обрабатывает все внешние запросы https и трафик прокси (через mod_proxy_http) в приложение Spring Boot, работающее во втором контейнере.Мои конфиги прокси выглядят так:

ProxyPass /web-portal http://web-portal:8080/web-portal 
retry=0 
ProxyPassReverse /web-portal http://web-portal:8080/web- 
portal
ProxyTimeout 300

Я устанавливаю Spring Boot / Tomcat server.connection-timeout на то же значение, что и у Apache ProxyTimeout

Все это прекрасно работает при запускев докере;Тем не менее, я хочу перейти на Docker Swarm, и именно тогда я сталкиваюсь с проблемами.Я установил очень простую среду роя Docker с одним узлом, который также служит диспетчером (запустив docker swarm init).Я использую те же контейнеры, которые я описал выше.Первоначально поведение такое, как и ожидалось: Apache передает трафик https, предназначенный для /web-portal, приложению Spring Boot.Через некоторое время (что кажется непредсказуемым) прокси перестает работать, и я вижу такие записи в файле Apache ssl_error.log:

[proxy_http:error] [pid 222] (70007)The timeout specified has expired: 
[client 10.255.0.2:64842] AH01102: error reading status line from 
remote server web-portal:8080, referer: 
https://ojbc.org/web-portal/

[proxy:error] [pid 222] [client 
10.255.0.2:64842] AH00898: Error reading from remote server returned by 
/web-portal/activity, referer: https://ojbc.org/web- 
portal/

Когда это происходит, единственные решения, которые я нашел, - этоdocker rm -f HTTP-контейнер Apache и создайте новый контейнер (docker run) или просто подождите некоторое время, и прокси снова начнет работать.

Чтобы исключить переменные, я удалил Spring Boot из уравнения и просто запустил старый Tomcat8 во втором контейнере, но проблемы все еще присутствовали.Я также пробовал проксировать через mod_proxy_ajp вместо mod_proxy_http - но я получаю похожие ошибки.

Я никогда не видел этих проблем при работе этих контейнеров в обычном (не Swarm) режиме Docker.Я обыскивал этот и другие сайты, пытаясь лучше понять, почему введение Docker Swarm может вызвать эти проблемы и какое может быть решение, но я в растерянности.Я предполагаю, что это может быть как-то связано с балансировкой нагрузки в Docker Swarm, но у меня нет особого подтверждения этой теории.Я ценю любые ваши мысли.Пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию о моей среде.

...