SpringBoot应用存活探针
# 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
# 修改端口
management:
server:
port: 8081
笔记
实践中无法修改,不确定是否是因为使用的框架 WEB 容器为 Undertow
有关,目前只好通过反向代理时拦截 /actuator
的请求。
- 警惕 Spring Boot Actuator 引发的安全问题 - 腾讯云开发者社区 - 腾讯云 (opens new window)
- Production-ready Features (opens new window)
# 探针接口
存活探针:/actuator/health/liveness
就绪探针:/actuator/health/readiness
存在问题
容器探测只是探测服务是否达到了可用的状态,没有考虑到注册到注册中心的服务是否可用,因此会出现短暂服务不可用。解决办法参考【参考】
推荐配置(快速设置版)
参数 | 说明 |
---|---|
Liveness | 使用 TCP 方式,延迟时间尽量贴近应用启动时间,成功阈值为 1,失败阈值为 3。 |
Readiness | 使用 HTTP 方式,延迟时间需大于应用启动时间,成功阈值为 1,失败阈值为 1。 |
超时时间 | 通常采用默认 1 秒即可,如果访问的接口预期内大于 1 秒,则适当延长。 |
检查周期 | 通常用于控制探测的灵敏度,理论上如果高频率的检查不会对业务有实质影响,则检查周期越短越好。但是,如果 Liveness 的检查周期太短,可能会让业务容器更容易重启。因此,可以根据计算公式(节点最大可容忍故障时间 / 3),来确定 Liveness 的检查周期。例如,单个故障实例最大可容忍 30 秒内不重启,则检查周期设置为 10 秒。因此,Readiness 检查周期可设置为 1 秒,Liveness 检查周期根据实际情况设置,如果没有特殊需求,可保持默认的 30 秒。 |
# 优雅关机
todo.
参考:Getting Started | Spring on Kubernetes (opens new window)
# 拦截请求
/actuator/*
是一个很危险的接口,如 /actuator/logfile
可以查看日志,如果日志中暴露了敏感信息,将极其危险,因此直接禁止用户访问 /actuator/*
最为稳妥。
在 ingress 中配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gitlab-ingress
namespace: gitlab
spec:
rules:
- host: gitlab.xxx.com.cn
http:
paths:
- backend:
serviceName: gitlab
servicePort: 80
path: /
- backend:
serviceName: blocked
servicePort: 80
path: /actuator/
- backend:
serviceName: gitlab-deny
servicePort: 80
path: /explore/projects/
- backend:
serviceName: gitlab-deny
servicePort: 80
path: /help/
tls:
- hosts:
- gitlab.xxx.com.cn
secretName: xxx.com.cn
这里的 blocked 服务实际上是没有的,当用户访问时会返回一个空白页。
# 参考
- springboot - spring boot 应用在 k8s 中的健康检查(二)_个人文章 - SegmentFault 思否 (opens new window)
- Production-ready Features (opens new window)
- 云原生翘楚 KubeSphere 和 知名开源项目 Pig 最佳实践 (opens new window)
- 健康检查的参数有哪些以及如何设置健康检查_Serverless 应用引擎 - 阿里云帮助中心 (opens new window)
- 如何为 SpringBoot 应用设置健康检查_Serverless 应用引擎 - 阿里云帮助中心 (opens new window)
上次更新: 2023/11/17, 11:59:18