Как подключить youtrack, upsource и teamcity к хабу, работающему как докеры на одной машине

Поскольку мы небольшая команда, мы хотим использовать JetBrains' Hub, Youtrack, Upsource и Teamcity в качестве док-контейнеров (пока все на одной машине). Docker работает на Photon OS 2.0 на ESXi 6.7. Nginx в другом контейнере действует как DNS-прокси, поэтому все службы доступны с их собственными доменными именами на порту 80 на данный момент...

Я запустил все 5 служб и могу получить к ним доступ в браузере. Однако соединение Youtrack, Upsource и Teamcity с Hub является сложной задачей. Youtrack, Upsource и Teamcity просят Hub URL чтобы подтвердить это и запросить разрешение на доступ к Hub.


Эта проблема:

  • URL-адрес концентратора: http://hub.teamtools.mydomain.com/ -> контейнер не может получить к нему доступ по этому адресу, и по истечении времени ожидания проверка не выполняется
  • URL-адрес концентратора: http://172.18.0.3:8080/ -> контейнер может получить доступ к концентратору во внутренней сети док-станции, а затем показывает всплывающее окно, которое пытается отобразить страницу подтверждения путем перенаправления на концентратор на этом внутреннем IP-адресе, что, конечно, не удается в браузере (я попытался скопировать URL из всплывающего окна в новое окно и настроить его там как хак, но это не работает.)

Вопросы:

  1. Как я могу связать Youtrack, Upsource и Teamcity с Хабом? Для того, чтобы процесс настройки работал, докеры-контейнеры должны иметь возможность доступа друг к другу с помощью внешнего IP/ доменного имени.
  2. Что-нибудь говорит против того, чтобы все четыре Teamtools были на одной машине, чтобы начать и отделить их позже, когда спрос будет расти?

Конфигурация пока что:

Контейнеры были превращены в сервисы так:

/etc/systemd/system/docker.nginx.servcie

[Unit]
Description=Nginx DNS proxy
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
Restart=always
ExecStartPre=/usr/bin/docker network create --subnet=172.18.0.0/16 dockerNet
ExecStartPre=-/usr/bin/docker exec %n stop
ExecStartPre=-/usr/bin/docker rm %n
ExecStartPre=/usr/bin/docker pull jwilder/nginx-proxy
ExecStart=/usr/bin/docker run --rm --name %n \
    -v /var/run/docker.sock:/tmp/docker.sock:ro \
    --net dockerNet --ip 172.18.0.2 \
    -p 80:80 \
    jwilder/nginx-proxy

[Install]
WantedBy=multi-user.target

/etc/systemd/system/docker.hub.service

[Unit]
Description=JetBrains Hub Service
After=docker.nginx-proxy.service
Requires=docker.nginx-proxy.service

[Service]
TimeoutStartSec=0
Restart=always
ExecStartPre=-/usr/bin/docker exec %n stop
ExecStartPre=-/usr/bin/docker rm %n
ExecStartPre=/usr/bin/docker pull jetbrains/hub:2018.2.9635
ExecStart=/usr/bin/docker run --rm --name %n \
    -v /opt/hub/data:/opt/hub/data \
    -v /opt/hub/conf:/opt/hub/conf \
    -v /opt/hub/logs:/opt/hub/logs \
    -v /opt/hub/backups:/opt/hub/backups \
    --net dockerNet --ip 172.18.0.3 \
    -p 8010:8080 \
    --expose 8080 \
    -e VIRTUAL_PORT=8080 \
    -e VIRTUAL_HOST=hub,teamtools.mydomain.com,hub.teamtools.mydomain.com \
    jetbrains/hub:2018.2.9635

[Install]
WantedBy=multi-user.target

... и так далее. Поскольку я до сих пор пытаюсь что-то сделать, порты отображаются на хосте и выставляются так, чтобы nginx-proxy мог их подцепить. Я также добавил статические IP-адреса в контейнеры, надеясь, что это поможет решить мою проблему.

Запуск этих сервисов приводит к:

CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
7ba8ed89b832        jetbrains/teamcity-server         "/run-services.sh"       12 hours ago        Up 12 hours         0.0.0.0:8111->8111/tcp   docker.teamcity.service
5c819c48cbcc        jetbrains/upsource:2018.1.357     "/bin/bash /run.sh"      12 hours ago        Up 12 hours         0.0.0.0:8030->8080/tcp   docker.upsource.service
cf9dcd1b534c        jetbrains/youtrack:2018.2.42223   "/bin/bash /run.sh"      14 hours ago        Up 14 hours         0.0.0.0:8020->8080/tcp   docker.youtrack.service
de86c3e1f2e2        jetbrains/hub:2018.2.9635         "/bin/bash /run.sh"      14 hours ago        Up 14 hours         0.0.0.0:8010->8080/tcp   docker.hub.service
9df9cb44e485        jwilder/nginx-proxy               "/app/docker-entry..."   14 hours ago        Up 14 hours         0.0.0.0:80->80/tcp       docker.nginx-proxy.service

Дополнительная информация:

Я подумал, что это может быть проблема с брандмауэром, и этот пост, кажется, предлагает то же самое:

https://forums.docker.com/t/access-docker-container-from-inside-of-the-container-via-external-url/33271

После некоторого обсуждения с поставщиком виртуального сервера выяснилось, что конфликтующие правила брандмауэра между брандмауэром plesk и iptables вызвали эту проблему. После того, как поставщик исправил конфликт, контейнер стал доступен.

Брандмауэр на Photon с автоматически добавленными правилами docker:

Chain INPUT (policy DROP 2 packets, 203 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
  258 19408 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    6   360 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  186 13066 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0
  186 13066 DOCKER-ISOLATION  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0
  103  7224 ACCEPT     all  --  *      br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    9   524 DOCKER     all  --  *      br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0
   74  5318 ACCEPT     all  --  br-83f08846fc2e !br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0
    1    52 ACCEPT     all  --  br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  300 78566 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination
    8   472 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.2           tcp dpt:80
    0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.3           tcp dpt:8080
    0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.5           tcp dpt:8080
    0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.4           tcp dpt:8080
    0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.6           tcp dpt:8111

Chain DOCKER-ISOLATION (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  br-83f08846fc2e docker0  0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  docker0 br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0
  186 13066 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER-USER (1 references)
 pkts bytes target     prot opt in     out     source               destination
  186 13066 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

1 ответ

Решение

Это оказалось проблемой брандмауэра.

Я решил это, используя этот https://unrouted.io/2017/08/15/docker-firewall/ в качестве отправной точки.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:FILTERS - [0:0]
:DOCKER-USER - [0:0]

-F INPUT
-F DOCKER-USER
-F FILTERS

-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -j FILTERS

-A DOCKER-USER -i eth0 -j FILTERS

-A FILTERS -m state --state ESTABLISHED,RELATED -j ACCEPT
# full access from my workstation
-A FILTERS -m state --state NEW -s 192.168.0.10/32
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A FILTERS -j REJECT --reject-with icmp-host-prohibited

COMMIT
Другие вопросы по тегам