Spring Boot Admin详情页右侧列溢出屏幕问题求助
我帮你梳理几个可行的解决方案,比你每次手动修改CSS要靠谱得多:
一、从源头控制微服务暴露的元数据
问题根源是K8s注入的kubectl.kubernetes.io/last-applied-configuration这类大体积元数据被Spring Boot的Actuator/info端点暴露了,最终被SBA读取并渲染。我们可以先在服务端过滤这些字段:
1. 快速关闭不必要的元数据收集
在每个微服务的application.yml里添加配置,直接关闭环境变量或K8s相关元数据的收集:
management: info: env: enabled: false # 关闭环境变量的自动收集,避免把K8s注入的大字段带到info里 kubernetes: enabled: false # 如果你用了spring-cloud-kubernetes,关闭K8s专属元数据收集
这个方式最直接,能立刻减少/info返回的数据量。
2. 精准过滤特定字段
如果还需要保留部分K8s元数据,可以自定义InfoContributor来过滤掉大字段:
import org.springframework.boot.actuate.info.Info; import org.springframework.boot.actuate.info.InfoContributor; import org.springframework.cloud.kubernetes.actuate.info.KubernetesInfoContributor; import org.springframework.stereotype.Component; import java.util.Map; import java.util.stream.Collectors; @Component public class FilteredK8sInfoContributor implements InfoContributor { private final KubernetesInfoContributor delegate; // 注入默认的K8s信息收集器 public FilteredK8sInfoContributor(KubernetesInfoContributor delegate) { this.delegate = delegate; } @Override public void contribute(Info.Builder builder) { Info.Builder tempBuilder = new Info.Builder(); delegate.contribute(tempBuilder); // 获取默认收集的K8s元数据 Map<String, Object> k8sMetadata = tempBuilder.build().get("kubernetes", Map.class); // 过滤掉last-applied-configuration这个大字段 Map<String, Object> filteredMetadata = k8sMetadata.entrySet().stream() .filter(entry -> !entry.getKey().equals("last-applied-configuration")) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); // 把过滤后的元数据放回info builder.withDetail("kubernetes", filteredMetadata); } }
这样既能保留有用的K8s信息,又能去掉导致UI崩坏的大字段。
二、在Spring Boot Admin端控制显示的元数据
如果不想修改每个微服务的配置,可以直接在SBA服务端配置过滤规则:
1. 用配置指定显示/隐藏的字段
SBA 2.1.3支持通过配置来控制info字段的显示,在SBA的application.yml里添加:
spring: boot: admin: ui: info: # 只显示指定的K8s元数据字段,比如名称和命名空间 include: kubernetes.name,kubernetes.namespace # 或者直接排除不需要的大字段 exclude: kubernetes.last-applied-configuration
配置生效后,SBA就只会渲染你指定的元数据,不会再加载那个大体积的配置字段。
2. 持久化自定义CSS(替代手动修改)
如果上面的配置不生效,你可以把CSS修改持久化到SBA里,不用每次手动改浏览器样式:
直接在SBA的application.yml里注入自定义CSS片段:
spring: boot: admin: ui: custom-css: | .instances__view section { max-width: 75%; overflow-x: auto; /* 内容过长时自动显示水平滚动条 */ }
重启SBA后,这个样式会自动生效,页面右侧列就不会溢出屏幕,而且会出现滚动条。
三、从K8s层面停止注入大字段
如果这些元数据是通过K8s的Downward API注入到Pod里的,你可以检查Deployment的配置,直接移除kubectl.kubernetes.io/last-applied-configuration的注入规则。比如修改Deployment的spec.template.spec部分,删除对应的env或volumeMounts配置,从根源上阻止这个大字段进入服务的环境变量。
内容的提问来源于stack exchange,提问作者Bill

