AKS版本更新后反复出现未知来源的/healthz 404错误求助
问题分析与解决方案
问题核心
AKS集群版本更新后,Ingress Controller频繁收到来自Load Balancer Agent的/healthz路径请求,因后端.NET Core应用未实现该端点,返回404响应。请求IP为集群内部节点IP(如10.240.0.x、10.244.x.x),属于Azure负载均衡器的健康检查流量。
原因解析
当前Ingress配置中,路径规则/(.*)将所有请求(包括/healthz)转发到后端API服务,但该服务未提供/healthz健康检查端点。而Azure负载均衡器会定期向Ingress Controller的公网IP/端口发送健康检查请求,这部分流量被Ingress路由到后端,导致404日志。
解决方案
方案1:修改Ingress配置,拦截健康检查请求
在Ingress规则中添加优先级更高的/healthz精确匹配路径,将其直接路由到Ingress Controller自身的健康检查端点(Ingress Controller默认自带/healthz端点)。修改后的Ingress配置示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-ingress-name namespace: {{ .Values.namespace }} annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: tls: - hosts: - app-stage secretName: your-tls-secret rules: http: paths: # 优先处理/healthz请求,路由到Ingress Controller服务 - path: /healthz pathType: Exact backend: service: name: ingress-nginx-controller # 替换为你的Ingress Controller服务名称 port: number: 80 # 原有业务请求路由规则 - path: /(.*) pathType: Prefix backend: service: name: {{ .Release.Name }}-api-service port: number: 80
方案2:在.NET Core应用中添加健康检查端点
使用ASP.NET Core内置的健康检查中间件实现/healthz端点:
- 在项目中安装NuGet包:
AspNetCore.HealthChecks - 在
Program.cs中配置健康检查:
var builder = WebApplication.CreateBuilder(args); // 添加健康检查服务 builder.Services.AddHealthChecks(); var app = builder.Build(); // 映射/healthz端点 app.MapHealthChecks("/healthz"); // 其他中间件配置... app.Run();
部署更新后的应用后,/healthz请求会返回200健康状态码,消除404日志。
方案3:调整Azure负载均衡器健康检查目标
直接将Azure负载均衡器的健康检查目标指向Ingress Controller Pod的内部健康端口(通常为10254),而非通过Ingress的公网端口。此操作可通过AKS集群的Ingress Controller服务配置调整,确保健康检查流量不经过Ingress规则转发。
验证步骤
- 应用修改后,查看Ingress Controller日志,确认
/healthz请求不再转发到后端API服务,而是返回200响应。 - 检查后端应用日志,确认不再收到
/healthz的404请求。
内容的提问来源于stack exchange,提问作者Mawaz Ejaz
相关产品推荐
相关产品推荐

