如何禁用quarkus-kubernetes-config的敏感配置日志输出
Quarkus集成Kubernetes ConfigMap时敏感信息打印到控制台的解决方法
问题原因
之前调整okhttp3.internal.platform.Platform日志级别未生效,核心原因有两点:
- 输出ConfigMap、Secret明文的日志并非来自该类,主要来源是Quarkus kubernetes-config扩展自带的配置源加载日志,以及fabric8 Kubernetes客户端、OkHttp日志拦截器打印的API请求响应内容
- 之前编写的日志配置YAML缩进错误,category、console节点未作为log的子节点配置,所有日志级别调整规则根本没有被Quarkus加载生效
需要调整的配置项
按以下规则修改配置即可完全阻止敏感信息输出:
- 关闭kubernetes-config扩展启动时的配置源内容打印:将
quarkus.kubernetes-config.log-config-sources设为false。该配置默认值为true,会在启动时以INFO级别打印所有从ConfigMap、Secret拉取到的完整键值对,是敏感信息泄露的最主要来源 - 调整正确的日志类别级别,覆盖所有可能打印配置内容的日志输出:
- 将
io.fabric8.kubernetes.client类别的日志级别设为WARN,避免打印Kubernetes API的请求响应体(其中包含ConfigMap、Secret的完整明文) - 将
okhttp3.logging.HttpLoggingInterceptor类别的日志级别设为WARN,拦截HTTP层输出的明文请求响应内容 - 修正YAML配置缩进,确保所有日志规则能被Quarkus正常识别加载
- 将
- (可选)如果之前开启了配置DEBUG日志,将
io.quarkus.config类别的日志级别调整为INFO及以上,避免DEBUG级别下打印所有加载到的配置值
修正后的完整配置参考
quarkus: application: name: myservice log: category: "io.fabric8.kubernetes.client": level: WARN "okhttp3.logging.HttpLoggingInterceptor": level: WARN "io.quarkus.config": level: INFO console: json: false color: false kubernetes-config: enabled: true # 关闭配置源明文打印 log-config-sources: false config-maps: myservice secrets: ~: my-credentials enabled: true smallrye-graphql: ui: enable: true always-include: true show-runtime-exception-message: io.quarkus.security.ForbiddenException swagger-ui: always-include: true pagination: defaultPageNumber: 1 defaultPageSize: 1000
配置修改后重启应用即可生效,启动阶段不会再输出ConfigMap、Secret中存储的敏感字段内容。
内容的提问来源于stack exchange,提问作者lacrosse1991
相关产品推荐
相关产品推荐

