Я пытаюсь заставить service discovery работать с использованием consul DNS. Я создал docker swarm с кластером consul, функционирующим в качестве бэкенда пары ключ / значение, необходимого swarm, а также функционирующим в качестве бэкенда обнаружения служб для других контейнеров.
Я начинаю с 3 голых серверов с установленным docker engine. Я подготавливаю кластер с помощью ansible.
процесс настройки кластера до сих пор:
- когда установка docker, set
--cluster-store=consul://127.0.0.1:8500
в Docker демон выбирает - на узле кластера" primary "запустите контейнер consul server в режиме"- bootstrap-expect 3"
- на узлах кластера" secondary "запустите контейнер consul server в режиме"- join"
- запустите мастер Роя и контейнер агента роя на каждом узле кластера, указывая на локальный сервер консула на том же хосте
при запуске консул серверов я отображение всех консул переносит на хост, примерно так:
version: '2'
services:
consul:
image: progrium/consul
hostname: "{{ ansible_hostname }}"
ports:
# Explanation of ports needed: http://stackoverflow.com/a/30692226/1514089
- "8300:8300" # This is used by servers to handle incoming requests from other agents
- "8301:8301/tcp" # This is used to handle gossip in the LAN. Required by all agents
- "8301:8301/udp" # This is used to handle gossip in the LAN. Required by all agents
- "8302:8302/tcp" # This is used by servers to gossip over the WAN to other servers
- "8302:8302/udp" # This is used by servers to gossip over the WAN to other servers
- "8400:8400" # This is used by all agents to handle RPC from the CLI
- "8500:8500" # This is used by clients to talk to the HTTP API
- "8600:8600" # Used to resolve DNS queries
restart: always
command: "{{ consul_command }}"
это дает мне рабочий докер Рой. Я могу войти в любой из узлов кластера и использовать docker compose для вызова приложения, swarm прозрачно балансирует вещи на серверах.
теперь, хотя, я хочу, чтобы начать использовать возможности DNS консулов для решения услуг изнутри каждого контейнера в рое, я хочу, чтобы иметь возможность сделать это:
$ docker run -it ubuntu dig consul.service.consul
Я пробовал несколько вещей, но я не получил его работа, я подозреваю, что это как-то связано с docker networks. Позвольте мне объяснить...
когда я запускаю серверы consul, они подключаются к собственной сети docker-compose, так как я начинаю их с docker-compose. Однако, поскольку swarm еще не работает, очевидно, что пока нет многоузловых оверлейных сетей. Таким образом, каждый контейнер консула оказывается в своей собственной мостовой сети. Я создаю только свои сети docker после Рой был загрузившей. Я не смог добавить контейнеры консула в оверлейную сеть после того, как рой поднялся, я получаю
Error response from daemon: No such container: swarm-node-1/swarmconsul_consul_1
как я могу получить DNS на основе обнаружения службы работает внутри моих контейнеров?