You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Digital Ocean负载均衡器报错:普通HTTP请求发至HTTPS端口

解决Digital Ocean负载均衡器+Nginx Ingress Controller的400错误及健康检查配置问题

核心问题分析

你遇到的The plain HTTP request was sent to HTTPS port 400错误,主要源于负载均衡器的协议配置与TLS透传模式冲突,同时健康检查配置未生效可能加剧了流量转发异常:

  1. 当启用do-loadbalancer-tls-passthrough: "true"时,DO LB会直接透传TCP流量到后端,但你当前设置的do-loadbalancer-protocol: "http"会让LB尝试解析HTTP请求,导致协议不匹配,触发400错误。
  2. 健康检查URL显示指向80端口,说明你配置的do-loadbalancer-healthcheck-port: "3000"未生效,可能是因为Ingress Controller的Service未暴露3000端口为NodePort,或者LB配置未同步。

解决步骤

1. 修正负载均衡器协议配置

将do-loadbalancer-protocol从http改为tcp,匹配TLS透传的工作模式:

  • TLS透传模式下,LB不终止TLS连接,仅转发原始TCP流量,因此需要设置协议为tcp而非http。

2. 确保健康检查配置生效

  • 检查Nginx Ingress Controller的Service资源,确认已将3000端口暴露为NodePort类型(如果健康检查端点直接在应用Pod上,需确保应用的Service也暴露了3000端口的NodePort)。
  • 删除并重新创建Ingress Controller的Service,触发DO LB同步配置(部分情况下修改注解后需要手动触发同步)。

3. 验证Ingress Controller配置

  • 确认Ingress资源已正确配置TLS规则,且后端服务的路由指向应用的3000端口。
  • 直接测试节点的443 NodePort:curl -v https://<节点IP>:<443对应的NodePort>,确认Ingress Controller能正常处理HTTPS请求。

调整后的注解配置示例

annotations:
    service.beta.kubernetes.io/do-loadbalancer-name: random
    service.beta.kubernetes.io/do-loadbalancer-protocol: "tcp"  # 修正为tcp
    service.beta.kubernetes.io/do-loadbalancer-tls-passthrough: "true"
    service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
    service.beta.kubernetes.io/do-loadbalancer-certificate-id: "masked-my-cert-id"
    service.beta.kubernetes.io/do-loadbalancer-disable-lets-encrypt-dns-records: "false"
    service.beta.kubernetes.io/do-loadbalancer-redirect-http-to-https: "true"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-port: "3000"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-protocol: "http"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-path: "/api/healthcheck"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-check-interval-seconds: "3"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-response-timeout-seconds: "5"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-unhealthy-threshold: "3"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-healthy-threshold: "5"

内容的提问来源于stack exchange,提问作者Tommy Leong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:27:06