Spring Boot在K8s中存活/就绪探针返回404问题求助
Spring Boot 2.5.12 与 Spring Cloud Sleuth 共存时 Kubernetes 探针端点404问题
问题描述
我的Spring Boot应用基于2.5.12版本父依赖,部署在Kubernetes环境中。按照Spring Boot官方文档,K8s环境下应该自动启用livenessProbe和readinessProbe,并通过/actuator/health/liveness和/actuator/health/readiness端点暴露,但实际调用这两个端点时返回404。
排查过程
- 确认livenessState和readinessState组件已启用,但健康组未启用
- 调试发现
org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration.HealthEndpointGroupsBeanPostProcessor#postProcessAfterInitialization方法未生效,原因是不存在HealthEndpointGroups类型的Bean - 本地添加
KUBERNETES_SERVICE_HOST环境变量模拟K8s环境,问题依旧 - 移除Spring Cloud Sleuth及Zipkin依赖后,探针功能恢复正常
相关配置
父依赖配置
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.12</version> </parent>
应用配置yaml
management: server: port: 9235 endpoints: web: exposure: include: ${MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE:*}
Kubernetes探针配置
readinessProbe: httpGet: path: /actuator/health/readiness port: {{ .Values.deployment.managementPort }} failureThreshold: 3 initialDelaySeconds: 150 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 10 livenessProbe: httpGet: path: /actuator/health/liveness port: {{ .Values.deployment.managementPort }} failureThreshold: 3 initialDelaySeconds: 180 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 10
原因分析
Spring Cloud Sleuth(对应Spring Boot 2.5.x的版本)在健康端点自动配置逻辑上存在冲突,会覆盖Spring Boot默认的HealthEndpointGroupsBean初始化流程,导致K8s环境下的liveness/readiness健康组无法正常创建,进而对应的探针端点无法暴露。
解决方法
1. 显式配置健康组
在application.yaml中手动指定健康组配置,强制启用liveness和readiness分组:
management: health: livenessstate: enabled: true readinessstate: enabled: true groups: liveness: livenessState readiness: readinessState
2. 调整依赖或排除冲突配置
- 确认Spring Cloud版本与Spring Boot匹配:Spring Boot 2.5.x对应Spring Cloud 2020.0.x(代号Ilford),版本不兼容会加剧配置冲突。
- 尝试排除Sleuth中影响健康端点的自动配置类(注意:排除后需手动配置Sleuth核心功能,避免链路追踪失效):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-autoconfigure</artifactId> </exclusion> </exclusions> </dependency>
3. 确保Actuator端点正确暴露
虽然已有include: *配置,但可以显式指定包含健康相关端点,避免变量替换异常:
management: endpoints: web: exposure: include: health,liveness,readiness,info,metrics
4. 验证K8s环境识别
确保应用在K8s环境中能检测到KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT两个环境变量,Spring Boot需要这两个变量触发K8s探针的自动配置逻辑。
内容的提问来源于stack exchange,提问作者Holinc
相关产品推荐
相关产品推荐

