前言
目前公有云市场上的镜像,都是别人已经定义好的(无论是公有云原生提供还是第三方供应商),部分系统配置和版本不适配所有项目,特别是一些需要自定义镜像需求的企业;
同时又由于人工制作一个镜像成本较大,且不容易修改更新,所以我们需要有一个流水线方式的流程来生成镜像,Packer刚好符合我们的需求
Packer是一个轻量级的开源工具,用于为常用的操作系统(如Windows、Linux)创建镜像,同时它也能支持多种云(AWS,Azure,阿里云等),本文实验步骤基于Azure云创建自定义镜像
黄金镜像
Offical Image: 官方的镜像
Base Image: 我们使用官方的镜像作为我们的基础镜像,上传至云平台
Golden Image: 基于Base Image安装系统基线配置和应用软件,我们定义为黄金镜像Golden Image
为什么我们要生成这样的Golden Image?
Golden Image 是一种提高系统部署、管理和维护效率的有效方法。通过预先配置和验证系统,可以确保部署的环境是一致的、可靠的,并且符合组织的标准和最佳实践
创建 Golden Image(黄金镜像)是一种在 IT 管理和部署中常见的实践,有多个原因可以解释为什么需要制作 Golden Image:
-
一致性和可重复性: Golden Image 确保环境的一致性,因为它是一个经过配置和测试的标准化镜像。使用 Golden Image 可以确保在不同的环境中部署相同的基础设施,提供可重复的结果。
-
快速部署: Golden Image 包含了操作系统、应用程序和配置的预先安装,使得部署新系统或应用程序非常快速。这对于需要在大量机器上部署相似配置的场景非常有用。
-
配置管理: Golden Image 包含了已经配置和验证的设置,包括操作系统设置、安全配置、应用程序配置等。这确保了所有部署的系统都符合相同的标准。
-
可靠性和稳定性: 由于 Golden Image 是经过测试和验证的,因此它通常更加可靠和稳定。这减少了在生产环境中遇到问题的可能性。
-
安全性: 制作 Golden Image 时可以执行各种安全性操作,例如关闭不必要的服务、应用最新的补丁和安全配置。这有助于减少系统的潜在漏洞。
-
容易更新: 当需要对环境进行更新时,可以更新 Golden Image,然后重新部署。这比逐个更新每个服务器要更为高效。
-
支持版本控制: Golden Image 可以与版本控制系统集成,允许在环境中轻松管理和跟踪不同版本的镜像。
架构设计
架构说明:
- 开发人员会将代码推送到代码仓库
- 代码仓库存放puppet代码和Packer流水线代码
- 流水线通过Gitlab runner触发执行,每次推送代码都会自动触发CICD
- Gitlab runner部署在云环境的VM上,所有流水线任务由runner执行,并将在云环境上生成最终的黄金镜像
- Packer部署在runner服务器上
CIS集成设计
下图是Packer相关组件的说明,我们会在Provisioners执行Shell/Powershell脚本,以执行操作系统中的命令,这时候我们就可以将CIS中要求的系统配置生成到我们最终的黄金镜像
CIS模块说明
cis是做什么的?目前支持puppet已完成的基线?包含redhat/suse;提供基线清单
CIS标准
CIS标准指的是由互联网安全中心(Center for Internet Security,简称CIS)制定的安全基准。这些基准是一系列详细的安全配置指南,旨在帮助组织确保其信息技术系统的安全性,以降低遭受网络攻击和数据泄露的风险。
Puppet模块会影响什么
该模块涉及:
|
目前我们的puppet模块现已支持Redhat 8和Suse 15操作系统
感兴趣的可以联系我们,提供相关代码模块
主要特点
-
自动化配置:CIS模块提供了一种自动化的方法来应用CIS基准中的安全配置。通过使用这些模块,可以快速、轻松地将系统配置为符合CIS的安全要求,而无需手动配置每个安全设置。
-
可定制性:CIS模块通常提供了多个级别的安全配置(模块清单文件中设置了4个配置级别),以满足不同组织和环境的需求。可以根据自身情况选择合适的安全级别,并进行必要的定制化设置。
-
跨平台支持:CIS模块通常覆盖了各种操作系统平台,包括但不限于Linux、Windows、Unix等。这使得可以在不同的环境中使用相同的工具来管理系统的安全性。
模块依赖
Puppet版本:8.3.1
需要加载的依赖模块
|
实验步骤
前置条件
|
流程说明
1&2、Packer从SIG获取源镜像,并通过SP服务账号创建VM
3、执行Shell脚本,初始化系统配置
4、Builders将生成的Golden Image回传至SIG
步骤一、安装Packer
packer可以安装在任何环境,本次基于Linux服务器
|
步骤二、配置Packer流水线
在当前目录,配置如下文件
azure.pkr.hcl:主配置文件,定义执行的流水线步骤
values.auto.pkrvars.hcl:变量赋值配置(赋值内容就不展示了,大家按照对应字段填写自己的项目信息)
variables.pkr.hcl:变量定义配置
实验中的原始镜像是我配置在shared_image_gallery中的,生成的镜像也会放到这里
azure.pkr.hcl
|
步骤三、运行Packer流水线
|
步骤四、Packer最终效果
会在Azure生成最终镜像,我们可以基于该镜像创建新的VM
后续任何更新,都可以通过调整packer流水线来完成镜像版本的迭代,十分高效和便利
附言
packer生成的镜像也可以和TF/Pulumi集成,相关参考代码如下
|
|