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.