Configurazione Haproxy con configurazione del sottodominio


8

Sperando che qualcuno possa aiutare a confermare se questo suppone di funzionare? Sto provando a instradare 3 traffico di sottodominio allo stesso host haproxy;

Ecco la mia configurazione

haproxy con una interfaccia ip 10.10.10.100 e nome DNS haproxy01.mydomain.com

3 record CNAME ad esso associati; sub1.mydomain.com, sub2.mydomain.com e sub3.mydomain.com

tutto il traffico in entrata è per la porta 443.

Esistono due server applicazioni back-end che accettano il traffico su tre porte 8081, 8082, 8083, diciamo;

sub1.mydomain.com per 8081 sub2.mydomain.com per 8082 e sub3.mydomain.com per 8083

L'applicazione richiede il passaggio SSL solo per il traffico della porta 8081, quindi credo che dovrò usare la modalità tcp per esso l'altro traffico per 8082 e 8083 è anche SSL ma può essere terminato su Haproxy ma per il test sono andato con tutto il TCP modalità.

La mia sezione di configurazione per raggiungere questo è di seguito;

    #Application Setup 
frontend mytraffic
    bind *:443
    mode  tcp
    acl host_sub1 hdr(host) -i sub1.mydomain.com
    acl host_sub2 hdr(host) -i sub2.mydomain.com
    acl host_sub3 hdr(host) -i sub3.mydomain.com

    use_backend sub1_nodes if host_sub1
    use_backend sub2_nodes if host_sub2
    use_backend sub3_nodes if host_sub3

    option tcplog backend sub1_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8081 check
    server node2 10.10.10.102:8081 check 
backend sub2_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8082 check
    server node2 10.10.10.102:8082 check 
backend sub3_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8083 check
    server node2 10.10.10.102:8083 check


    # APPLICATION SETUP END

Quando provo ad accedere ai server delle applicazioni tramite HAproxy, ad esempio per il traffico 8082, vengono visualizzati i registri;

localhost haproxy [6097]: xxxx: 51241 [20 / Mar / 2015: 12: 19: 38.720] mytraffic mytraffic / -1 / -1 / 0 0 SC 0/0/0/0/0 0/0

apprezzare alcune indicazioni riguardo a questa configurazione.

PS Non posso incorporare alcuna immagine per chiarezza qui poiché è il mio primo post :-(


il messaggio di registro non era completo; 20 mar 12:19:38 localhost haproxy [6097]: xxxx: 51241 [20 / Mar / 2015: 12: 19: 38.720] mytraffic mytraffic / <NOSRV> -1 / -1 / 0 0 SC 0/0/0 / 0/0 0/0
— Apprendimento globale

NOSRV significa che non è stato possibile trovare un backend adatto. Puoi accedere alla pagina delle statistiche o al socket e vedere quali back-end pensa HAproxy?
— Jim G.

Controlla anche se c'è connettività tra haproxy e i server delle applicazioni. Se si utilizza nc: nc -v 10.10.10.101 8081, nc -v 10.10.10.102 8081, ecc.
— hdanniel

L'ultimo controllo sulla dashboard di monitoraggio haproxy sta segnalando tutti i nodi. Ho anche confermato la connettività dalla console Haproxy a questi server applicazioni su tutte le porte.
— Global Learning

@HD sì, la connettività va bene su entrambi i nodi.
— Global Learning

Risposte:


11

Con la modalità TCP, HAProxy non decodificherà la richiesta HTTP, quindi le tue acllinee non faranno nulla e il frontend non sarà mai in grado di abbinare un backend, come mostrato dai log che hai inserito: mytraffic/<NOSRV>significa che non è stato in grado di scegliere un backend o server.

Dovresti dividere i 3 sottodomini in 2 frontend diversi, ognuno con i propri IP poiché sono tutti connessi sulla porta 443. Uno per passthrough, l'altro per la terminazione SSL e la commutazione del contenuto tramite mode http. L'avvertenza qui è che se dovessi aggiungere un quarto sottodominio (sub4.mydomain.com) che richiedesse anche il passthrough, avresti bisogno di un terzo frontend e IP.

Dovresti anche creare diversi record CNAME o A in DNS in modo che i sottodomini giusti puntino agli IP giusti.

Data questa configurazione DNS:

10.10.10.100        A         haproxy01-cs.mydomain.com
10.10.10.101        A         haproxy01-pt1.mydomain.com
10.10.10.102        A         haproxy01-pt2.mydomain.com
sub1.mydomain.com   CNAME     haproxy01-pt1.mydomain.com
sub2.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub3.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub4.mydomain.com   CNAME     haproxy01-pt2.mydomain.com

La configurazione di HAproxy sarebbe simile a questa:

#Application Setup 
frontend ContentSwitching

  bind 10.10.10.100:443
  mode  http
  option httplog
  acl host_sub2 hdr(host) -i sub2.mydomain.com
  acl host_sub3 hdr(host) -i sub3.mydomain.com
  use_backend sub2_nodes if host_sub2
  use_backend sub3_nodes if host_sub3

frontend PassThrough1
  bind 10.10.10.101:443
  mode  tcp
  option tcplog
  use_backend sub1_nodes     

frontend PassThrough2
  bind 10.10.10.102:443
  mode  tcp
  option tcplog
  use_backend sub4_nodes

backend sub1_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8081 check
  server node2 10.10.10.102:8081 check 

backend sub2_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8082 check
  server node2 10.10.10.102:8082 check 

backend sub3_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8083 check
  server node2 10.10.10.102:8083 check

backend sub4_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8084 check
  server node2 10.10.10.102:8084 check

In realtà, gli IP che ho qui non hanno alcun senso (ho usato il 10.10.10.101-102 per i front-end in cui li hai assegnati ai nodi), ma hai l'idea di come sarebbe.
— GregL

@GreL - GRAZIE. Ci proverò e cercherò dei risultati. Ero preoccupato per la modalità tcp e l'uso acl prima di usarlo.
— Global Learning

Grazie GregL. Funziona. Un'ultima domanda se posso? avere SSL dal client -> haproxy e haproxy -> server back-end (come se potesse terminare ma avviarne uno nuovo nel back-end), qual è il modo consigliato per farlo? ssl passare attraverso con la modalità tcp? Il motivo per cui volevo il passthrough per il traffico della porta 8081 è dovuto al requisito di avere una sessione reciprocamente autenticata con applicazione e client. Il resto del traffico delle porte 8082 e 8083 richiede SSL ma non richiede l'autenticazione reciproca. (in questo momento sono andato con l'approccio passthrough).
— Global Learning

Bene, HAProxy può fare il controllo del certificato client usando le opzioni ca-filee verify optionalper l' bindistruzione. Se lo hai fatto, potresti avere un unico frontend associato a un IP, quindi il contenuto passa ai backend appropriati, come richiesto dall'intestazione host . Per confermare che l'autenticazione reciproca ha funzionato, è possibile creare un acl come acl ClientSSLValid ssl_c_verify 0, quindi aggiungerlo come un'altra condizione use_backendall'istruzione likeuse_backend sub1_nodes if host_sub1 ClientSSLValid
— GregL

Ci sono commenti decenti qui e qui su come farlo, con più dettagli di quelli che ho fornito.
— GregL
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.