AKS部署就绪探针持续返回500状态码导致部署失败求助
.NET Web应用K8s就绪探针持续返回500导致部署失败的排查思路
我们在部署一款.NET Web应用时遇到就绪探针持续返回500状态码,导致部署失败。就绪探针配置如下:
readinessProbe: httpGet: path: /page/ping.aspx port: 443 scheme: HTTPS initialDelaySeconds: 15 timeoutSeconds: 2 periodSeconds: 5 successThreshold: 1 failureThreshold: 12
对应的Ping.aspx.cs代码:
/// <summary> /// Page load event handler. /// </summary> /// <param name="sender">The event sender object.</param> /// <param name="e">The event arguments.</param> protected void Page_Load(object sender, EventArgs e) { if (this.IsPostBack) { stopWatch.Reset(); } else if (!stopWatch.IsRunning) { stopWatch.Start(); } }
已验证构建产物与容器内二进制文件一致,应用未完全启动即出现故障,仅能获取kubectl describe日志和本地IIS的u_*.log日志。
排查步骤
- 检查
stopWatch变量定义:代码里直接用了stopWatch但未看到声明,要是这个变量没初始化(比如没声明成static或者没在Page实例里初始化),首次请求肯定会触发NullReferenceException,直接导致500错误。这是最优先要查的点。 - 深挖容器内错误日志:
- 进入容器,找到IIS日志路径(一般是
C:\inetpub\logs\LogFiles),查看对应站点的日志,看500请求的具体子错误码(比如500.19是配置错误,500.0是ASP.NET运行时异常)。 - 检查
web.config里的自定义错误配置,如果开了<customErrors mode="On">,会把真实错误藏起来,临时改成<customErrors mode="Off" />就能看到具体异常。
- 进入容器,找到IIS日志路径(一般是
- 验证容器内HTTPS配置:探针用HTTPS访问,得确认容器里的IIS有没有正确配置SSL证书、绑定443端口。要是证书无效或者端口没绑对,请求会直接失败返回500。
- 手动测试探针路径:
- 容器启动后,进入容器用
Invoke-WebRequest或者curl(容器里有的话)访问https://localhost/page/ping.aspx,看返回的具体错误信息。 - 本地IIS能正常跑的话,对比容器里的IIS配置:应用程序池的.NET版本、权限、身份,还有站点绑定,确保和本地一致,尤其是应用程序池的身份有没有权限访问应用文件。
- 容器启动后,进入容器用
- 排查应用启动依赖:要是应用启动依赖外部服务(比如数据库、缓存),而且没处理依赖未就绪的情况,可能会导致应用初始化失败,探针请求就会返回500。去
u_*.log里找有没有初始化相关的异常。 - 临时调整探针参数验证:虽然你说调参数没用,但可以试试把
initialDelaySeconds调大到30或60,排除应用启动慢导致探针检测太早;另外临时把scheme改成HTTP(得确保容器里IIS绑了80端口),验证是不是HTTPS配置的问题。
内容的提问来源于stack exchange,提问作者xchen218
相关产品推荐
相关产品推荐

