Не удается развернуть трафик с консулом - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь развернуть стопку traefik в докере с консулом в качестве хранилища ключей / значений.Мой кластер состоит из трех узлов (трех мастеров):

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
rqg08lc4ixgjuo1azi57654z1 *   tools-master-1      Ready               Active              Leader              18.03.1-ce
vi42z7f8dx6bgrhzbda8v7z15     tools-master-2      Ready               Active              Reachable           18.03.1-ce
khz5x5g28i64owyo8tykedern     tools-master-3      Ready               Active              Reachable           18.03.1-ce

Каждый узел находится на отдельном сервере.Чтобы максимально ограничить любую потенциальную ошибку на моей стороне, я попытался использовать официальную документацию Traefik и строго придерживаться ее;Я использовал эту ссылку: https://docs.traefik.io/user-guide/cluster-docker-consul/

Сам кластер Swarm работает (я могу развернуть другие службы на нем, и все, кажется, в порядке).Тем не менее, я не могу заставить работать traefik.

Я закрепил его до такой степени, что я сделал следующее: - начни с пустой, только что созданной виртуальной машины - установил докер и все такое прочее -Скопируйте точно такой же docker-compose, как тот, который приведен в конце официальной документации traefik (с тремя исключениями, см. Ниже). - Запуск docker stack deploy testing -c /path/to/my/docker-compose.yml

Три единственных отличия: - Я явно изменил электронную почту и доменчтобы поставить свои собственные - я удалил строку «драйвер» из тома для консула, так как мой экземпляр докера, кажется, не распознает, когда я запрашиваю оверлей2 ... однако согласно https://docs.docker.com/v17.09/engine/userguide/storagedriver/selectadriver/#docker-ee-and-cs-engine это должно быть по умолчаниюв любом случае.

Проблема в том, что traefik не может общаться с консулом.Вот вывод traefik:

testing_traefik.0.yy6vfo4qo3kl@tools-master-1    | time="2018-06-06T20:53:05Z" level=error msg="Load config error: Get http://consul:8500/v1/kv/traefik?consistent=&recurse=&wait=30000ms: dial tcp: lookup consul on 127.0.0.11:53: no such host, retrying in 20.35838976s"

Из того, что я думаю, консул не может быть найден (или сам dns не может быть найден traefik).Однако службы работают:

ID                  NAME                   MODE                REPLICAS            IMAGE               PORTS
e78d24w45wzd        testing_consul         replicated          1/1                 consul:latest
o1dzrdqeoiy0        testing_traefik        global              3/3                 traefik:1.5
om8qac3upy22        testing_traefik_init   replicated          0/1                 traefik:1.5

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

Итак, возникает вопрос ... У кого-нибудь естьИдея о том, что может вызвать эту ошибку?Или любой другой способ заставить traefik работать на кластере роя с помощью Let's encrypt?

Спасибо!

PS: установка docker + подготовка сервера выполняется с использованием terraform + ansible.Я сомневаюсь, что эти две вещи могут быть источником проблемы, но если это может помочь в любом случае, я могу поделиться файлами .tf / .yml.

Редактировать : Iтакже обнаружил, что проблема с разрешением DNS, по-видимому, возникает, когда сервис хочет поговорить / идентифицировать другой, если они не находятся на одном и том же узле роя.

Я добавил сервис debian в мою докер-сочинить, затем вошел внутрь контейнера.Оттуда: - Когда я пытаюсь пропинговать «traefik» (traefik - глобальный сервис в docker-compose, он присутствует на каждом узле), я могу - Когда я пытаюсь пропинговать «shell» (контейнер, который я добавил),который не является его именем хоста и, таким образом, пройти поиск DNS, я могу - Когда я пытаюсь пропинговать "консул" (который находится на другом узле), я не могу, разрешение DNS неудачно.

Так что яподозреваете проблему в моей конфигурации докера?Если это может помочь, вот вывод информации о докере в одном из агентов роя (все они установлены с использованием одной и той же заданной задачи, поэтому их информация должна быть одинаковой):

Containers: 3
 Running: 2
 Paused: 0
 Stopped: 1
Images: 2
Server Version: 18.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
 NodeID: rqg08lc4ixgjuo1azi57654z1
 Is Manager: true
 ClusterID: nydyw0ufzgy6739u15xvt1pts
 Managers: 3
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 10
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 10.15.15.39
 Manager Addresses:
  10.14.109.15:2377
  10.15.1.25:2377
  10.15.15.39:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.127-mainline-rev1
Operating System: Ubuntu 16.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 995.2MiB
Name: tools-master-1
ID: YFOZ:HA4F:UG52:EAGR:6G5O:554H:XXFO:YCGW:Q5CB:YQDF:OB7W:TYMB
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

1 Ответ

0 голосов
/ 07 июня 2018

Хорошо, благодаря этому сообщению: https://github.com/docker/swarmkit/issues/1429 Я обнаружил проблему.

Проблема возникла из двух основных источников:

Во-первых, связь между узламидолжно быть разрешено на портах 7946 tcp / udp и 4789 udp (и 2377 для мастеров, но это уже было сделано в моем случае)

Во-вторых, IP-адрес подсети по умолчанию, по-видимому, мешает работе док-сервера DNS.Его необходимо изменить следующим образом:

networks:
  traefik:
    driver: overlay
    ipam:
      config:
        - subnet: 10.0.0.0/24

(независимо от подсети, если у нее нет IP 172.0.0.11, который является IP-адресом DNS-сервера докера)

...