Могу ли я обслуживать сервер Rancher через размещенный контейнер Traefik?

У меня есть один выделенный сервер, на котором я установил сервер Rancher и клиент Rancher, и он используется для размещения некоторых докеризированных сервисов.

Я успешно установил Traefik, и он настроен на серверную часть Rancher API, и он проксирует мои сервисы обратно, размещая их за HTTPS, и все работает нормально.

Но я по-прежнему захожу на свой сервер Rancher через http://12.34.56.78:8080. Я также хотел бы поместить сервер Rancher за Traefik с включенным https.

Я попытался запустить сервер Rancher с помощью:

sudo docker run -d \
  -v /data/rancher/server/data:/var/lib/mysql \
  --restart=unless-stopped \
  -p 8080:8080 \
  -l traefik.frontend.rule=Host:rancher.mydomainname.com \
  -l traefik.enable=true \
  -l traefik.backend=rancher \
  -l traefik.default.protocol=http \
  -l traefik.port=8080 \
  rancher/server:v1.6.12

(так же, как я настроил все свои другие службы), но он не подхватывается Traefik, потому что (я думаю) сервер Rancher НЕ появляется в запросах Rancher API, которые отслеживает Traefik (поскольку сервер Rancher запускается вне Rancher и не размещается по нему).

Источником Rancher Active Proxy является то, что поддерживается этим инструментом

Если мои рассуждения верны, что Traefik не может «подцепить» сервер Rancher таким образом, альтернативное решение, о котором я подумал, заключалось в том, что, возможно, мне придется создать отдельный раздел [file] исключительно для сервера Rancher и добавить его в файл Traefik .toml. файл...

Это правильный подход для достижения того, чего я хочу, или есть лучший способ сделать это...?

Спасибо!


person stratosgear    schedule 08.12.2017    source источник


Ответы (2)


Я опоздал на вечеринку почти на 2 года, но я только начал rancher с traefik с [docker] бэкендом.

Файл docker-compose для ранчера:

version: '3'

services:

  web:
   image: rancher/rancher:latest
   labels:
     traefik.enable: true
     traefik.backend: rancher
     traefik.frontend.entryPoints: http,https
     traefik.frontend.passHostHeader: true
     traefik.frontend.rule: "Host:rancher.mydomain.com"
     traefik.backend.port: 80
     traefik.port: 80
   restart: unless-stopped

Может быть, это полезно для тех, кто наткнулся на этот вопрос.

person ideam    schedule 25.04.2019

Частично отвечая на мой вопрос...

Создание отдельного статического файла rancherserver.toml:

[backends]
[backends.rancherserver]
    [backends.rancherserver.servers.server1]
    url = "http://12.34.56.78:8080"
    weight = 10

[frontends]
[frontends.rancherserver]
backend = "rancherserver"
passHostHeader = true
entrypoints = ["https"] 
    [frontends.rancherserver.routes.onlyone]
    rule = "Host:rancher.mydomain.com"

(где 12.34.56.78 — реальный физический IP-адрес физического сервера) кажется, что решает мою проблему, имея доступ к серверу Rancher по адресу https://rancher.mydomain.com (с автоматической переадресацией с http на https)

НО по какой-то причине я все еще могу получить доступ к серверу Rancher с http://12.34.56.78:8080 (обратите внимание, это не https), хотя физический сервер защищен брандмауэром все порты (ufw в Ubuntu), кроме 80 и 433 (и некоторых других):

me@server:~$ sudo ufw status verbose
[sudo] password for me: 
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere                  
443                        ALLOW IN    Anywhere                  
80                         ALLOW IN    Anywhere                  
1143                       ALLOW IN    Anywhere                  
1110                       ALLOW IN    Anywhere                  
Anywhere on docker0        ALLOW IN    Anywhere                  
22 (v6)                    DENY IN     Anywhere (v6)             
443 (v6)                   ALLOW IN    Anywhere (v6)             
80 (v6)                    ALLOW IN    Anywhere (v6)             
1143 (v6)                  ALLOW IN    Anywhere (v6)             
1110 (v6)                  ALLOW IN    Anywhere (v6)             
Anywhere (v6) on docker0   ALLOW IN    Anywhere (v6)             

Итак, я все еще думаю, что каким-то образом неправильно использую Traefik и допускаю утечку порта 8080 через мою конфигурацию Traefik... :(

person stratosgear    schedule 09.12.2017
comment
Я знаю, что это старый вопрос, но оставляю комментарий только для протокола: вы можете получить доступ к rancher через http://12.34.56.78:8080, потому что вы опубликовали порт в команде docker run. Docker обходит брандмауэры и позволяет публиковать все опубликованные вручную порты. Если вы используете traefik, вам не нужно публиковать порты. Trafik использует внутреннюю сеть докера для маршрутизации трафика. - person inwi; 22.03.2019
comment
я не вижу, чтобы порт 8080 был запрещен в приведенной выше конфигурации. docker не обходит брандмауэры. Он может создавать новые сети, но любой трафик все равно должен проходить через ваш хост-интерфейс (через брандмауэр). - person ideam; 26.04.2019