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

如何在无头.NET Worker Service中暴露gRPC健康检查?

.NET 8 Worker Service 配置gRPC健康检查(适配Kubernetes探针)

实现步骤

1. 安装必要NuGet包

在项目中执行以下命令添加依赖:

dotnet add package Grpc.AspNetCore.HealthChecks
dotnet add package Grpc.AspNetCore.Server

2. 修改Program.cs配置

使用HostApplicationBuilder添加Kestrel gRPC服务器支持,并注册健康检查服务,无需改动原有Worker逻辑:

var builder = Host.CreateApplicationBuilder(args);

// 配置Kestrel监听gRPC端口(仅启用HTTP/2,符合gRPC要求)
builder.WebHost.ConfigureKestrel(options =>
{
    options.ListenAnyIP(50051, o => o.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2);
});

// 注册gRPC及健康检查服务
builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks()
                .AddCheck("worker-self", () => Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckResult.Healthy());

// 保留原有Worker服务注册
builder.Services.AddHostedService<Worker>();

var host = builder.Build();
await host.RunAsync();

3. Kubernetes探针配置

在Deployment的Pod模板中配置gRPC类型的存活/就绪探针,指定gRPC健康检查的标准服务名:

spec:
  containers:
  - name: worker-service
    image: your-worker-image:tag
    ports:
    - containerPort: 50051
      name: grpc
    livenessProbe:
      grpc:
        port: 50051
        service: grpc.health.v1.Health
      initialDelaySeconds: 10
      periodSeconds: 5
    readinessProbe:
      grpc:
        port: 50051
        service: grpc.health.v1.Health
      initialDelaySeconds: 5
      periodSeconds: 3

关键说明

  • 最小开销:仅在原有Worker Host基础上添加Kestrel服务器配置,无需将Worker重构为ASP.NET Core Web应用。
  • 协议要求:gRPC依赖HTTP/2,因此Kestrel需明确指定监听端口使用Http2协议。
  • 标准兼容:Kubernetes gRPC探针需指定官方标准的健康检查服务名grpc.health.v1.Health才能正常识别。
  • 无干扰:Worker后台任务与gRPC服务器由同一Host托管,互不影响原有业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:03:25