Обратный прокси nginx для Docker 1.13 «Swarm Mode «Cluster

У меня есть существующий кластер docker swarm, работающий на двух узлах, и я хочу добавить nginx для обратного проксирования. Я задаю этот вопрос, потому что столкнулся с парой проблем, которые я не знаю, как решить.

Мой первый вопрос касается запуска nginx внутри Swarm и возможности доступа к контейнерам моего приложения, используя их собственные имена. Во-первых, вот результат docker network ls

6897486e798b        bridge              bridge              local
3c5b72414821        docker_gwbridge     bridge              local
6f762b23ff12        host                host                local
uwy3qfuu4oos        ingress             overlay             swarm
0e867cd5a3bf        none                null                local

Нужно ли мне создавать другую оверлейную сеть и настраивать Nginx для работы в этой оверлейной сети. Я создаю службу nginx следующим образом:

docker service create rproxy -p 80:80 --mount type=volume,source=rproxy,target=/etc/nginx --mode=global nginx:alpine

С помощью этой команды nginx создается на всех моих узлах, и я могу получить доступ к стандартному экрану nginx «hello world» с помощью браузера.

С тех пор я смонтировал том для конфигурации nginx, Я могу получить доступ к конфигурации nginx из / var / lib / docker / volume / rproxy / _data . Итак, я зашел в /etc/nginx/conf.d , удалил default и создал простой vhost:

server {
    listen 80;
    location / {
        proxy_pass http://myapp:80;
    }
}

Когда я перезапустил nginx, мой сервер не запустился из-за nginx ошибка Хост "myapp" не существует . Я знаю, что если я открою какой-либо порт из службы myapp , я смогу прокси, используя что-то вроде:

proxy_pass http://0.0.0.0:SOME_PORT;

Я не открываю какие-либо порты, но хочу получить доступ к своим контейнерам, используя их соответствующие имена служб. Это возможно? Если да, то как мне это сделать?

Мой второй вопрос касается хранения файлов конфигурации. Есть ли способ создать один том в рое и получить доступ к этому тому со всех узлов? Я бы не стал Даже не обращайте внимания, если том хранится на сервере Swarm Manager, поскольку nginx загружает конфигурацию в память, что не повлияет на производительность.

РЕДАКТИРОВАТЬ: Я не проверял версию Docker при установке, думая, что 1.13 - последняя версия. Docker версии 17.06.1-ce, сборка 874a737

3
задан 2 September 2017 в 14:11
1 ответ

Нужно ли мне создавать еще одну оверлейную сеть и настраивать Nginx для работы в этой оверлейной сети.

Nginx Контейнер и ваши целевые приложения должны находиться в одной сети докеров для связи от контейнера к контейнеру. Вы можете добавить контейнер nginx в несколько сетей для конкретных приложений или создать одну прокси-сеть и присоединить все приложения к этой сети. С помощью команды docker run вы можете подключиться к одной сети. Для нескольких сетей сложным способом вы можете сделать docker create , а затем docker network connect перед запуском docker start . Самый простой способ - использовать файл docker-compose.yml, который автоматизирует эти шаги для подключения вашего контейнера к нескольким сетям.

Есть ли способ создать один том в рое и получить доступ к этому тому со всех узлов? Я бы даже не возражал, если том будет храниться на сервере Swarm Manager, поскольку nginx загружает конфигурацию в память, что не повлияет на производительность.

Вы можете создать том, который подключается к удаленному серверу nfs. Вот несколько примеров команд docker для использования удаленного общего ресурса nfs:

# create a reusable volume
$ docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.1.1,rw \
    --opt device=:/path/to/dir \
    foo

# or from the docker run command
$ docker run -it --rm \
  --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,volume-opt=o=addr=192.168.1.1,volume-opt=device=:/host/path \
  foo

# or to create a service
$ docker service create \
  --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,volume-opt=o=addr=192.168.1.1,volume-opt=device=:/host/path \
  foo
1
ответ дан 3 December 2019 в 07:22

Теги

Похожие вопросы