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

AKS集群中Nginx Ingress暴露OpenTelemetry Collector的问题

问题分析与解决方案

你的问题核心在于gRPC协议特性与Nginx Ingress默认配置不匹配,导致请求无法正确转发到OpenTelemetry Collector。具体原因和解决方法如下:

核心原因

  1. gRPC依赖HTTP/2:OTel Collector的5555端口是gRPC接收器,gRPC基于HTTP/2协议传输,而Nginx Ingress默认未明确启用HTTP/2支持,会导致协议不兼容。
  2. 路径匹配不兼容:OTel Collector的gRPC服务使用标准Protobuf路径(如/opentelemetry.proto.collector.trace.v1.TraceService/Export),你配置的/otel-collector前缀无法匹配这些原生路径,导致请求被拦截或转发错误。

解决方案

方案1:使用独立主机名转发(推荐)

直接绑定专属主机名到OTel Collector服务,避免路径前缀的兼容性问题,这是gRPC服务暴露的常规方式:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: obs-dev-ingress-otlp
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false" # 未启用HTTPS时保留,生产环境建议设为"true"
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC" # 明确告知Nginx后端是gRPC服务
    nginx.ingress.kubernetes.io/http2-push-preload: "true" # 强制启用HTTP/2支持
spec:
  ingressClassName: default
  rules:
  - host: otel-collector.dev-obs-k8.he.net
    http:
      paths:
      - path: /
        backend:
          service:
            name: otel-collector-external
            port:
              number: 5555
        pathType: Prefix

配置完成后,可通过grpc://otel-collector.dev-obs-k8.he.net(或HTTP协议的http://,生产环境推荐HTTPS)向Collector发送gRPC请求。

方案2:保留路径前缀(需客户端配合)

如果必须使用/otel-collector前缀,需配置Nginx路径重写规则,剥离前缀后转发到Collector的原生gRPC路径:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: obs-dev-ingress-otlp
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
    nginx.ingress.kubernetes.io/http2-push-preload: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2 # 剥离/otel-collector前缀
spec:
  ingressClassName: default
  rules:
  - host: dev-obs-k8.he.net
    http:
      paths:
      - path: /otel-collector(/|$)(.*)
        backend:
          service:
            name: otel-collector-external
            port:
              number: 5555
        pathType: ImplementationSpecific

此时客户端需要将请求发送到带前缀的路径,例如:http://dev-obs-k8.he.net/otel-collector/opentelemetry.proto.collector.trace.v1.TraceService/Export,Ingress会自动将路径重写为原生gRPC路径转发到后端。

验证步骤

使用grpcurl工具验证连通性:

# 方案1验证
grpcurl -plaintext otel-collector.dev-obs-k8.he.net:80 list

# 方案2验证
grpcurl -plaintext dev-obs-k8.he.net:80 -path-prefix=/otel-collector list

若能返回OTel Collector的gRPC服务列表,说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:37:33