C# Jaeger服务:如何在Google Kubernetes上配置?

C# Jaeger服务:如何在Google Kubernetes上配置?,c#,asp.net-core,google-kubernetes-engine,jaeger,opentracing,C#,Asp.net Core,Google Kubernetes Engine,Jaeger,Opentracing,使用Docker Hub的公共映像在Google Kubernetes上创建部署 然后,公开服务类型为LoadBalancer的部署 现在,启动了Jagger UI,它正在工作,但除了Jagger query之外,它不显示任何服务 我已经部署了我的.NETWebAPI应用程序,以便在kubernetes上进行测试 我的应用程序只有一个web API,它在Google Kubernetes引擎上成功运行,并通过负载平衡器服务类型公开。API将所有数据硬编码,不调用任何其他服务或数据库 在项目中使用

使用Docker Hub的公共映像在Google Kubernetes上创建部署

然后,公开服务类型为LoadBalancer的部署

现在,启动了Jagger UI,它正在工作,但除了Jagger query之外,它不显示任何服务

我已经部署了我的.NETWebAPI应用程序,以便在kubernetes上进行测试

我的应用程序只有一个web API,它在Google Kubernetes引擎上成功运行,并通过负载平衡器服务类型公开。API将所有数据硬编码,不调用任何其他服务或数据库

在项目中使用了以下nuget软件包:

Jaeger-版本0.2.2
OpenTracing.Contrib.NetCore-版本0.5.0

我在API的Startup.cs文件中添加了以下代码:

    services.AddSingleton<ITracer>(serviceProvider =>
    {
        //string serviceName = Assembly.GetEntryAssembly().GetName().Name;
        string serviceName = serviceProvider.GetRequiredService<IHostingEnvironment>().ApplicationName;

        ILoggerFactory loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();

        ISampler sampler = new ConstSampler(sample: true);

        string jaegerHost = Environment.GetEnvironmentVariable("jaeger_host");

        var reporter = new RemoteReporter.Builder()
            .WithLoggerFactory(loggerFactory)
            .WithSender(new UdpSender(jaegerHost, 6831, 0)) // todo: 
            .Build();

        ITracer tracer = new Tracer.Builder(serviceName)
            .WithLoggerFactory(loggerFactory)
            .WithSampler(sampler)
            .WithReporter(reporter)
            .Build();

        GlobalTracer.Register(tracer);

        return tracer;
    });

    services.AddOpenTracing();
services.AddSingleton(serviceProvider=>
{
//字符串serviceName=Assembly.GetEntryAssembly().GetName().Name;
字符串serviceName=serviceProvider.GetRequiredService().ApplicationName;
ILoggerFactory loggerFactory=serviceProvider.GetRequiredService();
ISampler sampler=新ConstSampler(样本:真);
字符串jaegerHost=Environment.GetEnvironmentVariable(“jaeger_主机”);
var reporter=new RemoteReporter.Builder()
.带loggerFactory(loggerFactory)
.Wissender(新UdpSender(jaegerHost,6831,0))//todo:
.Build();
ITracer tracer=新tracer.Builder(serviceName)
.带loggerFactory(loggerFactory)
.带取样器(取样器)
.WithReporter(记者)
.Build();
GlobalTracer.寄存器(跟踪器);
返回跟踪器;
});
AddOpenTracing();
jaegerHost环境变量被分配所创建的jaeger服务的IP

问题是如何以及在何处进行更改,以便我的应用程序服务在Jaeger UI中可用,以便我可以看到它的痕迹


我被困在这里,有人能帮我继续吗?

jaeger代理服务应该是这样的

apiVersion: v1
kind: Service
metadata:
  name: jaeger-agent
  namespace: jaeger
  labels:
    app: jaeger
    app.kubernetes.io/name: jaeger
    app.kubernetes.io/component: agent
spec:
  type: LoadBalancer
  ports:
  - name: agent-compact
    port: 6831
    protocol: UDP
    targetPort: 6831
  - name: agent-binary
    port: 6832
    protocol: UDP
    targetPort: 6832
  - name: agent-configs
    port: 5778
    protocol: TCP
    targetPort: 5778
  selector:
    app.kubernetes.io/name: jaeger
    app.kubernetes.io/component: all-in-one
不要使用IP,请使用FQDN。 首先,尝试对
jaegerHost

string jaegerHost = "jaeger-agent.jaeger";
其中
jaeger代理
-服务名称,
jaeger
-服务名称空间


另外,您应该创建
jaeger收集器
服务

您的应用程序是否由单独部署的前端和后端部分组成?据我所知,您的前端吊舱完成了它们的工作,并且您能够通过LoadBalancer服务成功地公开它们。他们是否正在与一些后端播客通信?您是否定义了任何其他服务来将后端吊舱公开给前端吊舱?@mario我的应用程序只有一个web API,它在Google Kubernetes引擎上成功运行,并通过负载平衡器服务类型公开。API将所有数据硬编码,不调用任何其他服务或数据库。但是,该服务在Jagger UI上不可见。@mario请检查问题“jaegerHost环境变量已分配创建的jaeger服务的IP”中的我的更新。-在本文中,您是指kubernetes
服务
?你能不能再多说一点你是如何在kubernetes上部署它的?它是由
部署
管理还是由
状态集
管理?我不确定您是否不必通过
jaeger_host
env var将
jaegerHost
设置为
Pod
的FQDN。。。我想它需要能够绑定到主机地址。甚至localhost都可能是正确的值?还有一个细节。。。您是否如您在问题中所述设置了“jaeger_host”环境变量或
jaegerHost