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

AWS NLB实现gRPC流量TLS终止遇阻,求可行配置示例

AWS NLB 终止gRPC TLS的最小可行实现方案

关键配置要点(解决Received RST_STREAM with error code 1核心原因)

你的错误大概率是ALPN策略未正确配置导致的——gRPC依赖HTTP/2,若NLB和客户端协商出HTTP/1.1,就会触发流重置。必须满足以下条件:

  • 启用NLB的ALPN策略为HTTP2Preferred或HTTP2Only
  • 使用支持TLS 1.2+的SSL策略(推荐TLS 1.3兼容版本)
  • 后端服务监听HTTP/2(NLB终止TLS后会以HTTP/2转发流量)
  • 使用同区域AWS ACM的有效证书

最小可行示例(基于AWS Load Balancer Controller)

1. 前提准备

  • EKS集群已部署AWS Load Balancer Controller(版本≥v2.4)
  • AWS ACM中存在与NLB访问域名匹配的有效证书(需与NLB同区域)

2. gRPC后端Deployment示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpc-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grpc-server
  template:
    metadata:
      labels:
        app: grpc-server
    spec:
      containers:
      - name: grpc-server
        image: docker.io/grpc/java-example-hostname:latest # 官方gRPC测试镜像
        ports:
        - containerPort: 50051
          name: grpc
          protocol: TCP

3. NLB TLS终止Service示例

apiVersion: v1
kind: Service
metadata:
  name: grpc-nlb-service
  annotations:
    # 指定使用NLB
    service.beta.kubernetes.io/aws-load-balancer-type: external
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
    # 配置ACM证书ARN(替换为你的证书ARN)
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-west-2:123456789012:certificate/abcdef-1234-5678-90ab-cdef12345678"
    # 核心:配置ALPN策略
    service.beta.kubernetes.io/aws-load-balancer-alpn-policy: "HTTP2Preferred"
    # 配置SSL协商策略(TLS1.3兼容版本)
    service.beta.kubernetes.io/aws-load-balancer-ssl-negotiation-policy: "ELBSecurityPolicy-TLS13-1-2-2021-06"
    # 指定后端协议为HTTP2
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http2
    # 监听端口映射
    service.beta.kubernetes.io/aws-load-balancer-ports: "443"
spec:
  type: LoadBalancer
  ports:
  - port: 443
    targetPort: 50051
    protocol: TCP
    name: https
  selector:
    app: grpc-server

4. 验证与测试

  • 获取NLB访问地址:kubectl get service grpc-nlb-service,复制EXTERNAL-IP对应的域名
  • 控制台验证:进入AWS EC2控制台,确认NLB监听器的ALPN策略、SSL策略配置正确
  • 客户端测试(使用grpcurl):
    grpcurl -d '{"name": "test"}' grpc-nlb.example.com:443 helloworld.Greeter/SayHello
    

常见问题排查

  • 若仍触发RST_STREAM:检查后端Pod是否真的监听HTTP/2,可执行curl -v --http2-prior-knowledge http://<pod-ip>:50051验证
  • 证书问题:确保ACM证书域名与NLB访问域名完全匹配,且证书已完成域名验证
  • 安全组:NLB安全组开放443端口给客户端,后端节点安全组开放50051端口给NLB的IP范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:22:48