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

Jaeger Collector Ingress配置异常:外部应用无法上报Trace

解决外部应用上报Jaeger Trace失败的问题

核心问题分析

Jaeger Collector的4317端口为gRPC协议,而默认Ingress通常仅支持HTTP/1.1,无法处理gRPC流量;另外,直接修改K8s YAML会被Helm升级覆盖,且可能遗漏协议适配等关键配置。

步骤1:用Helm Values规范配置Ingress(杜绝手动改YAML)

不要直接修改K8s资源,通过Helm values配置Collector的Ingress,确保配置持久化且符合Chart规则:

  1. 创建自定义配置文件(比如jaeger-custom-values.yaml):
collector:
  ingress:
    enabled: true
    hosts:
      - collector.example.com
    ports:
      - port: 80
        targetPort: 4318  # 若用OTLP HTTP选此端口;用gRPC则改为4317
    annotations:
      # Nginx Ingress适配配置,根据所选端口调整
      # 若用4317(gRPC):
      # nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
      # nginx.ingress.kubernetes.io/ssl-redirect: "false"
      # 若用4318(OTLP HTTP):
      nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
  1. 执行Helm升级应用配置:
helm upgrade jaeger jaegertracing/jaeger -n observability -f jaeger-custom-values.yaml

步骤2:匹配.NET应用的OTLP导出器配置

根据所选端口,调整.NET应用的OpenTelemetry配置:

情况A:使用OTLP HTTP(新手推荐,Ingress配置更简单)

修改导出器指向HTTP协议的4318端口,注意必须带/v1/traces路径:

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddOtlpExporter(options =>
        {
            options.Endpoint = new Uri("http://collector.example.com/v1/traces");
            options.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
        }));

情况B:使用OTLP gRPC(需Ingress支持gRPC)

若坚持用4317端口,需同时满足:

  1. Ingress已添加nginx.ingress.kubernetes.io/backend-protocol: "GRPC"注解
  2. .NET应用配置gRPC导出器:
builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddOtlpExporter(options =>
        {
            options.Endpoint = new Uri("http://collector.example.com:80");
            options.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.Grpc;
        }));

注:部分Ingress Controller要求gRPC使用HTTPS,若80端口不通,可尝试配置TLS改用443端口。

步骤3:排查Ingress流量转发问题

  1. 确认Ingress绑定状态:
kubectl get ingress -n observability

检查ADDRESS字段是否有值,确保Ingress已关联负载均衡器。
2. 查看Ingress Controller日志(以Nginx为例):

kubectl logs -n ingress-nginx deployment/ingress-nginx-controller

搜索collector.example.com相关日志,排查是否存在协议不匹配、端口转发错误等信息。
3. 模拟外部流量测试:
若用OTLP HTTP,用curl验证连通性:

curl -X POST http://collector.example.com/v1/traces \
  -H "Content-Type: application/x-protobuf" \
  -d "$(echo '{}' | base64)"

返回400属于正常(数据格式无效),若返回502/503则说明Ingress转发失败。

常见坑点

  • 直接修改K8s YAML会被Helm覆盖,必须通过Helm values管理配置。
  • 4317是gRPC端口,不能用HTTP客户端访问,需严格匹配导出器协议。
  • 部分云厂商Ingress默认禁用HTTP/2,需添加nginx.ingress.kubernetes.io/http2-push-preload: "true"注解开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:39