1.5. 使用 Red Hat OpenShift GitOps 管理策略定义
使用 ArgoCD
资源,您可以使用 Red Hat OpenShift GitOps 通过授予 OpenShift GitOps 访问权限在 Red Hat Advanced Cluster Management hub 集群上创建策略来管理策略定义。
1.5.1. 前提条件
您必须登录到您的 hub 集群。
需要的访问权限:集群管理员
已弃用: PlacementRule
1.5.2. 为 OpenShift GitOps 创建 ClusterRole 资源
要为 OpenShift GitOps 创建 ClusterRole
资源,可访问创建、读取、更新和删除策略和放置:
从控制台创建
ClusterRole
。您的ClusterRole
可能类似以下示例:kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin rules: - verbs: - get - list - watch - create - update - patch - delete apiGroups: - policy.open-cluster-management.io resources: - policies - configurationpolicies - certificatepolicies - operatorpolicies - policysets - placementbindings - verbs: - get - list - watch - create - update - patch - delete apiGroups: - apps.open-cluster-management.io resources: - placementrules - verbs: - get - list - watch - create - update - patch - delete apiGroups: - cluster.open-cluster-management.io resources: - placements - placements/status - placementdecisions - placementdecisions/status
另外,创建一个
ClusterRoleBinding
对象来授予 OpenShift GitOps 服务帐户对openshift-gitops-policy-admin
ClusterRole
对象的访问权限。ClusterRoleBinding
可能类似以下示例:kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin
注: - 当使用 OpenShift GitOps 部署 Red Hat Advanced Cluster Management 策略定义时,会在每个受管集群命名空间中创建一个策略副本,以解决 hub 模板的不同。这些副本称为复制策略。- 为了防止 OpenShift GitOps 重复删除此复制策略,或者显示 Argo CD
应用程序
没有同步,argocd.argoproj.io/compare-options:IgnoreExtraneous
注解由 Red Hat Advanced Cluster Management 策略框架自动在每个复制策略上设置。-
Argo CD 有用于跟踪对象的标签和注解。对于没有在 Argo CD 中显示复制策略,请在 Red Hat Advanced Cluster Management 策略定义中将
spec.copyPolicyMetadata
设置为false
来禁用 Argo CD 跟踪标签和注解。
1.5.3. 将策略生成器与 OpenShift GitOps 集成
您可以使用 OpenShift GitOps 通过 GitOps 使用 Policy Generator 生成策略。由于 OpenShift GitOps 容器镜像中没有预安装 Policy Generator,所以您必须完成自定义。
1.5.3.1. 先决条件
- 您必须在 Red Hat Advanced Cluster Management hub 集群上安装 OpenShift GitOps。
- 您必须登录到 hub 集群。
1.5.3.2. 从 OpenShift GitOps 访问策略生成器
要从 OpenShift GitOps 访问 Policy Generator,您必须配置 Init 容器,以便从 Red Hat Advanced Cluster Management Application Subscription 容器镜像复制 Policy Generator 二进制文件。您还必须通过在运行 Kustomize 时提供 --enable-alpha-plugins
标志来配置 OpenShift GitOps。
要使用 Policy Generator 创建、读取、更新和删除策略和放置,请授予对 OpenShift GitOps 的 Policy Generator 的访问权限。完成以下步骤:
使用以下命令编辑 OpenShift GitOps
argocd
对象:oc -n openshift-gitops edit argocd openshift-gitops
要将 Policy Generator 更新至较新的版本,请将 Init 容器使用的
registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9
镜像添加到较新的标签。将 <version
> 参数替换为ArgoCD
资源中的最新 Red Hat Advanced Cluster Management 版本。您的
ArgoCD
资源可能类似以下 YAML 文件:apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops spec: kustomizeBuildOptions: --enable-alpha-plugins repo: env: - name: KUSTOMIZE_PLUGIN_HOME value: /etc/kustomize/plugin initContainers: - args: - -c - cp /policy-generator/PolicyGenerator-not-fips-compliant /policy-generator-tmp/PolicyGenerator command: - /bin/bash image: registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9:v<version> name: policy-generator-install volumeMounts: - mountPath: /policy-generator-tmp name: policy-generator volumeMounts: - mountPath: /etc/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator name: policy-generator volumes: - emptyDir: {} name: policy-generator
注: 另外,您可以创建一个
ConfigurationPolicy
资源,其中包含ArgoCD
清单,并模板与MulticlusterHub
中设置的版本匹配:image: '{{ (index (lookup "apps/v1" "Deployment" "open-cluster-management" "multicluster-operators-hub-subscription").spec.template.spec.containers 0).image }}'
如果要在生成策略前在 Kustomize 目录中启用 Helm chart 处理,请在
spec.repo.env
字段中将POLICY_GEN_ENABLE_HELM
环境变量设置为"true"
:env: - name: POLICY_GEN_ENABLE_HELM value: "true"
要创建、读取、更新和删除策略和放置,请创建一个
ClusterRoleBinding
对象来授予 OpenShift GitOps 服务帐户对 Red Hat Advanced Cluster Management hub 集群的访问权限。ClusterRoleBinding
可能类似以下资源:kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin
1.5.4. 在 OpenShift GitOps 中配置策略健康检查
通过 ArgoCD
resoure,使用 OpenShift GitOps 为您定义自定义逻辑,根据资源状态决定特定资源的当前健康状况。定义自定义健康检查,以仅在策略合规时报告策略处于健康状态。当您为资源添加健康检查时,您必须在 resourceHealthChecks
字段中将它添加为 组
。
重要: 要验证您是否没有从互联网下载恶意的内容,请在应用前检查每个策略。
要为您的资源类型定义健康检查,请完成以下步骤:
要为您的
CertificatePolicy
资源配置健康检查,请使用以下命令编辑ArgoCD
资源:oc -n openshift-gitops edit argocd openshift-gitops
您的
ArgoCD
资源可能类似以下 YAML 文件:apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops spec: resourceHealthChecks: - group: policy.open-cluster-management.io kind: CertificatePolicy check: | hs = {} if obj.status == nil or obj.status.compliant == nil then hs.status = "Progressing" hs.message = "Waiting for the status to be reported" return hs end if obj.status.compliant == "Compliant" then hs.status = "Healthy" hs.message = "All certificates found comply with the policy" return hs else hs.status = "Degraded" hs.message = "At least one certificate does not comply with the policy" return hs end
要在
CertificatePolicy
,ConfigurationPolicy
,OperatorPolicy
, 和Policy
资源中添加健康检查,请运行以下命令下载argocd-policy-healthchecks.yaml
:wget https://raw.githubusercontent.com/open-cluster-management-io/policy-collection/main/stable/CM-Configuration-Management/argocd-policy-healthchecks.yaml
要应用
argocd-policy-healthchecks.yaml
策略,请运行以下命令:oc apply -f ./argocd-policy-healthchecks.yaml
-
通过查看
ArgoCD
资源的 Summary 选项卡来验证健康检查是否正常工作。从 Argo CD 控制台查看健康详情。
1.5.5. 其他资源
- 请参阅 了解 OpenShift GitOps 文档。