Azure AKS集群Nginx Ingress如何开启HTTP2支持gRPC请求
问题解决方案
无需修改Nginx Ingress控制器的全局配置,仅通过给当前Ingress资源新增注解即可解决,属于无侵入的轻量配置方案。
配置修改说明
你只需要在现有Ingress的metadata.annotations字段中新增1个核心注解即可:
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
这个注解会直接告知Nginx Ingress后端服务使用gRPC协议,自动启用HTTP2与后端通信,无需手动调整其他HTTP2相关参数,你遇到的Unexpected HTTP/1.x request报错本质就是Ingress默认用HTTP1.1转发请求给后端gRPC服务导致的。
修改后的完整Ingress配置参考:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: namespace: infrastructure--buildfarm name: buildfarm-ingress annotations: kubernetes.io/ingress.class: nginx-internal cert-manager.io/cluster-issuer: selfsigned-cluster-issuer # 新增核心配置:指定后端为gRPC协议,自动适配HTTP2 nginx.ingress.kubernetes.io/backend-protocol: "GRPC" # 如果你没有特殊路径重写需求,以下两个注解可以直接删除,gRPC不需要重写路径 # nginx.ingress.kubernetes.io/rewrite-target: /$1 # nginx.ingress.kubernetes.io/use-regex: "true" spec: rules: - host: buildfarm.dev.azr.internal.mydomain.com http: paths: - backend: serviceName: aks-buildfarm servicePort: 8980 # 删除正则路径,直接匹配所有路径即可 path: /
你遗漏的配置点
- Nginx Ingress默认转发请求时使用HTTP1.1协议,没有显式指定后端为GRPC协议的情况下,不会主动启用HTTP2和后端通信,这是本次报错的核心原因
- 原有配置中的路径重写规则不适用于gRPC场景,gRPC请求自带标准服务路径标识,重写反而可能导致路径匹配异常,无特殊需求可以直接删除相关配置
验证方法
配置更新完成后,等待10秒左右让Nginx配置同步,再重新执行你的bazel构建命令即可正常发起请求。
内容的提问来源于stack exchange,提问作者M80
相关产品推荐
相关产品推荐

