Не удается получить доступ к конечной точке HTTP службы в Docker Swarm - PullRequest
0 голосов
/ 01 декабря 2019

У меня есть кластерное приложение akka, развернутое на 3 узлах с помощью Docker Swarm. Один из узлов предоставляет конечную точку HTTP. Теперь проблема в том, что к конечной точке HTTP нельзя получить доступ, даже если она выглядит так, как будто было выполнено правильное сопоставление портов.

Ниже приведен вывод работающей службы Docker ls

docker service ls
ID                  NAME                    MODE                REPLICAS            IMAGE                                          PORTS
prbk5icazzw8        test_seed      replicated          1/1                 registry.me:5000/seedroute:0.1.0-SNAPSHOT      *:1600->1600/tcp, *:8000->8000/tcp
ldudkew6ym6q        test_worker1   replicated          1/1                 registry.me:5000/workerroute:0.1.0-SNAPSHOT    *:1601->1601/tcp
e2oonp28rrs3        test_worker2   replicated          1/1                 192.168.0.10:5000/workerroute:0.1.0-SNAPSHOT   *:1602->1602/tcp
pe1xzog9qw4y        registry                replicated          1/1                 registry:2                                     *:5000->5000/tcp

Нокогда я захожу на сервер с узлом test_seed и выполняю curl localhost:8000/members Кажется, что соединение просто зависает, и я не получаю ответ в ответ:

curl -v localhost:8000/members
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8000 (#0)
> GET /members HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.58.0
> Accept: */*
> 

с использованием wget то же самое, я получаюследующее:

wget localhost:8000/members
--2019-11-30 22:34:18--  http://localhost:8000/members
Resolving localhost (localhost)... ::1, 127.0.0.1, 127.0.0.1
Connecting to localhost (localhost)|::1|:8000... connected.
HTTP request sent, awaiting response... 

Есть идеи, что может быть не так? Таким образом, у меня есть HTTP-сервер, который является частью приложения, развернутого с помощью Docker Swarm, и я не могу получить доступ к этому HTTP-серверу, даже с узла, на котором он работает.

Любые предложения о том, как это исправить, могут бытьприветствуется!

Edit-1

Принудительный запрос на использование 1Pv4 также не помог:

root@akka:~# curl -4 http://localhost:8000/members
curl: (7) Failed to connect to localhost port 8000: Connection refused

1 Ответ

0 голосов
/ 01 декабря 2019

Как видно из следующей строки вывода curl / wget

Resolving localhost (localhost)... ::1, 127.0.0.1, 127.0.0.1

ваша система сначала разрешает localhost до ::1, просмотр IPv6, который не поддерживается Docker вмомент.

Возможные решения:

  1. Использование 127.0.0.1 : curl http://127.0.0.1:8000/members
  2. Force IPv4 : curl -4 http://localhost:8000/members
  3. Отключить IPv6 : от имени пользователя root откройте /etc/sysctl.conf и добавьте следующее:
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    
    Затем выполните sysctl -p, чтобы применить новые настройки.
...