You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:30:46