2016-04-04 5 views
2

Ich habe unsere Dashboard-Anwendungen für Manager zur Verwendung von Rancher gearbeitet, hat einen Teil dieses mehr Kibana Behälter aus dem gleichen Port Aussetzen beteiligt, und ein Kibana 3 Behälter ausgesetzt wird auf Port 80Sporadische 503s von bestimmten Ports

ich möchte deshalb Anfragen auf bestimmte Ports senden: 5602, 5603, 5604 auf bestimmte Behälter, so dass ich Setup die folgende 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 

Alles funktioniert wie erwartet, aber ich sporadische 503 Jahren. Als ich in den Behälter gehen und Blick auf die haproxy.cfg ich sehe:

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 

Die aufgeführten IP-Adressen sind alle drei Kibana Container, hat der erste Behälter ein Gesundheits-Check hat, aber keiner der anderen tun (kibana3 /kibana4.1 habe keinen Statusendpunkt). Mein Verständnis der docker-compose-Konfiguration ist, dass es nur einen Server pro Backend haben sollte, aber alle drei scheinen aufgeführt zu sein, ich nehme an, dass dies teilweise auf die sporadischen 503s zurückzuführen ist, und dies manuell zu entfernen und den haproxy-Dienst neu zu starten um das Problem zu lösen.

Ich konfiguriere den Load Balancer falsch oder lohnt es sich, als Github-Problem mit Rancher zu erhöhen?

+0

Welche Rancher-Server-Version? Probieren Sie das neueste, derzeit ist es v1.0.0, GA-Version. – BMW

+0

Cheers für die Antwort, ich bin auf v1.0.0 GA, werde ich die Antwort posten Ich habe aus dem Rancher-Forum, wie es scheint, das erweiterte Routing ist nur für Hostname Zuordnung –

Antwort

4

ich gepostet auf den Rancher Foren wie die von Rancher Labs auf Twitter vorgeschlagen wurde: https://forums.rancher.com/t/load-balancer-sporadic-503s-with-multiple-port-bindings/2358

Jemand aus Viehzüchter einen Link zu einem Github Ausgabe geschrieben, die ähnlich war, was ich erlebt: https://github.com/rancher/rancher/issues/2475

In Zusammenfassung, die Load Balancer werden durch alle passenden Backends rotieren, es gibt eine Arbeit um "Dummy" -Domains, die ich mit meiner Konfiguration bestätigt habe funktioniert, auch wenn es etwas unelegant ist.

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 

(^^ Kopiert von Rancher Github Problem, nicht mein Problem zu umgehen)

Ich werde sehen, wie einfach es zu Route über den Port wäre und eine PR/Github Frage aufwerfen, wie ich denke, es ist ein gültiger Usecase für eine LB in diesem Szenario.

2

Stellen Sie sicher, dass Sie den Port verwenden, der ursprünglich auf dem Andock-Container angezeigt wurde. Aus irgendeinem Grund funktioniert HAProxy nicht, wenn Sie es an einen anderen Port binden. Wenn Sie einen Container von DockerHub verwenden, der einen bereits auf Ihrem System ausgeführten Port verwendet, müssen Sie diesen Andock-Container möglicherweise neu erstellen, um einen anderen Port zu verwenden, indem Sie ihn über einen Proxy wie nginx weiterleiten.

+1

Dies löste mein Problem. –