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

在AWS NLB控制器+Route53的EKS容器中启用HTTP/2的方法

问题解答

1. 是否需要为服务器手动配置SSL证书?

需要,但不能用自签名证书。AWS Network Load Balancer(NLB)的HTTP/2支持仅兼容AWS Certificate Manager(ACM)签发的证书——不管是公有CA还是AWS私有CA签发的都可以,自签名证书无法触发NLB启用HTTP/2协议。

具体操作要点:

  • 在ACM中申请或导入合规证书(需与NLB处于同一AWS区域,公有证书可跨区域使用)
  • 确保NLB的HTTPS监听器绑定该ACM证书的ARN
  • 给EKS Service添加正确注解,指定后端协议版本为HTTP/2并关联SSL证书:
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-backend-protocol-version: "HTTP2"
      service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-west-2:123456789012:certificate/abc123-xyz456"
      service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
    

另外,若NLB到后端容器用HTTPS通信,需确保容器侧证书被NLB信任;若用明文HTTP/2(h2c),只要应用支持即可,但生产环境不推荐明文传输。

2. 其他实现方式

方式一:改用AWS Application Load Balancer(ALB)

ALB对HTTP/2的支持更灵活,无需后端必须支持HTTP/2:

  • 前端启用HTTP/2,后端保持HTTP/1.1,ALB会自动完成协议转换
  • 通过ALB Ingress Controller配置的注解示例:
    annotations:
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
      alb.ingress.kubernetes.io/ssl-certificate: "arn:aws:acm:us-west-2:123456789012:certificate/abc123-xyz456"
      alb.ingress.kubernetes.io/http2-enabled: "true"
    

方式二:部署NGINX Ingress Controller

在EKS集群内部署NGINX Ingress,由NGINX处理HTTP/2协议:

  • NGINX前端配置HTTP/2(需绑定SSL证书),后端可转发HTTP/1.1或HTTP/2到容器
  • 前端可挂NLB或ALB做流量入口,此时NLB/ALB仅做四层转发,协议处理由NGINX完成

方式三:校验注解配置正确性

确认你添加的注解是针对Service资源(而非Deployment或Ingress),NLB Controller是通过Service注解配置负载均衡器的。同时确保NLB的监听器为HTTPS端口(443)——NLB不支持明文HTTP/2(h2c),必须通过TLS启用。

3. 应用层运行HTTP/1.1时,能否从NLB层面强制启用HTTP/2?

不行。NLB是四层负载均衡器,后端协议版本需与容器协商——如果后端仅支持HTTP/1.1,NLB无法强制将请求转换成HTTP/2发送给后端。

但可通过中间层实现需求:

  • 用ALB:前端启用HTTP/2,后端用HTTP/1.1,ALB自动完成协议转换
  • 用NGINX Ingress:NGINX接收HTTP/2请求,再以HTTP/1.1转发给后端容器

内容的提问来源于stack exchange,提问作者Yash Sonalia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:28