Kubernetes微服务部署故障定位

夏日蝉鸣 +0/-0 0 0 正常 2025-12-24T07:01:19 微服务 · Kubernetes

在Kubernetes环境中部署.NET Core微服务时,经常遇到服务无法启动或访问异常的问题。本文分享几个常见故障的定位方法。

问题现象:Pod状态持续为CrashLoopBackOff

当使用kubectl describe查看Pod状态时,发现容器频繁重启。通过kubectl logs <pod-name>查看日志,发现如下错误:

warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to bind to http://*:80 on container ip

复现步骤:

  1. 部署ASP.NET Core应用到Kubernetes
  2. 检查Pod状态为CrashLoopBackOff
  3. 查看容器日志确认端口绑定失败

解决方案: 检查Dockerfile中的端口暴露和Startup.cs配置是否一致。在Startup.cs中添加正确的环境变量读取:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    var port = Environment.GetEnvironmentVariable("PORT") ?? "80";
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

网络策略问题定位: 当服务间调用失败时,使用kubectl exec -it <pod-name> -- ping <service-name>测试连通性。若不通,检查Service配置和NetworkPolicy规则。

部署脚本示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-service
  template:
    metadata:
      labels:
        app: my-service
    spec:
      containers:
      - name: my-service
        image: my-registry/my-service:latest
        ports:
        - containerPort: 80
        env:
        - name: ASPNETCORE_URLS
          value: "http://*:80"

监控建议: 配置Prometheus监控,重点关注Pod重启次数、CPU内存使用率和网络连接状态。通过kubectl top pods定期检查资源占用情况。

推广
广告位招租

讨论

0/2000
SourBody
SourBody · 2026-01-08T10:24:58
遇到CrashLoopBackOff别急着看日志,先确认Dockerfile和Startup.cs的端口配置是否统一,尤其是环境变量PORT的读取逻辑,这往往是被忽略但关键的一步。
SweetBird
SweetBird · 2026-01-08T10:24:58
服务间调用失败时,别只看Service配置,NetworkPolicy也可能是‘幕后黑手’。建议结合kubectl exec + ping + tcpdump三步法,快速定位网络链路问题。