Puncte:0

Cum să forțezi o anumită rutare bazată pe SNI în HAProxy?

drapel in

Am următoarea configurație HAProxy:

asculta sni-443
    lega *:443
    modul tcp

    timeout conectare 4s
    timeout client 3m
    server timeout 3m
    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }
    acl no-ssl req.ssl_hello_type 0

    use-server backend1.default.svc.cluster.local dacă !no-ssl { req_ssl_sni -i www.example.com }
    server backend1.default.svc.cluster.local 10.96.245.95:443 greutate 0

    use-server backend2.default.svc.cluster.local if !no-ssl { req_ssl_sni -i demo.example.com }
    server backend2.default.svc.cluster.local 10.96.184.199:443 greutate 0

Dacă vizitez www.example.com, totul e bine. Dar când fac asta după ce am reîncărcat demo.example.com cu frecvență înaltă (bătând pe Shift-Ctrl-R în browser), ajung la demo.example.com. Da, exact: deschid www.example.com în browser, dar HAProxy îl direcționează către backend2 (care returnează o eroare).

Aparent, HAProxy nu înțelege pe deplin că cele două servicii nu sunt alternative pentru echilibrarea sarcinii, ci produse foarte distincte. Cum pot asigura acea www.example.com se termină cu backend1?

Michael Hampton avatar
drapel cz
Spune-mi old school, dar pentru claritate prefer să păstrez secțiuni separate „frontend” și „backend” decât o secțiune mixtă „ascultare”. Oricum, configurația ta arată bine și nu văd nimic aici care ar cauza problema. Mai ai ceva în fața haproxy?
drapel in
Nu.Dar în prezent investighez dacă faptul că certificatele TLS pentru ambele backend conțin ambele domenii (cu alte cuvinte, același certificat cu alias-uri) poate confunda HAproxy.
Puncte:1
drapel ng

Acesta este un exemplu din documente pentru req_ssl_sni:

tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend bk_allow if { req_ssl_sni -f allowed_sites }
default_backend bk_sorry_page

Probabil ai nevoie tcp-request inspect-delay setat la ceva, pentru că nu îl setați, înseamnă că haproxy nu așteaptă deloc și nu are idee ce a fost SNI.
Explicație mai lungă în documente pentru tcp-request inspect-delay

drapel in
Am adăugat alte setări la configurația mea minimă. Ele nu împiedică acest comportament nefericit al HAProxy. Care este diferența dintre `use_backend` și `use-server`? Poate fi aceasta cauza?
tbielaszewski avatar
drapel ng
`server` este un singur serviciu IP:PORT, în timp ce `backend` este o structură întreagă de configurare în haproxy, cum ar fi `ascultă` sau `frontend`, care conține propriile reguli, ACL-uri și servere. definirea de backend-uri separate și punerea acolo de servere ar putea ajuta la separarea mai departe a acestor servere. poti posta niste log-uri haproxy, cu SNI in ele daca se poate?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.