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 - 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
注: 另外,您可以创建一个包含
ArgoCD
清单和模板的ConfigurationPolicy
资源,以匹配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 文档。