Mar*_*rth 3 service-discovery docker docker-swarm
我正在运行一个小型 Docker Swarm,运行一个有 2 个副本的服务。在该服务中,该服务的“task-1”需要与同一服务的“task-2”通信,但我没有找到实现此目的的方法
首先,我想避免将服务设置为主机网络模式,因为这样将其放入集群中就没有什么意义了。
其次,我发现您可以设置一个环境变量,其中包含docker-compose.yml我部署到 swarm 的文件中的 TaskName docker stack deply ...:
environment:
- NODENAME={{.Node.Hostname}}
- NODEID={{.Node.ID}}
- SERVICEID={{.Service.ID}}
- SERVICENAME={{.Service.Name}}
- TASKID={{.Task.ID}}
- TASKNAME={{.Task.Name}}
Run Code Online (Sandbox Code Playgroud)
您可以从各种容器 ping $TASKNAME。但它是不可发现的,因为名称中TASKNAME=e2foobar_yada.gq7ygzvp114q2x3t99lasuowc.e6ncft2k14g9o2u4blvhns19包含的 ID 在您重新启动服务时会发生更改。
我可以设置别名吗?或者有什么方法可以让我进行任务通信吗?
您可以对您的服务名称tasks.$servicename运行DNS 查找。$servicename它将解析为指向服务中每个任务的 IP 列表。它是针对群体模式实现的 DNS-RR,以支持无法通过内置的基于 IP 的 RR 负载均衡器的进程。
由于容器可以更换,因此每次访问服务时都需要查询 DNS 列表。DNS 存在过时的风险,并且您将与故障容器或完全不同的容器通信(这就是基于 IP 的负载平衡如此流行的原因)。您还需要将自己从返回的 IP 列表中排除。
| 归档时间: |
|
| 查看次数: |
4202 次 |
| 最近记录: |