ฉันมีเซิร์ฟเวอร์ 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
การขอตรวจสุขภาพ แต่ฉันไม่แน่ใจว่าจะเพิ่มอะไรอีกหรือต้องแก้ไขอะไรในการกำหนดค่า