5.4. Compliance Operator 扫描
建议使用 ScanSetting
和 ScanSettingBinding
API 来通过 Compliance Operator 运行合规性扫描。如需有关这些 API 对象的更多信息,请运行:
$ oc explain scansettings
或者
$ oc explain scansettingbindings
5.4.1. 运行合规性扫描
您可以使用互联网安全中心(CIS)配置集运行扫描。为方便起见,Compliance Operator 创建一个在启动时具有合理的默认值的 ScanSetting
对象。这个 ScanSetting
对象名为 default
。
对于 all-in-one control plane 和 worker 节点,合规性扫描在 worker 和 control plane 节点上运行两次。合规性扫描可能会导致扫描结果不一致。您可以通过在 ScanSetting
对象中只定义单个角色来避免结果不一致。
流程
运行以下命令检查
ScanSetting
对象:$ oc describe scansettings default -n openshift-compliance
输出示例
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: default namespace: openshift-compliance rawResultStorage: pvAccessModes: - ReadWriteOnce 1 rotation: 3 2 size: 1Gi 3 roles: - worker 4 - master 5 scanTolerations: 6 default: - operator: Exists schedule: 0 1 * * * 7
- 1
- Compliance Operator 创建一个包含扫描结果的持久性卷(PV)。默认情况下,PV 将使用访问模式
ReadWriteOnce
,因为 Compliance Operator 无法假定集群中配置的存储类。另外,多数集群中可以使用ReadWriteOnce
访问模式。如果需要获取扫描结果,可以使用一个 helper pod 来完成此操作,该 pod 也绑定卷。使用ReadWriteOnce
访问模式的卷只能由一个 pod 挂载,因此请记住删除帮助程序 pod。否则,Compliance Operator 将无法重复使用卷进行后续扫描。 - 2
- Compliance Operator 在卷中保留三个后续扫描的结果,旧的扫描会被轮转。
- 3
- Compliance Operator 将为扫描结果分配一个 GB 存储。
- 4 5
- 如果扫描设置使用扫描集群节点的任何配置集,请扫描这些节点角色。
- 6
- 默认扫描设置对象还会扫描所有节点。
- 7
- 默认扫描设置对象每天 01:00 运行扫描。
作为默认扫描设置的替代,您可以使用
default-auto-apply
,它有以下设置:apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: default-auto-apply namespace: openshift-compliance autoUpdateRemediations: true 1 autoApplyRemediations: true 2 rawResultStorage: pvAccessModes: - ReadWriteOnce rotation: 3 size: 1Gi schedule: 0 1 * * * roles: - worker - master scanTolerations: default: - operator: Exists
创建一个
ScanSettingBinding
对,,它绑定到默认的ScanSetting
对象,并使用cis
和cis-node
配置集扫描集群。例如:apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: cis-compliance namespace: openshift-compliance profiles: - name: ocp4-cis-node kind: Profile apiGroup: compliance.openshift.io/v1alpha1 - name: ocp4-cis kind: Profile apiGroup: compliance.openshift.io/v1alpha1 settingsRef: name: default kind: ScanSetting apiGroup: compliance.openshift.io/v1alpha1
运行以下命令来创建
ScanSettingBinding
对象:$ oc create -f <file-name>.yaml -n openshift-compliance
此时,
ScanSettingBinding
对象已协调,并以Binding
和Bound
设置为基础。Compliance Operator 会创建一个ComplianceSuite
对象和关联的ComplianceScan
对象。运行以下命令跟踪合规性扫描进度:
$ oc get compliancescan -w -n openshift-compliance
扫描过程通过扫描阶段进行,最终完成后到达
DONE
阶段。在大多数情况下,扫描的结果是NON-COMPLIANT
。您可以检查扫描结果,并开始应用补救使集群兼容。如需更多信息,请参阅管理 Compliance Operator 补救。
5.4.2. 将结果服务器 pod 调度到 worker 节点上
结果服务器 pod 挂载存储原始资产报告格式(ARF)扫描结果的持久性卷(PV)。nodeSelector
和 tolerations
属性允许您配置结果服务器 pod 的位置。
这适用于那些不允许 control plane 节点挂载持久性卷的环境。
流程
为 Compliance Operator 创建
ScanSetting
自定义资源(CR):定义
ScanSetting
CR,并保存 YAML 文件,如rs-workers.yaml
:apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: rs-on-workers namespace: openshift-compliance rawResultStorage: nodeSelector: node-role.kubernetes.io/worker: "" 1 pvAccessModes: - ReadWriteOnce rotation: 3 size: 1Gi tolerations: - operator: Exists 2 roles: - worker - master scanTolerations: - operator: Exists schedule: 0 1 * * *
要创建
ScanSetting
CR,请运行以下命令:$ oc create -f rs-workers.yaml
验证
要验证
ScanSetting
对象是否已创建,请运行以下命令:$ oc get scansettings rs-on-workers -n openshift-compliance -o yaml
输出示例
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: creationTimestamp: "2021-11-19T19:36:36Z" generation: 1 name: rs-on-workers namespace: openshift-compliance resourceVersion: "48305" uid: 43fdfc5f-15a7-445a-8bbc-0e4a160cd46e rawResultStorage: nodeSelector: node-role.kubernetes.io/worker: "" pvAccessModes: - ReadWriteOnce rotation: 3 size: 1Gi tolerations: - operator: Exists roles: - worker - master scanTolerations: - operator: Exists schedule: 0 1 * * * strictNodeScan: true