是否应该在生产中禁用弹簧启动/云执行器?
Posted
技术标签:
【中文标题】是否应该在生产中禁用弹簧启动/云执行器?【英文标题】:Should spring boot/cloud actuator be disabled in production? 【发布时间】:2020-10-21 11:42:26 【问题描述】:Spring Boot/Cloud Actuator 提供了良好的健康检查指标。但在生产中,我不希望最终用户看到这些指标并获得对应用程序的任何见解。
那么在生产中应该如何处理呢?我应该在生产中删除/禁用执行器还是有更好的方法来处理这个问题。
【问题讨论】:
您可以保护执行器或使用管理端口而不将其暴露给用户 “你可以保护执行器” - 你的意思是可以使用 spring security 来不允许用户访问任何执行器端点?? “使用管理端口而不向用户公开” - 你能详细说明如何做到这一点吗? docs.spring.io/spring-boot/docs/current/reference/html/… 【参考方案1】:这基本上取决于您的要求。 首先,执行器不仅仅是健康检查
即使我们只讨论运行状况检查,在“编排”环境(如 kubernetes)中,您仍可能公开运行状况检查以实施 liveness 探测(即 kubernetes 将保持您的 pod 正常运行,只要健康检查返回 200 OK http 代码)。
你说
我不是最终用户看到这些指标并获得对应用程序的任何见解。
最终用户确实从不使用执行器,但它并不打算由最终用户使用,而是由开发人员和您环境中的各种集成使用。
这是可用于生产的执行器功能的另一个示例,即指标。如果您在部署中有 prometheus,则可以将其配置为抓取所有暴露 /prometheus
端点的 pod,这也是执行器的一个功能。
话虽如此,您可能只想公开部分端点,并可能使用某种身份验证技术保护它们,但这是另一回事。
执行器支持的端点的完整列表是可用的Here。此外,您始终可以创建自定义端点并决定是否要在生产中公开它们。
【讨论】:
【参考方案2】:您可以启用/禁用执行器端点作为扇入/扇出样式。在很多情况下您需要某个端点但不是全部。例如,k8s 可以使用health
端点来进行 rediness/liveness 探测。指标需要很多次等等。
您可以包含端点,然后将显示确切的列表:
management.endpoints.web.exposure.include: env,health,info,metrics,loggers,prometheus
你也可以默认全部禁用:
management.endpoints.enabled-by-default: false
单独控制:
management.endpoint.shutdown.enabled: false
禁用列出的:
management.endpoints.web.exposure.exclude: health
你可以结合之前的 props(参见文档中的优先级),当然你可以保护执行器端点,所以不是每个人都可以访问它们。
Actuator documentation上有详细文档
【讨论】:
【参考方案3】:您可以进行如下配置:
management:
health:
defaults:
enabled: false
endpoint:
health:
enabled: false
更多信息在这里:
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-health-indicators
【讨论】:
以上是关于是否应该在生产中禁用弹簧启动/云执行器?的主要内容,如果未能解决你的问题,请参考以下文章
systemd-自定义启动服务报错-你在生产中遇到过什么印象深刻的错误?
Tailwind CSS Nuxt 禁用清除选项在生产中引发错误