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 资源,可访问创建、读取、更新和删除策略和放置:

  1. 从控制台创建 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
  2. 另外,创建一个 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 策略框架自动在每个复制策略上设置。

  3. 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 的访问权限。完成以下步骤:

  1. 使用以下命令编辑 OpenShift GitOps argocd 对象:

    oc -n openshift-gitops edit argocd openshift-gitops
  2. 要将 Policy Generator 更新至较新的版本,请将 Init 容器使用的 registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9 镜像添加到较新的标签。将 & lt;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 }}'
  3. 如果要在生成策略前在 Kustomize 目录中启用 Helm chart 处理,请在 spec.repo.env 字段中将 POLICY_GEN_ENABLE_HELM 环境变量设置为 "true"

    env:
    - name: POLICY_GEN_ENABLE_HELM
      value: "true"
  4. 要创建、读取、更新和删除策略和放置,请创建一个 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 字段中将它添加为

重要: 要验证您是否没有从互联网下载恶意的内容,请在应用前检查每个策略。

要为您的资源类型定义健康检查,请完成以下步骤:

  1. 要为您的 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
  2. 要在 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
  3. 要应用 argocd-policy-healthchecks.yaml 策略,请运行以下命令:

    oc apply -f ./argocd-policy-healthchecks.yaml
  4. 通过查看 ArgoCD 资源的 Summary 选项卡来验证健康检查是否正常工作。从 Argo CD 控制台查看健康详情。

1.5.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.