在离线环境中部署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. 镜像同步策略
离线环境需要预先同步所有依赖镜像,推荐使用容器工具进行镜像搬运。关键技巧包括:
- 使用
--all参数同步所有架构的镜像 - 使用
--preserve-digests保持镜像摘要不变(这对Image-Factory通过摘要拉取扩展至关重要)
同步的目标镜像包括:
- 特定版本的扩展镜像(extensions)
- 安装程序镜像(installer)
- 镜像构建工具(imager)
3. 证书体系构建
完整的离线签名体系需要建立以下证书:
- 使用CFSSL创建内部CA
- 签发Omni服务的SSL证书
- 生成cosign签名证书
- 创建缓存签名密钥(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
注意事项
- 所有仓库地址都需要配置为
insecure模式,因为离线环境通常使用自签名证书 - 签名颁发者(issuer)应配置为本地地址
- 确保挂载所有必要的证书和密钥文件
- 特权模式(privileged)是必需的,因为Image-Factory需要访问系统设备
总结
通过合理配置签名验证链、预先同步依赖镜像、建立完整的证书体系,Image-Factory完全可以运行在严格的离线环境中。这种部署方式特别适合对网络安全有严格要求的企业环境,同时也为CI/CD流水线提供了更可靠的构建基础。
实践中需要注意保持镜像摘要的一致性,这是确保Image-Factory能正确识别和拉取扩展组件的关键。同时,完善的证书管理是离线签名验证能够正常工作的基础保障。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



