首页 > 解决方案 > Traefik 2.2 仅针对 1 个后端同时进行大量 /health 调用

问题描述

我有 10 台路由器和 1 项服务,该服务只有 1 台服务器。(我已经简化了例子)

每个路由器都有单独的文件,其中 N 是从 1 到 10 的数字。

/etc/traefik/projectN_develop_intern.yaml

http:
  routers:
    projectN_develop_intern:
      service: cluster_develop-cluster
      entryPoints:
        - https
      rule: PathPrefix(`/project-N/`) && Host(`develop.my-domain.com`)
      middlewares: []
      priority: 1

我有 1 项服务和 1 项健康:

/etc/traefik/conf.d/cluster_develop-cluster.yaml

http:
  services:
    cluster_develop-cluster:
      loadBalancer:
        healthCheck:
          path: /health
          timeout: 3s
          interval: 5s
        servers:
          - url: 'http://127.0.0.1:81/'
        passHostHeader: true

我预计 traefik 每 3 秒只向服务服务器发出 1 个健康调用,但我每 10 秒收到 10 个健康调用,每个路由器一个。

在此处输入图像描述

我正在使用traefik 2.2,但这也发生在traefik 1.7中,这就是我们迁移到 traefik 2 的原因:

[root@centos ~]# traefik version
Version:      2.2.2
Codename:     chevrotin
Go version:   go1.14.4
Built:        2020-07-08T15:30:29Z
OS/Arch:      linux/386

这是起始日志:

time="2020-07-16T10:03:10+02:00" level=info msg="Traefik version 2.2.2 built on 2020-07-08T15:30:29Z"
time="2020-07-16T10:03:10+02:00" level=debug msg="Static configuration loaded {\"global\":{},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"http\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"gr$
time="2020-07-16T10:03:10+02:00" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/contributing/data-collection/\n"
time="2020-07-16T10:03:10+02:00" level=info msg="Starting provider aggregator.ProviderAggregator {}"
time="2020-07-16T10:03:10+02:00" level=debug msg="Start TCP Server" entryPointName=https
time="2020-07-16T10:03:10+02:00" level=debug msg="Start TCP Server" entryPointName=http
time="2020-07-16T10:03:10+02:00" level=debug msg="Start TCP Server" entryPointName=traefik
time="2020-07-16T10:03:10+02:00" level=info msg="Starting provider *file.Provider {\"directory\":\"/etc/traefik/conf.d\",\"watch\":true}"
time="2020-07-16T10:03:10+02:00" level=info msg="Starting provider *traefik.Provider {}"
time="2020-07-16T10:03:10+02:00" level=debug msg="Configuration received from provider file: {\"http\":{\"routers\":{\"project1_develop_extern\":{\"entryPoints\":[\"https\"],\"service\":\"cluster_develop-cluster\",\"rule$
time="2020-07-16T10:03:10+02:00" level=debug msg="Configuration received from provider internal: {\"http\":{\"routers\":{\"api\":{\"entryPoints\":[\"traefik\"],\"service\":\"api@internal\",\"rule\":\"PathPrefix(`/api`)\",\"pr$
time="2020-07-16T10:03:10+02:00" level=debug msg="No store is defined to add the certificate XXXXXXXXXXXXXXXXXXXXXXX, it will be added to the default store."
time="2020-07-16T10:03:10+02:00" level=debug msg="Adding certificate for domain(s) *.our-domain.com,our-domain.com"
time="2020-07-16T10:03:10+02:00" level=debug msg="No default certificate, generating one"
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating middleware" entryPointName=https routerName=project2_develop_extern@file serviceName=cluster_develop-cluster middlewareName=pipelining middlewareType=Pipelining
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating load-balancer" entryPointName=https routerName=project2_develop_extern@file serviceName=cluster_develop-cluster
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 0 http://api-node3.our-domain.com" serverName=0 entryPointName=https routerName=project2_develop_extern@file serviceName=cluster_develop-cluster
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 1 http://api-node4.our-domain.com" serverName=1 serviceName=cluster_develop-cluster entryPointName=https routerName=project2_develop_extern@file
time="2020-07-16T10:03:11+02:00" level=debug msg="Added outgoing tracing middleware cluster_develop-cluster" middlewareType=TracingForwarder routerName=project2_develop_extern@file entryPointName=https middlewareName=tra$
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating middleware" middlewareType=Pipelining entryPointName=https routerName=project3_develop_intern@file serviceName=cluster_develop-cluster middlewareName=pipelining
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating load-balancer" entryPointName=https routerName=project3_develop_intern@file serviceName=cluster_develop-cluster
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 0 http://api-node3.our-domain.com" entryPointName=https routerName=project3_develop_intern@file serviceName=cluster_develop-cluster serverName=0
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 1 http://api-node4.our-domain.com" serverName=1 entryPointName=https routerName=project3_develop_intern@file serviceName=cluster_develop-cluster
time="2020-07-16T10:03:11+02:00" level=debug msg="Added outgoing tracing middleware cluster_develop-cluster" middlewareName=tracing entryPointName=https routerName=project3_develop_intern@file middlewareType=TracingForwarder
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating middleware" entryPointName=https routerName=project4_production_extern@file serviceName=cluster_production-cluster middlewareName=pipelining middlewareType=Pipelining
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating load-balancer" routerName=project4_production_extern@file serviceName=cluster_production-cluster entryPointName=https
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 0 http://api-node1.our-domain.com" entryPointName=https routerName=project4_production_extern@file serviceName=cluster_production-cluster serverName=0
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 1 http://api-node2.our-domain.com" entryPointName=https routerName=project4_production_extern@file serverName=1 serviceName=cluster_production-cluster
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 2 http://api-node3.our-domain.com" entryPointName=https routerName=project4_production_extern@file serviceName=cluster_production-cluster serverName=2
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating server 3 http://api-node4.our-domain.com" entryPointName=https routerName=project4_production_extern@file serviceName=cluster_production-cluster serverName=3
time="2020-07-16T10:03:11+02:00" level=debug msg="Added outgoing tracing middleware cluster_production-cluster" middlewareName=tracing middlewareType=TracingForwarder entryPointName=https routerName=project4_production_exter$
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating middleware" serviceName=cluster_develop-cluster middlewareName=pipelining middlewareType=Pipelining routerName=project5_develop_extern@file entryPointName=https
time="2020-07-16T10:03:11+02:00" level=debug msg="Creating load-balancer" routerName=project5_develop_extern@file entryPointName=https serviceName=cluster_develop-cluster

我认为 traefik 为每个路由器创建多个平衡器,并且在获取服务器 url 时,它会返回重复的健康 url。

github问题中有更多信息:https ://github.com/containous/traefik/issues/7043

标签: traefik

解决方案


推荐阅读