Welcome! Log In Create A New Profile

Advanced

Re: host not found in upstream: не появилась возможность игнорировать?

Valery Kholodkov
March 16, 2017 10:26AM
Для решения этой проблемы достаточно всем контейнерам одного сервиса в
оверлей-сети прописать один и тот же алиас. Тогда докер в своем
внутреннем DNS-е пропишет запись с множеством адресов и nginx сможет
резолвить набор адресов контейнеров соответствующих сервису.

Пример на docker-compose:

version: '2'

services:
myapp:

[ ... пропущено ... ]

networks:
ovr0:
aliases:
- myapp

networks:
ovr0:
external:
name: ovr0

Конфиг nginx:

server {
server_name myurl.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://myapp;
}
}

Замечания:

1. nginx должен быть докеризирован. Я пока не нашел способов роутинга
трафика с хоста в оверлей-сеть;
2. Контейнеры должны использовать внутренный DNS докера;
3. Оверлей-сеть не всегда стабильна, особенно в глобальном масштабе.
Полагаю максимальная стабильность может быть гарантирована, только если
все хосты находятся в локальной сети.

On 16-03-17 14:56, obolobova wrote:
> Здравствуйте.
>
> У нас крутится nginx в докере, и проксирует запросы на большое количество
> сервисов, тоже в контейнерах.
> Все это хозяйство объединено в Docker overlay network, и адресация идет не
> по реальным хостнеймам, а по именам/алиасам докер-контейнеров (DNS-резолвинг
> обеспечивает сетевая инфраструктура докера).
>
> Конфиг примерно такой:
>
> upstream my_upstream1 {
> server DOCKER_CONTAINER1:8080 max_fails=0;
> server DOCKER_CONTAINER2:8080;
> keepalive 32;
> }
>
> # еще куча апстримов
> upstream my_upstream2...
> upstream my_upstream3...
>
> server {
> server_name myurl.com;
> listen 80 ;
> access_log /var/log/nginx/access.log vhost;
> location / {
> proxy_pass http://my_upstream1;
>
> #также пробовали вариант с переменной
> set $my_var my_upstream1;
> proxy_pass http://$my_var;
> }
> }
>
> Проблема, наверное, уже понятна: если хоть один контейнер исчезает (упал,
> удалили, машина провалилась под землю, whatever), то соответствующее имя не
> резолвится и NGINX крэшится при старте.
> Подчеркну, что проблема не в резолвере - он работает совершенно верно,
> исчезнувший контейнер и не должен резолвиться - всё, его нет, и докер
> убирает соответствующую запись из своего DNS.
>
> Описанный выше вариант - штатная ситуация, в системе будут сотни апстримов и
> тысячи контейнеров, какие-то из них будут падать обязательно.
>
> Можно ли что-то сделать - на уровне штатного конфига - чтобы NGINX всё же
> стартовал?
> В гугле пишут, что либо ничего не сделать, либо использовать переменную в
> proxy_pass - но нам не помогло. Если хоть одно имя хоть в одном upstream не
> резолвится, NGINX не стартует.
> Может быть, появился какой-то новый workaround?
>
> Если нет, то, насколько я понимаю, остается вариант цеплять к NGINXу
> дополнительный DNS, который все эти апстримы будет резолвить хоть бы на
> 127.0.0.1?
>
> Большое спасибо.
>
> Posted at Nginx Forum: https://forum.nginx.org/read.php?21,272978,272978#msg-272978
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

host not found in upstream: не появилась возможность игнорировать?

obolobova March 16, 2017 09:56AM

Re: host not found in upstream: не появилась возможность игнорировать?

Valery Kholodkov March 16, 2017 10:26AM

Re: host not found in upstream: не появилась возможность игнорировать?

obolobova March 16, 2017 03:19PM

Re: host not found in upstream: не появилась возможность игнорировать?

Vladimir Homutov March 16, 2017 03:28PM

Re: host not found in upstream: не появилась возможность игнорировать?

Valery Kholodkov March 16, 2017 04:46PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 327
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready