来自指定端口

时间:2016-04-04 19:20:37

标签: docker rancher

我一直在使用Rancher管理我们的仪表板应用程序,其中一部分涉及从同一端口暴露多个kibana容器,以及一个暴露在端口80上的kibana 3容器。

因此我希望在指定端口上发送请求:5602,5603,5604到特定容器,所以我设置了以下docker-compose.yml config:

kibana:
  image: rancher/load-balancer-service
  ports:
  - 5602:5602
  - 5603:5603
  - 5604:5604
  links:
  - kibana3:kibana3
  - kibana4-logging:kibana4-logging
  - kibana4-metrics:kibana4-metrics
  labels:
    io.rancher.loadbalancer.target.kibana3: 5602=80
    io.rancher.loadbalancer.target.kibana4-logging: 5603=5601
    io.rancher.loadbalancer.target.kibana4-metrics: 5604=5601

一切都按预期工作,但我得到零星的503。当我进入容器并查看haproxy.cfg时,我看到:

frontend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_frontend
        bind *:5603
        mode http

        default_backend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_2_backend

backend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_2_backend
        mode http
        timeout check 2000
        option httpchk GET /status HTTP/1.1
        server cbc23ed9-a13a-4546-9001-a82220221513 10.42.60.179:5603 check port 5601 inter 2000 rise 2 fall 3
        server 851bdb7d-1f6b-4f61-b454-1e910d5d1490 10.42.113.167:5603
        server 215403bb-8cbb-4ff0-b868-6586a8941267 10.42.85.7:5601

列出的IP都是三个Kibana容器,第一个容器有健康检查,但没有其他容器(kibana3 / kibana4.1没有状态端点)。我对docker-compose配置的理解是它应该每个后端只有一个服务器,但是这三个似乎都列出了,我假设这部分属于零星的503s,并且手动删除它并重新启动haproxy服务似乎解决问题。

我正在错误地配置负载均衡器,或者这是否值得提升为Rancher的Github问题?

2 个答案:

答案 0 :(得分:4)

我在Rancher论坛上发布了,因为Rancher实验室在Twitter上提出了建议:https://forums.rancher.com/t/load-balancer-sporadic-503s-with-multiple-port-bindings/2358

来自牧场主的人发布了一个github问题的链接,这与我的体验类似:https://github.com/rancher/rancher/issues/2475

总之,负载均衡器将在所有匹配的后端中旋转,有一个涉及" dummy"我已经通过我的配置确认的域名确实有效,即使它稍微不够优雅。

labels:
  # Create a rule that forces all traffic to redis at port 3000 to have a hostname of bogus.com
  # This eliminates any traffic from port 3000 to be directed to redis
  io.rancher.loadbalancer.target.conf/redis: bogus.com:3000
 # Create a rule that forces all traffic to api at port 6379 to have a hostname of bogus.com
  # This eliminates any traffic from port 6379 to be directed to api
  io.rancher.loadbalancer.target.conf/api: bogus.com:6379

(^^从rancher github问题复制,而不是我的解决方法)

我将会看到通过端口路由并提出PR / Github问题是多么容易,因为我认为在这种情况下它是LB的有效用例。

答案 1 :(得分:2)

确保您使用的是最初在docker容器上显示的端口。出于某种原因,如果将其绑定到其他端口,则HAProxy无法工作。如果您正在使用DockerHub中使用已在系统上使用的端口的容器,则可能必须通过像nginx这样的代理路由来重建该docker容器以使用其他端口。