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
- Service的
- Pod状态排查:
- 确认Pod处于
Running状态且无异常重启,执行kubectl describe pod <pod-name>检查启动事件与健康检查结果 - 集群内测试gRPC服务可用性:在集群内临时Pod中执行
grpcurl -plaintext <pod-ip>:5051 list(若Pod未启用TLS),验证Pod本身的gRPC服务是否正常响应
- 确认Pod处于
三、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
相关产品推荐
相关产品推荐

