2026/9/21 21:43:34

cAdvisor Web UI 使用与认证配置指南:容器实时监控页面与 HTTP Basic/Digest 认证实战

cAdvisor Web UI 使用与认证配置指南:容器实时监控页面与 HTTP Basic/Digest 认证实战 cAdvisor Web UI 使用与认证配置指南容器实时监控页面与 HTTP Basic/Digest 认证实战【免费下载链接】cadvisorAnalyzes resource usage and performance characteristics of running containers.项目地址: https://gitcode.com/gh_mirrors/ca/cadvisorcAdvisorContainer Advisor在运行时会暴露一个内置的 Web UI用于实时查看宿主机上所有容器的资源使用情况。本篇指南以 cAdvisor 仓库中的 docs/web.md 为核心围绕 Web UI 的访问方式、/containers监控页面的数据结构以及 HTTP Basic / Digest 两种认证方案的配置方法展开并结合仓库源码说明认证的生效范围、优先级与安全边界。读完本文你将能够独立为 cAdvisor 的 Web 页面开启访问控制并正确评估/api、/metrics等端点暴露的风险。Web UI 概览从端口到容器监控页面cAdvisor 启动后会监听一个 HTTP 端口默认端口为8080见 cmd/cadvisor.go 中的port参数定义Web UI 的访问地址为http://hostname:port/例如本地默认端口即为http://localhost:8080/。从源码看根路径/本身并不直接渲染页面而是通过 cmd/internal/http/handlers.go 中的http.RedirectHandler以307 Temporary Redirect重定向到/containers/页面。该 UI 的核心资源是/containers它导出宿主机上所有容器的实时信息。其页面路径常量定义于 cmd/internal/pages/containers.goconst ContainersPage /containers/当浏览器访问/containers/容器名时服务端会依次做以下事情对应 serveContainersPage 的实现从 URL 路径中解析容器名称通过manager.GetContainerInfo()拉取该容器的信息请求中显式指定NumStats: 60即默认展示最近 60 个采样点的统计数据通过manager.GetMachineInfo()获取宿主机Machine的硬件信息组装父容器面包屑导航parent containers与子容器链接subcontainers列表将数据渲染进 containers.html 模板。页面上的无限内存被定义为maxMemorySize uint64(1 62)超过该阈值的内存限制在页面上显示为unlimited见 containers.go 的printSize/printUnit这与内核在 cgroup 中无上限的表示方式保持一致。CPU 信息则通过printCores毫核转核数、printMaskCPU 亲和性掩码可视化等模板函数渲染。除/containers/外Web UI 还提供另外两个同级别的页面同样以容器运行时维度组织/docker/Docker 容器列表页常量定义于 cmd/internal/pages/docker.go/podman/Podman 容器列表页常量定义于 cmd/internal/pages/podman.go。页面的静态资源jQuery、Bootstrap、containers.js 等通过/static/路径提供由 cmd/internal/pages/static/static.go 中的StaticResource常量注册资源内容以go:embed风格内嵌进二进制见 assets.go部署时无需额外拷贝静态文件。为 Web UI 开启认证两种方案与核心参数cAdvisor 为 Web UI 提供了两种认证方式你可以任选其一HTTP Basic 认证基于htpasswd生成的密码文件HTTP Digest 认证基于htdigest生成的密码文件四个相关命令行参数定义在 cmd/cadvisor.go并通过 docs/runtime_options.md 同步记录参数默认值说明--http_auth_file空HTTP Basic 认证使用的密码文件路径由htpasswd生成--http_auth_realmlocalhostHTTP Basic 认证的 realm 名称--http_digest_file空HTTP Digest 认证使用的密码文件路径由htdigest生成--http_digest_realmlocalhostHTTP Digest 认证的 realm 名称注意两种认证的 realm 默认值都是localhost。对于 Digest 认证realm 必须与密码文件中记录的 realm 一致详见下文因此不指定 realm 时密码文件也应以localhost作为 realm 生成。重要安全提示认证保护范围有限官方文档docs/web.md明确指出Web UI 的认证只保护/containers端点并不保护 cAdvisor 的其他 HTTP 端点如/api/...与/metrics。其中部分端点可能暴露敏感信息因此不建议将这些端点公开暴露。结合源码可以看到/api/路由cmd/internal/api/handler.go 中apiResource /api/与/metricsPrometheus 端点handlers.go 中的RegisterPrometheusHandler都独立于认证逻辑注册不经过任何鉴权包装。这意味着认证只能防止未授权用户查看 HTML 监控页面但无法阻止其通过 API 拉取容器数据或抓取指标。在公网或非可信网络部署时应结合防火墙、反向代理鉴权或网络策略保护整个端口。HTTP Basic 认证配置实战1. 生成密码文件使用 Apachehtpasswd工具生成密码文件htpasswd -c test.htpasswd admin执行后会提示输入密码。-c表示创建新文件。仓库中已附带一个测试用密码文件 test.htpasswd其内容为admin:$apr1$WVO0Bsre$VrmWGDbcBV1fdAkvgQwdk0该文件预置了用户名admin、密码password1其中密码以$apr1$前缀的 Apache MD5 变体APR1格式哈希存储仅供测试使用生产环境请自行生成并使用更安全的哈希格式如htpasswd -B生成 bcrypt 哈希。2. 启动 cAdvisor 并启用认证./cadvisor --http_auth_file test.htpasswd --http_auth_realm localhost--http_auth_file指定密码文件路径--http_auth_realm指定 realm可选默认即localhost。3. 验证访问带凭据访问curl -u admin:password1 http://localhost:8080/containers/不带凭据访问将收到401 Unauthorized响应凭据错误同理。浏览器首次访问时也会弹出系统级的用户名/密码输入框。HTTP Digest 认证配置实战1. 生成密码文件Digest 认证的密码文件由 Apachehtdigest工具生成且文件内容与 realm 绑定htdigest -c test.htdigest localhost admin第三个参数localhost即 realm必须与启动参数--http_digest_realm保持一致。仓库中附带的 test.htdigest 内容为admin:localhost:70f2631dded4ce5ad0ebbea5faa6ad6e格式为用户名:realm:MD5(用户名:realm:密码)同样预置了admin:password1realm 为localhost。2. 启动 cAdvisor 并启用认证./cadvisor --http_digest_file test.htdigest --http_digest_realm localhost--http_digest_file指定 Digest 密码文件路径--http_digest_realm指定 realm默认localhost。Digest 认证相比 Basic 认证的优势在于密码不会以明文Base64形式在网络上传输而是使用挑战-响应机制基于摘要值完成校验。两种认证的优先级与源码实现官方文档特别注明两种认证只能启用其一。如果你在启动参数中同时传入了两个密码文件只有 HTTP Basic 认证会被启用。这一行为在 cmd/internal/http/handlers.go 的RegisterHandlers中由明确的分支逻辑实现// Setup the authenticator object if httpAuthFile ! { // ... 使用 auth.HtpasswdFileProvider 创建 Basic 认证器并注册处理器 authenticated true } if httpAuthFile httpDigestFile ! { // ... 使用 auth.HtdigestFileProvider 创建 Digest 认证器并注册处理器 authenticated true }即http_auth_file一旦非空Basic 认证立即生效Digest 分支被httpAuthFile 条件短路只有 Basic 未配置时才考虑 Digest。认证实现基于github.com/abbot/go-http-auth库Basic 使用auth.HtpasswdFileProviderauth.NewBasicAuthenticatorDigest 使用auth.HtdigestFileProviderauth.NewDigestAuthenticator见 handlers.go。另外从源码结构看认证包裹的范围比文档字面描述更广一些启用认证后不仅/containers/页面被authenticator.Wrap(...)包裹/docker/、/podman/两个页面以及/static/静态资源同样会经过认证见 handlers.go 与 cmd/internal/pages/pages.go 中的RegisterHandlersBasic/RegisterHandlersDigest。但无论如何/api/...与/metrics始终不受保护这一点务必牢记。生产部署建议与安全边界总结不要将 cAdvisor 端口直接暴露到公网即使开启了 Web UI 认证/api/v1.3/...包含完整的容器规格、状态与历史统计与/metricsPrometheus 指标仍然匿名可访问这些数据可能泄露容器镜像、标签、环境变量级信息。通过反向代理统一鉴权cAdvisor 提供了--url_base_prefix参数见 cmd/cadvisor.go可为所有路径添加统一前缀以适配反向代理路径转发结合网关层的认证/授权策略是更稳妥的做法。认证文件权限管理htpasswd/htdigest文件包含口令哈希应限制为运行 cAdvisor 的用户可读例如chmod 600并妥善保管。测试凭据不可用于生产仓库自带的test.htpasswd与test.htdigest中的admin:password1是公开的仅用于本地验证认证链路是否工作。总结来说cAdvisor 的 Web UI 是一个开箱即用的容器监控入口/containers页面承载了全部容器的实时状态通过--http_auth_file/--http_digest_file两个参数即可快速为页面加上访问控制。但请始终记住其安全边界——页面认证无法覆盖 API 与指标端点合理的网络隔离与代理策略才是完整防护的关键。【免费下载链接】cadvisorAnalyzes resource usage and performance characteristics of running containers.项目地址: https://gitcode.com/gh_mirrors/ca/cadvisor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考