使用 WSUS 更新 Windows 容器基础镜像

解读

在国内金融、运营商、制造等大型政企单位,Windows 容器往往跑在离线或半离线的机房,补丁源必须通过**内网 WSUS(Windows Server Update Services)**统一管控。面试官问“怎么用 WSUS 更新 Windows 容器基础镜像”,核心想验证三点:

  1. 你是否理解容器镜像不可变操作系统补丁之间的矛盾;
  2. 你是否能把WSUS 离线同步、补丁下载、镜像重新构建、漏洞扫描、镜像分发整条链路闭环;
  3. 你是否能在**“安全合规”“DevOps 效率”**之间做权衡,给出可落地的中国本土方案。

知识点

  • Windows 容器镜像分层机制:base + windows server core/iis/runtime + 应用层,补丁必须打在 base 层,否则后续层仍带漏洞。
  • WSUS 离线导入流程:上游 WSUS 导出 metadata + cab,下游内网 WSUS 导入,形成**“离线补丁源”**。
  • DISM /add-packageslipstream:把 .msu 补丁注入离线 WIM/ISO,是容器镜像“打补丁”的唯一官方途径。
  • 多阶段构建与缓存失效:补丁层一旦变化,后续所有层缓存失效,必须设计**“补丁版本号标签”**策略降低 CI 时长。
  • 镜像签名与漏洞扫描:国内等保 2.0 要求SM2 签名商用密码产品对镜像做签名,Trivy/Clair 需离线 CVE 库。
  • Harbor 镜像分发:在内网 Harbor 配置复制策略,把补丁版本同步到各地机房,避免重复下载 3 GB 级 Windows base 镜像。

答案

步骤化落地流程(可直接在面试官面前白板书写):

  1. WSUS 离线同步
    a. 在外网 WSUS 服务器上,用wsusutil export导出补丁元数据与 cab 文件。
    b. 通过物理加密盘国密 VPN传入内网,内网 WSUS 执行wsusutil import,完成离线同步。

  2. 创建“补丁安装容器”
    编写 Dockerfile.wsu:

    FROM mcr.microsoft.com/windows/servercore:ltsc2022-amd64
    # 把 WSUS 离线补丁目录挂成卷
    COPY patches/ c:/patches/
    RUN dism /online /add-package /packagepath:c:/patches /quiet /norestart
    

    内网 GitLab Runner(Windows 容器模式)中构建,确保Docker Engine 20.10+process isolation兼容。

  3. 版本化标签与缓存优化
    补丁发布日期+KB 号做 tag,例如:

    harbor.local/base/winsvr:20230614-KB5026370
    

    后续业务镜像统一FROM此 tag,避免每次重新打补丁。

  4. 安全合规加固
    a. 用cosign+国密 SM2 对镜像签名,签名信息写入 Harbor 的notation插件。
    b. 用Trivy 离线库扫描 CVE,CRITICAL 级别>0 即失败,CI 直接返回非 0 退出码。

  5. 分发与回收
    Harbor 配置预热策略,把新补丁镜像提前推送到边缘机房节点;旧补丁镜像保留两个版本,超过数量自动gc回收,节省磁盘。

  6. 回滚预案
    若补丁导致业务容器异常,Kubernetes 集群只需修改imagePullPolicy=IfNotPresent并回滚Deployment到旧 tag,30 秒内完成业务恢复。

拓展思考

  • “热补丁”可行吗?
    Windows 容器目前不支持 live-patch,必须重建镜像;但可借助gMSA + 滚动发布实现零中断更新,把业务连接保持时间缩到一个 readinessProbe 周期(默认 10 s)

  • WSUS 与容器镜像仓库的“双库联动”
    在 CI 中解析WSUS 补丁元数据 XML,自动生成commit message镜像标签,做到**“补丁可追溯、镜像可回滚”,满足国内等保 2.0 审计**要求。

  • 未来趋势:WSUS 退场,MSU 直接导入
    微软已推出**“Cumulative Update Catalog”离线包,可直接DISM注入,不再需要 WSUS。但在政企内网里,WSUS 仍承担审批、合规、带宽节省三重职责,3~5 年内不会完全消失,因此掌握 WSUS 到容器镜像的闭环依旧是高阶加分项**。