Azure AKS中Application Gateway for Containers健康检查间隔配置问题解析
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
问题背景
在Azure Kubernetes Service(AKS)环境中使用Application Gateway for Containers(AGfC)时,用户发现ALB控制器在进行健康检查时存在一个关键问题:即使通过HealthCheckPolicy资源显式设置了健康检查间隔(interval)参数,控制器仍然会以每秒多次的频率发送健康检查请求,而不会遵循配置的间隔时间。
问题现象
用户在使用AGfC的ALB控制器(v0.6.3)时,配置了如下的健康检查策略:
apiVersion: alb.networking.azure.io/v1
kind: HealthCheckPolicy
metadata:
name: nginx-health-check-policy
spec:
default:
interval: 15s # 显式设置15秒间隔
timeout: 3s
healthyThreshold: 1
unhealthyThreshold: 1
protocol: HTTP
http:
path: /
然而,从后端Nginx服务的日志中可以观察到,健康检查请求实际上以每秒多次的频率到达:
10.225.0.4 - - [08/Feb/2024:06:58:52 +0000] "GET / HTTP/1.1" 200 615
10.225.0.5 - - [08/Feb/2024:06:58:52 +0000] "GET / HTTP/1.1" 200 615
10.225.0.4 - - [08/Feb/2024:06:58:53 +0000] "GET / HTTP/1.1" 200 615
10.225.0.5 - - [08/Feb/2024:06:58:53 +0000] "GET / HTTP/1.1" 200 615
问题分析
经过Azure工程团队确认,这个问题是由于ALB控制器内部存在一个默认的健康检查间隔设置,该默认值会覆盖用户在HealthCheckPolicy资源中显式配置的interval参数。这种设计导致了即使用户明确指定了健康检查间隔,系统仍然会使用更频繁的默认检查频率。
解决方案
Azure团队已经在ALB控制器v1.4.14版本中修复了这个问题。新版本中:
- 用户配置的健康检查间隔参数将被正确识别和应用
- 系统不再使用内部默认值覆盖用户配置
- 修复是向后兼容的,用户无需修改现有配置
最佳实践建议
对于使用AGfC的健康检查功能,建议:
- 确保使用v1.4.14或更高版本的ALB控制器
- 合理设置健康检查间隔,平衡及时发现故障和减少后端负载之间的关系
- 对于关键服务,可以适当增加healthyThreshold和unhealthyThreshold的值,避免因短暂波动导致服务状态频繁切换
- 定期检查后端服务的日志,确认健康检查行为符合预期
总结
健康检查是负载均衡器的重要功能,合理的检查频率既能保证服务的可用性,又能避免给后端带来不必要的负载。Azure团队及时修复了AGfC中健康检查间隔配置不生效的问题,提升了产品的可用性和用户体验。用户升级到新版本后即可获得修复后的行为。
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考