在离线环境中部署Image-Factory的技术实践

在离线环境中部署Image-Factory的技术实践

背景与挑战

Image-Factory作为SideroLabs生态系统中的重要组件,负责构建和签名Talos Linux系统镜像。在生产环境中,出于安全合规或网络隔离要求,企业往往需要在完全离线的环境中部署此类系统。本文将详细介绍如何在离线环境中成功部署和运行Image-Factory。

核心解决方案

1. 离线签名验证配置

Image-Factory依赖Sigstore进行容器签名验证,在离线环境中需要通过以下环境变量配置本地信任链:

environment:
  SIGSTORE_ROOT_FILE: /root.pem
  SIGSTORE_REKOR_PUBLIC_KEY: /cosign.pub
  SIGSTORE_CT_LOG_PUBLIC_KEY_FILE: /cosign.pub

这三个关键配置分别指定了:

  • 根证书文件路径
  • Rekor公开密钥
  • CT日志公开密钥文件

2. 镜像同步策略

离线环境需要预先同步所有依赖镜像,推荐使用容器工具进行镜像搬运。关键技巧包括:

  1. 使用--all参数同步所有架构的镜像
  2. 使用--preserve-digests保持镜像摘要不变(这对Image-Factory通过摘要拉取扩展至关重要)

同步的目标镜像包括:

  • 特定版本的扩展镜像(extensions)
  • 安装程序镜像(installer)
  • 镜像构建工具(imager)

3. 证书体系构建

完整的离线签名体系需要建立以下证书:

  1. 使用CFSSL创建内部CA
  2. 签发Omni服务的SSL证书
  3. 生成cosign签名证书
  4. 创建缓存签名密钥(cache-signing-key.key)

4. 镜像签名流程

离线环境中的镜像签名命令示例:

cosign sign --key "${COSIGN_KEY}" \
            --cert "${COSIGN_CERT}" \
            --cert-chain="${COSIGN_CERT_CHAIN}" \
            --tlog-upload=false \
            "${image}"

注意--tlog-upload=false参数用于禁用透明日志上传,这在离线环境中是必要的。

部署配置详解

完整的docker-compose配置应包含以下关键元素:

image-factory:
  image: "ghcr.io/siderolabs/image-factory:v0.5.0"
  ports:
    - "8080:8080"
  volumes:
    - ./cache-signing-key.key:/cache-signing-key.key
    - ./certs/import-cosign.key:/cosign.key
    - ./certs/import-cosign.pub:/cosign.pub
    - ./certs/omni-ca.pem:/root.pem
  command: >
    -http-port=0.0.0.0:8080
    -image-registry ${OMNI_IP}:5000
    -external-url http://${OMNI_IP}:8080
    -insecure-image-registry
    -cache-signing-key-path /cache-signing-key.key
    -container-signature-pubkey /cosign.pub
    -container-signature-issuer http://localhost

注意事项

  1. 所有仓库地址都需要配置为insecure模式,因为离线环境通常使用自签名证书
  2. 签名颁发者(issuer)应配置为本地地址
  3. 确保挂载所有必要的证书和密钥文件
  4. 特权模式(privileged)是必需的,因为Image-Factory需要访问系统设备

总结

通过合理配置签名验证链、预先同步依赖镜像、建立完整的证书体系,Image-Factory完全可以运行在严格的离线环境中。这种部署方式特别适合对网络安全有严格要求的企业环境,同时也为CI/CD流水线提供了更可靠的构建基础。

实践中需要注意保持镜像摘要的一致性,这是确保Image-Factory能正确识别和拉取扩展组件的关键。同时,完善的证书管理是离线签名验证能够正常工作的基础保障。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值