第 2 章 通过为集群范围的实例创建用户定义的集群角色来自定义权限
对于默认的集群范围的实例,Red Hat OpenShift GitOps Operator 授予管理特定集群范围资源的额外权限。因此,作为集群管理员,当您将 Argo CD 部署为集群范围的实例时,Operator 会为 GitOps control plane 组件创建额外的集群角色和集群角色绑定。这些集群角色和集群角色绑定提供了 Argo CD 在集群级别操作的额外权限。
如果您不希望集群范围的实例具有所有 Operator-given 权限,并选择向集群范围资源添加或删除权限,您必须首先禁用为集群范围的实例创建默认集群角色。然后,您可以为以下集群范围的实例自定义权限:
- 默认 ArgoCD 实例(默认集群范围的实例)
- 用户定义的集群范围的 Argo CD 实例
本指南提供了一些示例,可帮助您创建用户定义的集群范围的 Argo CD 实例,在定义的命名空间中部署 Argo CD 应用程序,其中包含集群的自定义配置,禁用为集群范围的实例创建默认集群角色,并通过为 GitOps control plane 组件创建新的集群角色来自定义权限。
作为开发者,如果您要创建 Argo CD 应用程序并部署集群范围的资源,请确保集群管理员为它们授予必要的权限。
否则,在 Argo CD 协调后,您将在应用程序的 Status
字段中看到与以下示例类似的身份验证错误消息:
身份验证错误消息示例
persistentvolumes is forbidden: User "system:serviceaccount:gitops-demo:argocd-argocd-application-controller" cannot create resource "persistentvolumes" in API group "" at the cluster scope.
2.1. 先决条件
- 您已在 OpenShift Container Platform 集群上安装 Red Hat OpenShift GitOps 1.13.0 或更高版本。
-
已安装 OpenShift CLI(
oc
)。 -
已安装 Red Hat OpenShift GitOps
argocd
CLI。 -
您已在定义的命名空间中安装了 集群范围的 Argo CD 实例。例如,
spring-petclinic
命名空间。 您已验证了用户定义的集群范围的实例配置了以下组件的集群角色和集群角色绑定:
- Argo CD Application Controller
- Argo CD 服务器
- Argo CD ApplicationSet Controller (提供 ApplicationSet Controller 会被创建)
您已使用
spring-petclinic
命名空间中的customclusterrole
路径 部署了cluster-configs
Argo CD 应用程序,并创建了test-gitops-ns
命名空间和test-gitops-pv
持久性卷资源。注意cluster-configs
Argo CD 应用程序必须由用户定义的集群范围的实例管理,并设置以下参数:-
selfHeal
字段值设为true
-
syncPolicy
字段值设置为automated
-
Label 字段设置为
app.kubernetes.io/part-of=argocd
值 -
Label 字段设置为
argocd.argoproj.io/managed-by=<user_defined_namespace
> 值,以便定义的命名空间中的 Argo CD 实例可以管理您的命名空间 -
Label 字段被设置为
app.kubernetes.io/name=<user_defined_argocd_instance>
值
-