Puncte:0

Verificarea sănătății HAProxy eșuează cu starea greșită Layer7, cod: 400, informații: „Verificarea stării HTTP a returnat codul 400

drapel cn

Am un server HAProxy pe care îl folosesc ca echilibrator de încărcare L7 pentru nodurile mele k8s. Clusterul meu este istio activat și am un serviciu istio-ingressgateway expus prin NodePort

NUME TIP CLUSTER-IP EXTERN-IP PORT(E) Vârsta
istio-ingressgateway NodePort 10.11.140.167 <niciunul> 15021:30301/TCP,80:31916/TCP,443:31517/TCP,15012:30768/TCP,15443:320210/TCP

De pe serverul HAProxy, încerc să efectuez verificări de sănătate /healthz/gata punct final. Folosesc HAProxy 1.8 și my haproxy.cfg este după cum urmează:

global
    log /dev/log local0
    log /dev/log local1 notificare
    chroot /var/lib/haproxy
    pidfile /var/run/rh-haproxy18-haproxy.pid

    utilizator haproxy
    haproxy de grup
    demonul
    socket statistici /run/haproxy/admin.sock mod 660 nivel de administrare expose-fd ascultători

    controale de răspândire 21

    # Locații implicite ale materialelor SSL
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Cifruri implicite de utilizat pe prizele de ascultare compatibile SSL.
    # Pentru mai multe informații, consultați ciphers(1SSL). Aceasta lista este de la:
    # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    # O listă alternativă cu directive suplimentare poate fi obținută de la
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3

implicite
    modul http
    jurnal global
    opțiunea httplog
    opțiunea dontlognull
    opțiunea http-server-close
    reexpedierea opțiunii
    reîncercări 3

    timeout http-request 10s
    timeout coada 1m
    timeout connect 10s
    timeout client 1m
    server timeout 1m
    timeout http-keep-alive 10s
    verificare timeout 10s
    maxconn 10000
    echilibru roundrobin


frontend http-80
        lega *:80
        modul http
        opțiunea httplog
        default_backend www-80

backend www-80
        echilibru roundrobin
        modul http
        opțiunea httpchk /healthz/ready HTTP/1.1
        http-check aștept starea 200
        server backendnode1 155.13.200.29:31916 verificați portul 30301 căderea 3 creșterea 2 inter 1597
        server backendnode2 155.13.200.28:31916 verificați portul 30301 căderea 3 creșterea 2 inter 1597
        server backendnode3 155.13.200.27:31916 verificați portul 30301 căderea 3 creșterea 2 inter 1597


sănătatea frontend-80
    lega*:8080
    acl backend_dead nbsrv(www-80) lt 1
    monitor-uri /haproxy_status
    monitor eșuează dacă backend_dead

statistici de ascultare # Definiți o secțiune de ascultare numită „statistici”
    bind :9000 # Ascultă pe localhost:9000
    modul http
    statistici activate # Enable stats page
    statistici hide-version # Ascunde versiunea HAProxy
    domeniul statisticilor Haproxy\ Statistici # Textul titlului pentru fereastra pop-up
    URI statistici /haproxy_stats # URI statistici
    statistici auth haproxy:passwd  

eu folosesc HTTP/1.1 pentru verificarea sănătății backend deoarece istio-ingressgateway nu acceptă HTTP/1.0 solicitări, rezultă un cod de eroare 426.

Atingerea backend-ului de la serverul HAProxy are succes:

curl -I http://155.13.200.29:31916/healthz/ready
HTTP/1.1 200 OK
data: vineri, 11 iunie 2021 07:21:09 GMT
x-envoy-upstream-service-time: 0
server: trimis
codificare de transfer: fragmentat

Cu toate acestea, verificarea de sănătate HAProxy încă nu va trece. Primesc următoarele erori:

11 iunie 07:18:22 hap-server01 haproxy[12348]: Serverul www-80/backendnode2 este DOWN, motiv: stare greșită Layer7, cod: 400, informații: „Verificarea stării HTTP a returnat codul <3C>400<3E>” , durata verificării: 2 ms. Au rămas 1 server activ și 0 de rezervă. 0 sesiuni active, 0 în coadă, 0 rămase în coadă.
11 iunie 07:18:22 hap-server01 haproxy[12348]: Serverul www-80/backendnode2 este DOWN, motiv: stare greșită Layer7, cod: 400, informații: „Verificarea stării HTTP a returnat codul <3C>400<3E>” , durata verificării: 2 ms. Au rămas 1 server activ și 0 de rezervă. 0 sesiuni active, 0 în coadă, 0 rămase în coadă.
11 iunie 07:18:22 hap-server01 haproxy[11795]: [AVERTISMENT] 161/071821 (11795) : Fostul lucrător 11798 a ieșit cu codul 0
11 iunie 07:18:22 hap-server01 haproxy[12348]: Serverul www-80/backendnode3 este DOWN, motiv: stare greșită Layer7, cod: 400, informații: „Verificarea stării HTTP a returnat codul <3C>400<3E>” , durata verificării: 3 ms. Au rămas 0 servere active și 0 de rezervă. 0 sesiuni active, 0 în coadă, 0 rămase în coadă.
11 iunie 07:18:22 hap-server01 haproxy[12348]: Serverul www-80/backendnode3 este DOWN, motiv: stare greșită Layer7, cod: 400, informații: „Verificarea stării HTTP a returnat codul <3C>400<3E>” , durata verificării: 3 ms. Au rămas 0 servere active și 0 de rezervă. 0 sesiuni active, 0 în coadă, 0 rămase în coadă.

Înțeleg acel cod de stare 400 apare pentru cereri proaste. Există ceva miss configurat în mine haproxy.cfg? Simt că așa încerc să trimit HTTP/1.1 cerere de control de sănătate. Dar, nu sunt sigur ce altceva să adaug sau ce să modific în configurație.

Puncte:0
drapel in

Verificați manualul, nu puteți specifica versiunea fără a specifica metoda:

opțiunea httpchk <metodă> <uri> <versiunea>

in cazul tau as incerca

opțiunea httpchk GET /healthz/ready HTTP/1.1

De asemenea: aflați despre tcpdump, foarte interesant să urmăriți comunicarea dintre sisteme și să aflați ce este în neregulă.

bakadevops avatar
drapel cn
Folosesc HAProxy versiunea 1.8. ```opțiunea httpchk GET /healthz/ready HTTP/1.1``` , aceasta returnează totuși ```400```. Manualul spune că ```Rețineți că câmpul Gazdă este obligatoriu în HTTP/1.1, utilizați directiva "http-check send" pentru a-l adăuga.``` Deci, am adăugat ```http-check send hdr Host www`` `. Acum functioneaza.
Gerard H. Pille avatar
drapel in
Pe vremea mea trebuia să atașați o linie nouă și antetul gazdei la httpchk.
berndbausch avatar
drapel us
Deși problema pare a fi rezolvată, m-aș fi uitat mai întâi la jurnalele serverului web, pentru a înțelege ce solicitări primesc. Și susțin observația despre tcpdump.
bakadevops avatar
drapel cn
@berndbausch, mulțumesc pentru observație. Mă voi asigura că verific jurnalele și tcpdumps.

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.