首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问部署在全局模式下的码头群服务

如何访问部署在全局模式下的码头群服务
EN

Stack Overflow用户
提问于 2020-04-09 10:41:45
回答 1查看 2.2K关注 0票数 1

我不明白如何在部署在全局模式下的Docker中运行服务。假设我在集群中有两个节点(例如下面的例子)。我在全局模式下部署了一些服务,因此在它自己的节点上运行了两个实例。两个服务都公开相同的端口,如下面的示例所示。

代码语言:javascript
复制
version: '3.7'

services:
  cadvisor:
    image: google/cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - 8080:8080
    networks:
      - monitor-net
    deploy:
      mode: global
      restart_policy:
          condition: on-failure

networks:
  monitor-net:

我在同一个网络上运行另一个容器,并尝试对服务进行ping。Docker可以通过其服务名称解析服务:

代码语言:javascript
复制
root@bdc091e9f4d1:/# ping cadvisor
PING cadvisor (10.0.16.165) 56(84) bytes of data.
64 bytes from 10.0.16.165 (10.0.16.165): icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from 10.0.16.165 (10.0.16.165): icmp_seq=2 ttl=64 time=0.065 ms
64 bytes from 10.0.16.165 (10.0.16.165): icmp_seq=3 ttl=64 time=0.044 ms

但它只是选择其中之一。如何从每个节点到达一个节点?我试着用hostname

代码语言:javascript
复制
services:
  cadvisor:
    image: google/cadvisor
    hostname: "{{.Node.Hostname}}.{{.Service.Name}}"

它按预期设置hostnamedocker container inspect ...

代码语言:javascript
复制
 "Config": {
            "Hostname": "node01.mon_cadvisor",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,

如果我ping node01.mon_cadvisor,Docker似乎不会通过其hostanme解析服务的地址

那怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 14:22:06

您所观察到的不仅仅是全局模式部署。部署的服务将默认使用deploy.endpoint_mode: vip。

在endpoint_mode: vip中,服务将使用虚拟ip。服务名称将解析为虚拟ip的ip。vip负责平衡集装箱的流量。

在你的“平测试”中唯一的错误是期望。如果您将默认的vip行为考虑在内,那么观察您所观察到的内容是有意义的。

如果使用endpoint_mode: dnsrr解析部署服务,则将以循环模式返回容器ips。即使您坚持使用endpoint_mode: vip,也可以通过与任务通信来强制dnsrr行为。{servicename}而不是servicename.在您的例子中,这将是tasks.cadvisor。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61119311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档