Score:0

การตรวจสอบความสมบูรณ์ของ HAProxy ล้มเหลวโดยมีสถานะผิด Layer7, รหัส: 400, ข้อมูล: "การตรวจสอบสถานะ HTTP ส่งคืนรหัส 400

ธง cn

ฉันมีเซิร์ฟเวอร์ HAProxy ที่ฉันใช้เป็นโหลดบาลานเซอร์ L7 สำหรับโหนด k8s ของฉัน คลัสเตอร์ของฉันเปิดใช้งาน istio และฉันมีบริการ istio-ingressgateway ที่เปิดเผยผ่าน NodePort

ประเภทชื่อ CLUSTER-IP EXTERNAL-IP PORT(S) อายุ
istio-ingressgateway NodePort 10.11.140.167 <ไม่มี> 15021:30301/TCP,80:31916/TCP,443:31517/TCP,15012:30768/TCP,15443:32020/TCP 11d

จากเซิร์ฟเวอร์ HAProxy ฉันกำลังพยายามตรวจสอบสถานะ /healthz/พร้อม จุดสิ้นสุด ฉันใช้ HAProxy 1.8 และของฉัน haproxy.cfg มีดังนี้

ทั่วโลก
    บันทึก /dev/log local0.log
    บันทึก /dev/log local1 ประกาศ
    chroot /var/lib/haproxy
    ไฟล์ pid /var/run/rh-haproxy18-haproxy.pid

    ผู้ใช้แฮพร็อกซี
    กลุ่ม haproxy
    ภูต
    ซ็อกเก็ตสถิติ /run/haproxy/admin.sock โหมด 660 ระดับผู้ดูแลระบบ expose-fd ผู้ฟัง

    การตรวจสอบการแพร่กระจาย 21

    # ตำแหน่งวัสดุ SSL เริ่มต้น
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # การเข้ารหัสเริ่มต้นเพื่อใช้กับซ็อกเก็ตการฟังที่เปิดใช้งาน SSL
    # สำหรับข้อมูลเพิ่มเติม โปรดดูรหัสลับ (1SSL) รายการนี้มาจาก:
    # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    # สามารถรับรายการทางเลือกพร้อมคำสั่งเพิ่มเติมได้จาก
    # 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 ไม่มี sslv3

ค่าเริ่มต้น
    โหมด http
    เข้าสู่ระบบทั่วโลก
    ตัวเลือก httplog
    ตัวเลือก dontlognull
    ตัวเลือก http-ปิดเซิร์ฟเวอร์
    ตัวเลือกการจัดส่งซ้ำ
    ลองใหม่ 3

    หมดเวลา http-request 10 วินาที
    หมดเวลาคิว 1 ม
    หมดเวลาเชื่อมต่อ 10 วินาที
    ลูกค้าหมดเวลา 1m
    หมดเวลาเซิร์ฟเวอร์ 1 ม
    หมดเวลา http-keep-alive 10 วินาที
    ตรวจสอบการหมดเวลา 10 วินาที
    แม็กซ์คอน 10,000
    วงเวียนสมดุล


ส่วนหน้า http-80
        ผูก *:80
        โหมด http
        ตัวเลือก httplog
        default_backend www-80

แบ็กเอนด์ www-80
        วงเวียนสมดุล
        โหมด http
        ตัวเลือก httpchk /healthz/ready HTTP/1.1
        http- ตรวจสอบสถานะคาดหวัง 200
        เซิร์ฟเวอร์ backendnode1 155.13.200.29:31916 ตรวจสอบพอร์ต 30301 ตก 3 ขึ้น 2 ระหว่าง 1597
        เซิร์ฟเวอร์ backendnode2 155.13.200.28:31916 ตรวจสอบพอร์ต 30301 ตก 3 ขึ้น 2 ระหว่าง 1597
        เซิร์ฟเวอร์ backendnode3 155.13.200.27:31916 ตรวจสอบพอร์ต 30301 ตก 3 ขึ้น 2 ระหว่าง 1597


สุขภาพส่วนหน้า -80
    ผูก *:8080
    acl backend_dead nbsrv(www-80) lt 1
    ตรวจสอบ-uri /haproxy_status
    การตรวจสอบล้มเหลวหาก backend_dead

สถิติการฟัง # กำหนดส่วนการฟังที่เรียกว่า "สถิติ"
    ผูก :9000 # ฟังบน localhost:9000
    โหมด http
    สถิติเปิดใช้งาน # เปิดใช้งานหน้าสถิติ
    สถิติ ซ่อนเวอร์ชัน # ซ่อนเวอร์ชัน HAProxy
    stats realm Haproxy\ Statistics # ข้อความชื่อเรื่องสำหรับหน้าต่างป๊อปอัป
    สถิติ URI /haproxy_stats # สถิติ URI
    สถิติ auth haproxy:passwd  

ฉันใช้ HTTP/1.1 สำหรับการตรวจสุขภาพแบ็กเอนด์เพราะ istio-ingressgateway ไม่ยอมรับ HTTP/1.0 คำขอ ส่งผลให้เกิดรหัสข้อผิดพลาด 426.

การกดปุ่มแบ็กเอนด์จากเซิร์ฟเวอร์ HAProxy เป็นผลสำเร็จ:

ขด -I http://155.13.200.29:31916/healthz/ready
HTTP/1.1 200 ตกลง
วันที่: วันศุกร์ที่ 11 มิถุนายน 2021 07:21:09 GMT
x-envoy-อัพสตรีม-เวลาให้บริการ: 0
เซิร์ฟเวอร์: ทูต
การเข้ารหัสการถ่ายโอน: chunked

อย่างไรก็ตาม การตรวจสุขภาพ HAProxy ยังคงไม่ผ่าน ฉันได้รับข้อผิดพลาดต่อไปนี้:

11 มิ.ย. 07:18:22 น. hap-server01 haproxy[12348]: เซิร์ฟเวอร์ www-80/backendnode2 ล่ม, เหตุผล: Layer7 สถานะผิด, รหัส: 400, ข้อมูล: "ตรวจสอบสถานะ HTTP รหัสส่งคืน <3C>400<3E>" , ระยะเวลาการตรวจสอบ: 2ms. เหลือ 1 เซิร์ฟเวอร์ที่ใช้งานอยู่และ 0 เซิร์ฟเวอร์สำรอง ใช้งานอยู่ 0 เซสชัน, 0 อยู่ในคิว, 0 เหลืออยู่ในคิว
11 มิ.ย. 07:18:22 น. hap-server01 haproxy[12348]: เซิร์ฟเวอร์ www-80/backendnode2 ล่ม, เหตุผล: Layer7 สถานะผิด, รหัส: 400, ข้อมูล: "ตรวจสอบสถานะ HTTP รหัสส่งคืน <3C>400<3E>" , ระยะเวลาการตรวจสอบ: 2ms. เหลือ 1 เซิร์ฟเวอร์ที่ใช้งานอยู่และ 0 เซิร์ฟเวอร์สำรอง ใช้งานอยู่ 0 เซสชัน, 0 อยู่ในคิว, 0 เหลืออยู่ในคิว
11 มิ.ย. 07:18:22 น. hap-server01 haproxy[11795]: [คำเตือน] 161/071821 (11795) : อดีตพนักงาน 11798 ออกด้วยรหัส 0
11 มิ.ย. 07:18:22 น. hap-server01 haproxy[12348]: เซิร์ฟเวอร์ www-80/backendnode3 ล่ม, เหตุผล: Layer7 สถานะผิด, รหัส: 400, ข้อมูล: "การตรวจสอบสถานะ HTTP ส่งคืนรหัส <3C>400<3E>" , ระยะเวลาการตรวจสอบ: 3ms. เหลือ 0 เซิร์ฟเวอร์ที่ใช้งานอยู่และ 0 เซิร์ฟเวอร์สำรอง ใช้งานอยู่ 0 เซสชัน, 0 อยู่ในคิว, 0 เหลืออยู่ในคิว
11 มิ.ย. 07:18:22 น. hap-server01 haproxy[12348]: เซิร์ฟเวอร์ www-80/backendnode3 ล่ม, เหตุผล: Layer7 สถานะผิด, รหัส: 400, ข้อมูล: "การตรวจสอบสถานะ HTTP ส่งคืนรหัส <3C>400<3E>" , ระยะเวลาการตรวจสอบ: 3ms. เหลือ 0 เซิร์ฟเวอร์ที่ใช้งานอยู่และ 0 เซิร์ฟเวอร์สำรอง ใช้งานอยู่ 0 เซสชัน, 0 อยู่ในคิว, 0 เหลืออยู่ในคิว

ฉันเข้าใจรหัสสถานะนั้น 400 เกิดขึ้นสำหรับคำขอที่ไม่ถูกต้อง มีบางอย่างที่พลาดการกำหนดค่าในไฟล์ haproxy.cfg? ฉันรู้สึกว่ามันเป็นวิธีที่ฉันพยายามส่ง HTTP/1.1 การขอตรวจสุขภาพ แต่ฉันไม่แน่ใจว่าจะเพิ่มอะไรอีกหรือต้องแก้ไขอะไรในการกำหนดค่า

Score:0
ธง in

ตรวจสอบคู่มือ คุณไม่สามารถระบุรุ่นโดยไม่ระบุวิธีการ:

ตัวเลือก httpchk <วิธีการ> <uri> <เวอร์ชัน>

ในกรณีของคุณ ฉันจะพยายาม

ตัวเลือก httpchk GET /healthz/ready HTTP/1.1

นอกจากนี้: เรียนรู้เกี่ยวกับ tcpdump ซึ่งน่าสนใจมากในการดูการสื่อสารระหว่างระบบและค้นหาว่ามีอะไรผิดปกติ

bakadevops avatar
cn flag
ฉันใช้ HAProxy เวอร์ชัน 1.8.1 ```ตัวเลือก httpchk GET /healthz/ready HTTP/1.1``` สิ่งนี้ยังคงส่งคืน ```400``` คู่มือระบุว่า ```โปรดทราบว่าฟิลด์โฮสต์นั้นจำเป็นใน HTTP/1.1 ให้ใช้คำสั่ง "http-check send" เพื่อเพิ่มลงไป ``` ดังนั้นฉันจึงเพิ่ม ```http-check send hdr Host www`` `. ตอนนี้มันใช้งานได้
Gerard H. Pille avatar
in flag
ในเวลาของฉันคุณต้องต่อท้ายบรรทัดใหม่และส่วนหัวของโฮสต์เป็น httpchk
berndbausch avatar
us flag
แม้ว่าปัญหาดูเหมือนจะได้รับการแก้ไขแล้ว แต่ฉันจะดูบันทึกของเว็บเซิร์ฟเวอร์ก่อน เพื่อทำความเข้าใจว่าพวกเขาได้รับคำขออะไรบ้าง และฉันขอย้ำอีกครั้งเกี่ยวกับ tcpdump
bakadevops avatar
cn flag
@berndbausch ขอบคุณสำหรับความคิดเห็น ฉันจะตรวจสอบบันทึกและ tcpdumps

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา