2015-12-24 21 views
9

Ho trascorso gli ultimi giorni a lavorare sulla creazione di uno sciame docker su Digtital Ocean. Nota: non voglio usare -link per comunicare con le altre app/contenitori perché sono tecnicamente considerate deprecate e non funzionano bene con docker swarm (cioè non posso aggiungere più istanze di app al servizio di bilanciamento del carico senza ricomporre l'intero sciame)Docker Swarm HAProxy non carica bilanciamento w/Overlay Networking

Sto utilizzando un server come un server kv-store che esegue la console in base a this guide. Perché sono su Digital Ocean, sto usando il networking privato su DO in modo che le macchine possano comunicare tra loro.

Quindi creo un master e uno slave dell'alveare e avvio la rete di sovrapposizione, che è in esecuzione su tutte le macchine. Ecco il mio docker-compose.yml

proxy: 
    image: tutum/haproxy 
    ports: 
     - "1936:1936" 
     - "80:80" 

web: 
    image: tutum/hello-world 
    expose: 
     - "80" 

Così quando faccio questo crea i 2 contenitori. HAProxy è in esecuzione perché posso accedere alle statistiche sulla porta 1936 allo http://<ip-address>:1936, tuttavia, quando provo ad accedere al server web/bilanciamento del carico alla porta 80, la connessione viene rifiutata. Ho tutto sembra da collegare, però, quando corro docker-compose ps:

 Name      Command    State         Ports 
-------------------------------------------------------------------------------------------------------------------------------- 
splashcloud_proxy_1 python /haproxy/main.py   Up  104.236.109.58:1936->1936/tcp, 443/tcp, 104.236.109.58:80->80/tcp 
splashcloud_web_1  /bin/sh -c php-fpm -d vari ... Up  80/tcp 

L'unica cosa che posso pensare è che non è il collegamento al contenitore web, ma non sono sicuro come risolvere questo.

Apprezzerei qualsiasi aiuto su questo.

+0

Questo è solo un link ad un [discussione correlata per il dockerized nginx-reverseproxy] (https://github.com/jwilder/nginx-proxy/issues/304). Non ho creato una risposta, perché non si tratta di haproxy, ma potrebbe essere un'alternativa. – schmunk

+0

Grazie a schmunk. Questo può essere utile. Non posso usare Nginx in questo caso perché ho bisogno delle funzionalità di accodamento di HAProxy - solo la versione a pagamento di Ngjnx supporta l'accodamento. –

+0

Sto cercando di trovare nella documentazione della finestra mobile la dichiarazione che i collegamenti sono considerati deprecati, ma non riesco a trovare nulla, potresti per favore indicare dove l'hai letto? – saljuama

risposta

7

sfortunatamente non si può usare la versione haproxy di tutum. Questa immagine è specificamente adattata ai collegamenti. Ho bisogno di un metodo per passare l'ip del server web a haproxy, temo.

Ma questo non è poi così difficile :) Ti suggerirei di iniziare da questo esempio: Prima configurazione il docker-compose.yml => consente di utilizzare due nodi, solo così puoi essere sicuro di quello che stai facendo ha un senso e in realtà caricare saldi lungo la strada :)

proxy: 
    build: ./haproxy/ 
    ports: 
     - "1936:1936" 
     - "80:80" 
web1: 
    container_name: web1 
    image: tutum/hello-world 
    expose: 
     - "80" 
web2: 
    container_name: web2 
    image: tutum/hello-world 
    expose: 
     - "80" 

Ora con haproxy è necessario configurare il proprio Dockerfile in base alla documentazione ufficiale di immagini: https://hub.docker.com/_/haproxy/

ho fatto questo nella sottocartella HAProxy utilizzando il file suggerito:

FROM haproxy 
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg 

poi per il file di configurazione haproxy.cfg haproxy Ho provato questo:

global 
    stats socket /var/run/haproxy.stat mode 660 level admin 
    stats timeout 30s 
    user root 
    group root 

defaults 
    mode http 
    timeout connect 5000 
    timeout client 50000 
    timeout server 50000 

frontend localnodes 
    bind *:80 
    mode http 
    default_backend nodes 

backend nodes 
    mode http 
    balance roundrobin 
    option forwardfor 
    http-request set-header X-Forwarded-Port %[dst_port] 
    http-request add-header X-Forwarded-Proto https if { ssl_fc } 
    option httpchk HEAD/HTTP/1.1\r\nHost:localhost 
    server web01 172.17.0.2:80 
    server web02 172.17.0.3:80 

listen stats 
    bind *:1936 
    mode http 
    stats enable 
    stats uri/
    stats hide-version 
    stats auth someuser:password 

Ovviamente gli IP qui funziona solo nella configurazione di default Sono pienamente consapevole di questo :) È necessario fare qualcosa per quei 2 linee:

server web01 172.17.0.2:80 
server web02 172.17.0.3:80 

Penso che siete fortunati qui a lavorare con Ocean Digital :) per quanto ho capito si dispone di indirizzi IP privati ​​a vostra disposizione con dO in base al quale si prevede di corri il sw nodi del braccio. Suggerisco semplicemente di inserire gli IP dei nodi anziché i miei IP di esempio e di eseguire i server Web su di essi e si sta bene :)

+0

Grazie per la risposta. È divertente, la ragione per cui sono passato a usare l'immagine di Tutum era perché avevo dei problemi con l'immagine ufficiale - le cifre. Sto sfruttando il networking privato di DO, quindi spero di poterne approfittare per aggiungere gli indirizzi IP. Sto vedendo [questo repo] (https://github.com/gesellix/docker-haproxy-network) che si rivela utile anche per quello che sto cercando. Ti farò sapere come va una volta che ci provo! –

+0

@ZachRussell poiché hai già trovato il mio piccolo haproxy [demo] (https://github.com/gesellix/docker-haproxy-network)) Mi piacerebbe solo aggiungere un altro link al [blog ufficiale di haproxy] (http: //blog.haproxy.com/2015/11/17/haproxy-and-container-ip-changes-in-docker/) dove potresti trovare ispirazione. Sarei interessato al tuo risultato finale e, se lo desideri, potresti persino contribuire al repository GitHub con ulteriori dettagli o correzioni. Grazie! – gesellix

+0

Grazie @gesellix sono ancora bloccato con quello che sto cercando di realizzare, ma sento che mi sto avvicinando! –

0

Aggiungere collegamenti alla finestra mobile-comporre.yml

 
proxy: 
    image: tutum/haproxy 
    ports: 
     - "1936:1936" 
     - "80:80" 
    links: 
     - web 
web: 
    image: tutum/hello-world 
    expose: 
     - "80" 
Problemi correlati