haproxy - passa l'ip originale / remoto in modalità tcp


8

Ho haproxy configurato con keepalived per il bilanciamento del carico e il failover ip di un cluster percona, e poiché funziona benissimo mi piacerebbe usare lo stesso lb / failover per un altro servizio / demone.

Ho configurato haproxy in questo modo:

listen my_service 0.0.0.0:4567
    mode tcp
    balance leastconn
    option tcpka
    contimeout      500000
    clitimeout      500000
    srvtimeout      500000

    server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
    server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3

Il bilanciamento del carico funziona correttamente, ma il servizio vede l'IP del bilanciamento del carico anziché gli IP effettivi dei client. In modalità http è abbastanza facile avere il passaggio haproxy lungo l'IP remoto, ma come posso fare in modalità tcp? Ciò è fondamentale a causa della natura del servizio di cui ho bisogno per bilanciare il carico.

Grazie! vito


ecco la documentazione completa di haproxy 1.6.6 cbonte.github.io/haproxy-dconv/…

Risposte:


3

Solo per riferimenti futuri, keepalived è una soluzione per il failover non per il bilanciamento del carico (forse intendi LVS?). la modalità proxy trasparente per HAProxy non ha nulla a che fare con alcun modo speciale di invio dell'IP originale, che sarebbe la normale modalità HTTP non trasparente in cui è possibile utilizzare un'intestazione HTTP standardizzata per questo.

A mio avviso, la risposta corretta alla domanda originale è: è possibile compilare il supporto proxy trasparente in HAProxy su un kernel Linux abilitato TPROXY. Questo, insieme alla corretta versione supportata da TPROXY + alla configurazione di iptables sulla stessa macchina, consente un supporto proxy tcp completamente trasparente. Ciò significa che i server back-end NON richiedono alcuna configurazione speciale.

Si noti che questa non è in realtà la configurazione consigliata per HAProxy e dovrebbe essere utilizzata solo se assolutamente necessaria.


2

Apparentemente esiste una sorta di modalità "trasparente" per haproxy che non ho mai visto o che non voglio avere a che fare, che potresti provare. Altrimenti, dovrai insegnare qualunque sia il servizio di backend sul modo speciale di haproxy di inviare l'IP originale ("PROXY blahblah") e far sì che il servizio estragga l'IP originale da quello.

Perché ti preoccupi per l'Halxy? Ti sei già mantenuto in vita, e fa anche un corretto bilanciamento del carico trasparente.


Ciao, grazie mille per la tua risposta :) Sto leggendo alcune cose sul supporto 'tproxy', immagino che sia questo che intendevi? Inoltre, non avevo considerato il bilanciamento del carico con keepalived direttamente per questo. Keepalived supera l'IP originale del client?
Vito Botta,

Sì, keepalived mantiene intatto l'IP originale, perché è un bilanciamento del carico, non un proxy.
womble

2

L'utilizzo send-proxynella configurazione (per server) ti darà l'origine-ip originale sul lato server ricevente, anche in modalità TCP. Ciò richiede HAProxy 1.5+.

È possibile trovare ulteriori informazioni sul protocollo proxy nella documentazione HAProxy .

listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout      500000
clitimeout      500000
srvtimeout      500000

server host1 xxx.xxx.xxx.xx1:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3

Ciao Nils, grazie per la soluzione, ma quando inserisco send-proxy, causa il db down (haproxy non riesce a rilevare l'host)
neobie

lo stesso è successo anche a me con DB. qualche soluzione?
Peeyush,


-4

Questa configurazione ha funzionato per me. L'IP di origine può essere recuperato in $ _SERVER ['HTTP_X_FORWARDED_FOR']:

globale
        [..... roba normale ....]   
        ssl-server-confirm nessuno

frontend principale *: 5000
        bind *: 443 ssl crt /etc/ssl/mycert_with_private_key.pem
        modalità http
        opzione forwardfor
        reqadd X-Forwarded-Proto: \ https
        default_backend https_server

backend https_server
        modalità http
        balance minimumconn
        opzione tcpka
        il tipo di stick-table dimensioni ip 200k scade 30m
        server srv04 192.168.1.10:443 controllo ssl
        server srv05 192.168.1.11:443 controllo ssl

2
questa risposta non si applica. la connessione non è HTTP.
collo lungo dal

Stai suggerendo che la connessione HTTPS deve essere in modalità TCPC ?.
Pedro Sayago,

No, sto dicendo che la domanda utilizza tcp e la tua risposta si applica solo a http / s.
collo lungo l'

ok, buona fortuna allora, non ho trovato alcun documento relativo al haproxy in modalità tcp forwarding ip. Forse il livello in cui vengono elaborate le richieste non può passare queste informazioni.
Pedro Sayago,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.