Điểm:0

Kiểm tra tình trạng HAProxy không thành công với trạng thái sai Layer7, mã: 400, thông tin: "Kiểm tra trạng thái HTTP trả về mã 400

lá cờ cn

Tôi có một máy chủ HAProxy mà tôi đang sử dụng làm bộ cân bằng tải L7 cho các nút k8 của mình. Cụm của tôi được bật istio và tôi có một dịch vụ cổng vào istio được hiển thị qua NodePort

TÊN LOẠI CLUSTER-IP (CỔNG IP NGOÀI) TUỔI
cổng vào istio NodePort 10.11.140.167 <none> 15021:30301/TCP,80:31916/TCP,443:31517/TCP,15012:30768/TCP,15443:32020/TCP 11d

Từ máy chủ HAProxy, tôi đang cố gắng thực hiện kiểm tra sức khỏe trên /healthz/sẵn sàng điểm cuối. Tôi đang sử dụng HAProxy 1.8 và haproxy.cfg là như sau:

toàn cầu
    nhật ký/dev/log cục bộ0
    log /dev/log local1 thông báo
    chroot /var/lib/haproxy
    pidfile /var/run/rh-haproxy18-haproxy.pid

    người dùng haproxy
    nhóm haproxy
    yêu tinh
    thống kê ổ cắm /run/haproxy/admin.sock chế độ quản trị viên cấp 660 trình nghe fd

    kiểm tra lây lan 21

    # Vị trí tài liệu SSL mặc định
    ca-base /etc/ssl/certs
    crt-base/etc/ssl/riêng tư

    # Mật mã mặc định để sử dụng trên ổ cắm nghe hỗ trợ SSL.
    # Để biết thêm thông tin, hãy xem mật mã (1SSL). Danh sách này là từ:
    # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    # Có thể lấy danh sách thay thế với các chỉ thị bổ sung từ
    # 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

mặc định
    chế độ http
    đăng nhập toàn cầu
    tùy chọn httplog
    tùy chọn donlognull
    tùy chọn http-server-đóng
    gửi lại tùy chọn
    thử lại 3

    thời gian chờ yêu cầu http 10 giây
    hàng đợi thời gian chờ 1m
    hết thời gian kết nối 10s
    khách hàng hết thời gian chờ 1m
    máy chủ hết thời gian chờ 1 phút
    thời gian chờ http-keep-alive 10s
    kiểm tra thời gian chờ 10s
    maxconn 10000
    thăng bằng vòng tròn


giao diện người dùng http-80
        ràng buộc *:80
        chế độ http
        tùy chọn httplog
        default_backend www-80

phụ trợ www-80
        thăng bằng vòng tròn
        chế độ http
        tùy chọn httpchk /healthz/sẵn sàng HTTP/1.1
        http-kiểm tra trạng thái mong đợi 200
        máy chủ backendnode1 155.13.200.29:31916 kiểm tra cổng 30301 giảm 3 tăng 2 liên 1597
        máy chủ backendnode2 155.13.200.28:31916 kiểm tra cổng 30301 giảm 3 tăng 2 liên 1597
        máy chủ backendnode3 155.13.200.27:31916 kiểm tra cổng 30301 giảm 3 tăng 2 liên 1597


sức khỏe giao diện người dùng-80
    ràng buộc *:8080
    acl backend_dead nbsrv(www-80) lt 1
    màn hình-uri/haproxy_status
    màn hình thất bại nếu backend_dead

số liệu thống kê nghe # Xác định phần nghe gọi là "số liệu thống kê"
    liên kết :9000 # Nghe trên localhost:9000
    chế độ http
    kích hoạt thống kê # Kích hoạt trang thống kê
    thống kê ẩn phiên bản # Ẩn phiên bản HAProxy
    lĩnh vực thống kê Haproxy\ Thống kê # Văn bản tiêu đề cho cửa sổ bật lên
    thống kê uri /haproxy_stats # URI thống kê
    thống kê auth haproxy:passwd  

tôi đang dùng HTTP/1.1 để kiểm tra sức khỏe phụ trợ vì istio-ingressgateway không chấp nhận HTTP/1.0 yêu cầu, nó dẫn đến mã lỗi 426.

Đánh phần phụ trợ từ máy chủ HAProxy dẫn đến thành công:

cuộn tròn -I http://155.13.200.29:31916/healthz/ready
HTTP/1.1 200 OK
ngày: Thứ sáu, ngày 11 tháng 6 năm 2021 07:21:09 GMT
x-envoy-upstream-service-time: 0
máy chủ: phái viên
chuyển mã hóa: chunked

Tuy nhiên, kiểm tra sức khỏe HAProxy vẫn không vượt qua. Tôi nhận được các lỗi sau:

Ngày 11 tháng 6 07:18:22 hap-server01 haproxy[12348]: Máy chủ www-80/backendnode2 XUỐNG, lý do: Trạng thái Layer7 sai, mã: 400, thông tin: "Kiểm tra trạng thái HTTP mã trả về <3C>400<3E>" , kiểm tra thời lượng: 2ms. Còn lại 1 máy chủ đang hoạt động và 0 máy chủ dự phòng. 0 phiên hoạt động, 0 phiên được yêu cầu, 0 phiên còn lại trong hàng đợi.
Ngày 11 tháng 6 07:18:22 hap-server01 haproxy[12348]: Máy chủ www-80/backendnode2 XUỐNG, lý do: Trạng thái Layer7 sai, mã: 400, thông tin: "Kiểm tra trạng thái HTTP mã trả về <3C>400<3E>" , kiểm tra thời lượng: 2ms. Còn lại 1 máy chủ đang hoạt động và 0 máy chủ dự phòng. 0 phiên hoạt động, 0 phiên được yêu cầu, 0 phiên còn lại trong hàng đợi.
Ngày 11 tháng 6 07:18:22 hap-server01 haproxy[11795]: [CẢNH BÁO] 161/071821 (11795): Công nhân cũ 11798 đã thoát với mã 0
Ngày 11 tháng 6 07:18:22 hap-server01 haproxy[12348]: Máy chủ www-80/backendnode3 XUỐNG, lý do: Trạng thái Layer7 sai, mã: 400, thông tin: "Kiểm tra trạng thái HTTP mã trả về <3C>400<3E>" , kiểm tra thời lượng: 3ms. 0 máy chủ đang hoạt động và 0 máy chủ dự phòng còn lại. 0 phiên hoạt động, 0 phiên được yêu cầu, 0 phiên còn lại trong hàng đợi.
Ngày 11 tháng 6 07:18:22 hap-server01 haproxy[12348]: Máy chủ www-80/backendnode3 XUỐNG, lý do: Trạng thái Layer7 sai, mã: 400, thông tin: "Kiểm tra trạng thái HTTP mã trả về <3C>400<3E>" , kiểm tra thời lượng: 3ms. 0 máy chủ đang hoạt động và 0 máy chủ dự phòng còn lại. 0 phiên hoạt động, 0 phiên được yêu cầu, 0 phiên còn lại trong hàng đợi.

Tôi hiểu mã trạng thái đó 400 xảy ra đối với các yêu cầu xấu. Có điều gì đó bị lỗi trong cấu hình của tôi không haproxy.cfg? Tôi cảm thấy như đó là cách tôi đang cố gửi HTTP/1.1 yêu cầu kiểm tra sức khỏe. Tuy nhiên, tôi không chắc phải thêm gì khác hoặc sửa đổi gì trong cấu hình.

Điểm:0
lá cờ in

Kiểm tra hướng dẫn, bạn không thể chỉ định phiên bản mà không chỉ định phương thức:

tùy chọn httpchk <phương thức> <uri> <phiên bản>

trong trường hợp của bạn, tôi sẽ thử

tùy chọn httpchk NHẬN /healthz/sẵn sàng HTTP/1.1

Ngoài ra: tìm hiểu về tcpdump, rất thú vị khi xem giao tiếp giữa các hệ thống và tìm hiểu điều gì sai.

bakadevops avatar
lá cờ cn
Tôi đang sử dụng HAProxy phiên bản 1.8. ```tùy chọn httpchk GET /healthz/ready HTTP/1.1``` , tùy chọn này vẫn trả về ```400```. Hướng dẫn nói rằng ```Lưu ý rằng trường Máy chủ lưu trữ là bắt buộc trong HTTP/1.1, hãy sử dụng chỉ thị "gửi kiểm tra http" để thêm nó.``` Vì vậy, tôi đã thêm ```kiểm tra http gửi máy chủ hdr www`` `. Bây giờ nó hoạt động.
Gerard H. Pille avatar
lá cờ in
Vào thời của tôi, bạn phải thêm một dòng mới và tiêu đề Máy chủ vào httpchk.
berndbausch avatar
lá cờ us
Mặc dù vấn đề dường như đã được giải quyết, nhưng trước tiên tôi nên xem nhật ký máy chủ web để hiểu những yêu cầu mà chúng nhận được. Và tôi ủng hộ nhận xét về tcpdump.
bakadevops avatar
lá cờ cn
@berndbausch, cảm ơn vì nhận xét. Tôi sẽ đảm bảo xác minh nhật ký và tcpdump.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.