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

AWS EKS ALB Ingress控制器下gRPC通信故障排查请求

AWS EKS中gRPC通过ALB通信故障排查

一、Ingress配置校验

  • 核心注解检查:
    • alb.ingress.kubernetes.io/backend-protocol必须设为GRPC(ALB会自动处理前端HTTPS到后端GRPC的协议转换,不能填HTTPS)
    • alb.ingress.kubernetes.io/certificate-arn指向的ACM证书需与Ingress域名完全匹配,且证书部署在ALB所在AWS区域
    • 若启用gRPC健康检查,需添加alb.ingress.kubernetes.io/healthcheck-protocol: GRPC和alb.ingress.kubernetes.io/healthcheck-path: /grpc.health.v1.Health/Check,确保ALB能正确识别Pod健康状态
  • 路径规则校验:Ingress的path需匹配gRPC服务的方法前缀(如/your.package.Service/*)或设为/*覆盖所有gRPC请求,pathType建议使用Prefix

二、Service与Pod连通性检查

  • Service配置验证:
    • Service的selector需与Deployment的Pod标签完全匹配,执行kubectl describe svc <svc-name>查看Endpoints是否存在Pod IP(为空则说明标签不匹配,流量无法转发到Pod)
    • 端口映射需正确:targetPort对应Pod的5051端口,port需与Ingress后端引用的端口名称/数字一致,协议必须为TCP
  • Pod状态排查:
    • 确认Pod处于Running状态且无异常重启,执行kubectl describe pod <pod-name>检查启动事件与健康检查结果
    • 集群内测试gRPC服务可用性:在集群内临时Pod中执行grpcurl -plaintext <pod-ip>:5051 list(若Pod未启用TLS),验证Pod本身的gRPC服务是否正常响应

三、ALB与AWS资源配置检查

  • ALB监听器与目标组:
    • 登录AWS控制台,检查ALB的443端口监听器是否关联正确证书,转发规则指向的目标组是否对应你的Service
    • 目标组健康检查:确认协议为GRPC,路径为/grpc.health.v1.Health/Check,端口为5051;若健康检查失败,ALB会停止向该Pod转发流量
  • 安全组与网络ACL:
    • ALB安全组需允许外部443端口入站,同时允许访问Pod所在子网的5051端口(若用IP模式目标组)或NodePort端口(若用实例模式)
    • EKS节点/Pod所在子网的安全组需允许ALB安全组的流量入站,VPC网络ACL需放行443(外部到ALB)和5051(ALB到Pod)的双向流量

四、客户端侧问题排查

  • Postman配置:确保gRPC请求启用HTTPS,服务器名称(SNI)填写Ingress域名,若使用私有证书需在Postman中导入信任
  • 代码错误分析:
    • 若为证书验证错误:确认客户端信任ALB使用的ACM证书(公共证书无需额外配置,私有证书需导入客户端信任库)
    • 若为连接重置/超时:检查客户端网络是否能访问ALB域名,是否存在防火墙/代理拦截gRPC流量

配置清单参考校验

Deployment关键部分示例

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: grpc-service
        ports:
        - containerPort: 5051
          protocol: TCP
        # 推荐配置gRPC健康检查
        livenessProbe:
          grpc:
            port: 5051
          initialDelaySeconds: 5
        readinessProbe:
          grpc:
            port: 5051
          initialDelaySeconds: 5

Service关键部分示例

apiVersion: v1
kind: Service
spec:
  type: NodePort
  selector:
    app: grpc-service # 与Deployment标签完全匹配
  ports:
  - name: grpc
    port: 5051
    targetPort: 5051
    protocol: TCP

Ingress关键部分示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip # 推荐IP模式,直接转发到Pod
    alb.ingress.kubernetes.io/backend-protocol: GRPC
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:xxxxxx:certificate/xxxxxx
    alb.ingress.kubernetes.io/healthcheck-protocol: GRPC
    alb.ingress.kubernetes.io/healthcheck-path: /grpc.health.v1.Health/Check
spec:
  ingressClassName: alb
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /*
        pathType: Prefix
        backend:
          service:
            name: grpc-service-svc
            port:
              name: grpc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:45:33