У меня есть Docker Swarm настройки кластера следующим образом:
Настройка на узле 1
docker swarm init --advertise-addr ${NODE_1_IP} --data-path-port=7789
Настройка на узле 2
docker swarm join --advertise-addr ${NODE_2_IP} --token XXX ${NODE_1_IP}:2377
У меня есть тогда установил переплетение на обоих узлах следующим образом.
sudo curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod a+x /usr/local/bin/weave
docker plugin install weaveworks/net-plugin:latest_release
docker plugin disable weaveworks/net-plugin:latest_release
docker plugin set weaveworks/net-plugin:latest_release WEAVE_PASSWORD=XXX
docker plugin enable weaveworks/net-plugin:latest_release
Я хотел установить пароль, потому что мне нужно, чтобы сеть была зашифрована. Затем я настроил сеть и сервис. Из-за этого ограничения служба состоит из одного контейнера, работающего на узле 2.
docker network create --driver=weaveworks/net-plugin:latest_release --attachable testnet_weave_encrypted
docker service create --network=testnet_weave_encrypted --name web_encrypted --publish 80 --replicas=1 --constraint 'node.labels.datastore001 == true' nginx:latest
Наконец, я проверяю его в другом контейнере, работающем на узле 1:
docker run --rm --name alpine --net=testnet_weave_encrypted -ti alpine:latest sh
apk add --no-cache curl
curl web_encrypted
Это происходит с сообщением:
curl: (7) Failed to connect to web_encrypted port 80: Host is unreachable
Я знаю, что web_encrypted не является неправильным, потому что, когда я пытаюсь использовать другое значение, я получаю другую ошибку.
После нескольких часов ударов головой об эту стену я обнаружил, что могу выполните следующие действия на узле 1:
curl web_encrypted.1.lsrdyz8n66jdotaqgdzk9u1uo
И это работает!
Но, конечно, это бесполезно для меня, поскольку точное имя контейнера будет меняться каждый раз, когда служба его воссоздает.
Это ошибка в плагине weave или я пропустил шаг в настройке?