2

我正在使用 marathon-lb 运行 DC/OS 1.7。

spray.io 1.3.3 向所有 marathon-lb/HAProxy 健康检查调用返回 400:request has a relative URI and is missing a Host header因此 marathon-lb 永远不会将任何请求路由到服务。

马拉松 json 中的健康检查是:

   "healthChecks": [
     {
       "path": "/health",
       "protocol": "HTTP",
       "portIndex": 0,
       "gracePeriodSeconds": 10,
       "intervalSeconds": 2,
       "timeoutSeconds": 10,
       "maxConsecutiveFailures": 10,
       "ignoreHttp1xx": false
     }   ],

docker容器中spray.io的日志记录是:

[警告] [08/19/2016 23:53:42.534] [asp-service-akka.actor.default-dispatcher-5] [akka://asp-service/user/IO-HTTP/listener-0/4 ] 非法请求,以状态“400 Bad Request”响应:非法请求:无法建立 HttpRequest(GET,/health,List(),Empty,HTTP/1.0) 的有效请求 URI,请求具有相对 URI,并且缺少Host标头

/health端点可以从 curl 对 mesos 管理的 ip:port 正常工作。

我找不到任何关于通过 marathon-lb 使 HAProxy 更宽容或抑制 spray.io 的 400 的文档。

在此处输入图像描述

4

2 回答 2

4

"labels": {来自 mesosphere 团队,通过马拉松 json 中的部分发送标题中的主机名:

    "HAPROXY_0_BACKEND_HTTP_HEALTHCHECK_OPTIONS": "  http-send-name-header Host\n  timeout check {healthCheckTimeoutSeconds}s\n"

在此处输入图像描述

于 2016-08-22T23:48:43.640 回答
1

请尝试添加HAPROXY_BACKEND_HTTP_HEALTHCHECK_OPTIONS标签,您可以尝试在此示例中替换为: wwwhttps ://github.com/mesosphere/marathon-lb/wiki#custom-http-headers-in-health-check{hostname}

附加链接:

  1. https://github.com/mesosphere/marathon-lb/blob/master/Longhelp.md#haproxy_backend_http_healthcheck_options
  2. https://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4.2-option%20httpchk
于 2016-08-20T23:41:08.053 回答