【问题标题】:Cannot deploy traefik with consul无法使用领事部署 traefik
【发布时间】:2018-11-16 16:24:40
【问题描述】:

我正在尝试在 docker 上部署一个 traefik 堆栈,并使用 consul 作为键/值存储。我的集群由三个节点(三个主节点)组成:

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
rqg08lc4ixgjuo1azi57654z1 *   tools-master-1      Ready               Active              Leader              18.03.1-ce
vi42z7f8dx6bgrhzbda8v7z15     tools-master-2      Ready               Active              Reachable           18.03.1-ce
khz5x5g28i64owyo8tykedern     tools-master-3      Ready               Active              Reachable           18.03.1-ce

每个节点都在不同的服务器上。为了尽可能地限制我身边的任何潜在错误,我尝试使用 Traefik 的官方文档并严格遵守它;我用过这个链接:https://docs.traefik.io/user-guide/cluster-docker-consul/

swarm 集群本身正在工作(我可以在其上部署其他服务,一切似乎都很好)。但是,我无法让 traefik 工作。

我已经把它固定到我做了以下事情的地步: - 从一个空的、新创建的虚拟机开始 - 安装 docker 和类似的基本东西 - 复制与 traefik 官方文档末尾完全相同的 docker-compose(除了三个例外,见下文) - 启动docker stack deploy testing -c /path/to/my/docker-compose.yml

三个唯一的区别是: - 我显然更改了电子邮件和域以放置我自己的 - 我从 consul 的卷中删除了“驱动程序”行,因为当我请求 overlay2 时,我的 docker 实例似乎无法识别...但是根据https://docs.docker.com/v17.09/engine/userguide/storagedriver/selectadriver/#docker-ee-and-cs-engine,无论如何它应该是默认值。

问题是:traefik 似乎无法与领事沟通。这是 traefik 的输出:

testing_traefik.0.yy6vfo4qo3kl@tools-master-1    | time="2018-06-06T20:53:05Z" level=error msg="Load config error: Get http://consul:8500/v1/kv/traefik?consistent=&recurse=&wait=30000ms: dial tcp: lookup consul on 127.0.0.11:53: no such host, retrying in 20.35838976s"

据我猜测,无法找到 consul(或者 traefik 无法找到 dns 本身)。但是,服务已启动:

ID                  NAME                   MODE                REPLICAS            IMAGE               PORTS
e78d24w45wzd        testing_consul         replicated          1/1                 consul:latest
o1dzrdqeoiy0        testing_traefik        global              3/3                 traefik:1.5
om8qac3upy22        testing_traefik_init   replicated          0/1                 traefik:1.5

我认为它可能来自仅主机网络。因此,我决定尝试剥离每个端口的 traefik(使其无用,但现在我只想让它与领事交谈)。我还删除了“webgateway”网络(再次,测试)。没有更多的运气......由于这是官方文档的示例,我真的不知道在哪里可以找到更多的东西。

那么,问题来了……有人知道什么可能导致这个错误吗?或者任何其他方式让 traefik 在 swarm 集群上工作,让我们加密?

谢谢!

PS : docker install + 服务器配置是使用 terraform + ansible 完成的。我怀疑这两件事可能是问题的根源,但它可能有助于以任何方式进行调查,我可以共享 .tf / .yml 文件。

编辑:我还发现,当一个服务想要交谈/识别另一个服务时,如果两者不在同一个集群节点上,似乎会出现 dns 解析问题。

我已将 debian 服务添加到我的 docker-compose,然后进入容器。从那里: - 当我尝试 ping “traefik”(traefik 是 docker-compose 中的全局服务,它存在于每个节点上)时,我可以 - 当我尝试 ping “shell”(我添加的容器)时,它不是主机名,因此通过 DNS 发现,我可以 - 当我尝试 ping “consul”(在另一个节点上)时,我不能,dns 解析失败。

所以我怀疑我的 docker 配置有问题?如果这可能有帮助,这里是一个 swarm 代理中的 docker info 的输出(它们都是使用相同的 ansible 任务安装的,因此它们的信息应该是相同的):

Containers: 3
 Running: 2
 Paused: 0
 Stopped: 1
Images: 2
Server Version: 18.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
 NodeID: rqg08lc4ixgjuo1azi57654z1
 Is Manager: true
 ClusterID: nydyw0ufzgy6739u15xvt1pts
 Managers: 3
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 10
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 10.15.15.39
 Manager Addresses:
  10.14.109.15:2377
  10.15.1.25:2377
  10.15.15.39:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.127-mainline-rev1
Operating System: Ubuntu 16.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 995.2MiB
Name: tools-master-1
ID: YFOZ:HA4F:UG52:EAGR:6G5O:554H:XXFO:YCGW:Q5CB:YQDF:OB7W:TYMB
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

【问题讨论】:

  • 也许你可以分享你的 docker-compose.yml 吗?我在集群中遇到了其他问题,它根本无法在 consul 中找到 traefik/。所以所有试图从traefik 容器访问它的东西都失败了。

标签: docker docker-compose devops consul traefik


【解决方案1】:

好的,感谢这篇文章:https://github.com/docker/swarmkit/issues/1429 我找到了问题所在。

问题主要来自两个方面:

首先,节点之间的通信必须允许在端口 7946 tcp/udp 和 4789 udp 上(master 端口为 2377,但我的情况已经这样做了)

其次,默认子网的IP似乎干扰了docker的dns。它需要这样改变:

networks:
  traefik:
    driver: overlay
    ipam:
      config:
        - subnet: 10.0.0.0/24

(无论是哪个子网,只要它没有 ip 172.0.0.11 即 docker 的 dns IP)

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2021-01-18
    • 2019-02-08
    相关资源
    最近更新 更多