Я пытаюсь развернуть стопку 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