Открытость задач в Docker Swarm - PullRequest
0 голосов
/ 20 октября 2018

Я использую небольшой Docker Swarm, на котором запущена служба с 2 репликамиВ рамках этого сервиса «задача-1» этого сервиса должна общаться с «задачей-2» того же сервиса, но я не нахожу способ достичь этого

Во-первых, я хочуИзбегайте установки службы в режиме хост-сети, потому что тогда очень мало смысла помещать это в рой.

Во-вторых, я понял, что вы можете установить переменную среды, которая содержит TaskName в *Файл 1005 *, который я развертываю в рое с помощью docker stack deply ...:

    environment:
        - NODENAME={{.Node.Hostname}}
        - NODEID={{.Node.ID}}
        - SERVICEID={{.Service.ID}}  
        - SERVICENAME={{.Service.Name}}  
        - TASKID={{.Task.ID}}
        - TASKNAME={{.Task.Name}}

Вы можете пропинговать $ TASKNAME из различных контейнеров.но его нельзя обнаружить, поскольку имя TASKNAME=e2foobar_yada.gq7ygzvp114q2x3t99lasuowc.e6ncft2k14g9o2u4blvhns19 содержит идентификаторы, которые меняются при перезапуске службы.

Могу ли я установить псевдоним или есть какой-либо подход, который позволяет мне задавать связь?

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете запустить поиск DNS на tasks.$servicename, где $servicename - это название вашей службы.Это разрешит список IP-адресов, указывающих на каждую задачу в сервисе.Это DNS-RR, реализованный для режима роя, для поддержки процесса, который не может пройти через встроенный балансировщик нагрузки RR на основе IP.

Вы будете запрашивать список DNS каждый раз, когда обращаетесь к своей службе, поскольку контейнерыможно заменить.Существует риск, что DNS станет устаревшим, и вы будете разговаривать с нисходящим контейнером или совершенно другим контейнером (именно поэтому балансировка нагрузки на основе IP так популярна).И вам также нужно будет исключить себя из списка возвращаемых IP-адресов.

...