Traefik后端健康检查无效

时间:2018-07-11 14:13:26

标签: docker traefik

Traefik版本: 1.6.4

我的公司使用Docker Swarm将应用程序作为服务呈现,并使用Traefik进行路由。到目前为止,一切都工作正常,但是我们在Traefik中实施后端运行状况检查遇到了麻烦。

我们所有的应用程序都公开运行状况检查,该检查运行正常,并通过简单的卷曲或在Web浏览器中命中返回200。我们已经将Docker标签应用到了集群服务中,以反映这些运行状况检查。例如:

traefik.backend.healthcheck.path=/health
traefik.backend.healthcheck.interval=30s

Traefik服务日志报告以下内容:

{"level":"warning","msg":"Health check still failing. Backend: \"backend-for-my-app\" URL: \"https://10.0.0.x:8080\" Reason: received non-200 status code: 406","time":"2018-07-10T19:41:25Z"}

在应用程序容器中,我们有运行ModSecurity的Apache。 ModSecurity阻止请求,因为主机标头是数字IP地址。我炮轰了Traefik容器,并在应用容器上弯了几下进行测试:

curl -k https://10.0.0.x:8080/health <-ModSecurity阻止此操作,返回406
curl -k -H "Host: myapp.company.com" https://10.0.0.x:8080/health <-正常工作,返回200

TLDR:我需要一种方法来设置Traefik后端运行状况检查的主机头。在Traefik文档中,我看不到这样做的方法。有没有人遇到这个问题,和/或知道解决方案?

1 个答案:

答案 0 :(得分:0)

在Traefik 1.7中,有一个选项可以添加自定义标头,并定义后端运行状况检查的主机标头:

https://docs.traefik.io/v1.7/configuration/backends/docker/

例如traefik.backend.healthcheck.hostname=foobar.com

请注意1.7仍在RC中,但是您可以对其进行测试以查看它是否可以解决您的问题。如果在生产中需要此功能,则必须等待1.7才能达到稳定状态。