在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
复现步骤:
- 部署ASP.NET Core应用到Kubernetes
- 检查Pod状态为CrashLoopBackOff
- 查看容器日志确认端口绑定失败
解决方案: 检查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定期检查资源占用情况。

讨论