×

作为集群管理员,您可以声明性地创建和管理非控制平面命名空间中的Application资源,而不是openshift-gitops控制平面命名空间。此功能在 Argo CD 开源项目中称为“任何命名空间中的应用程序”功能。

作为开发人员,如果您在非控制平面命名空间(而不是openshift-gitops控制平面命名空间)中创建 Argo CD 应用程序,请确保您的集群管理员向他们授予必要的权限。

否则,在 Argo CD 调和之后,您将看到类似于以下示例的错误消息

示例错误消息
error while validating and normalizing app: error getting application's project: application 'app' in namespace 'dev' is not allowed to use project 'default'

要使用此功能,您必须在以下对象中显式启用和配置目标命名空间

  • 您用户定义的集群范围 Argo CD 实例的ArgoCD自定义资源 (CR)

  • AppProject自定义资源 (CR)

  • Application CR

在非控制平面命名空间中创建和管理Application资源的过程包括以下步骤

此功能在您希望为隔离的团队管理 Argo CD 应用程序部署的多租户环境中非常有用。

为了防止应用程序团队的权限提升,您必须满足以下要求

  • 请勿在任何特权AppProject实例的.spec.sourceNamespaces字段中配置非控制平面命名空间,例如,安装在openshift-gitops控制平面命名空间或您定义的命名空间中的AppProject CR 的default实例。

  • 请勿在AppProject CRD 中授予对openshift-gitops控制平面命名空间的访问权限。

  • 始终在openshift-gitops控制平面命名空间中创建和配置用户定义的AppProject实例,然后在相应的用户定义的AppProject实例内的.spec.sourceNamespaces字段中配置非控制平面命名空间。

前提条件

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps 1.13.0 或更高版本。

  • 您在已定义的命名空间(例如,spring-petclinic命名空间)中拥有一个用户定义的集群范围的 Argo CD 实例

使用目标命名空间配置用户定义的集群范围 Argo CD 实例的 Argo CD CR

作为集群管理员,您可以定义一组用户可以在其中创建、更新和协调Application资源的非控制平面命名空间。您必须首先根据您的要求在用户定义的集群范围 Argo CD 实例的ArgoCD自定义资源 (CR) 中显式配置目标命名空间。

先决条件
  • 您已以管理员身份登录到 OpenShift Container Platform 集群。

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps 1.13.0 或更高版本。

  • 您在已定义的命名空间(例如,spring-petclinic命名空间)中拥有一个用户定义的集群范围 Argo CD 实例。

步骤
  1. 在 Web 控制台的**管理员**视角中,点击**Operators** → **已安装的 Operators**。

  2. 从**项目**列表中,选择安装了用户定义的集群范围 Argo CD 实例的项目。

  3. 从已安装的 Operators 列表中选择**Red Hat OpenShift GitOps**,然后转到**Argo CD**选项卡。

  4. 点击您的用户定义的集群范围 Argo CD 实例。

  5. 使用目标命名空间配置用户定义的集群范围 Argo CD 实例的ArgoCD CR

    1. 点击**YAML**选项卡并编辑ArgoCD CR 的 YAML 文件。

    2. ArgoCD CR 中,将sourceNamespaces参数的值设置为包含非控制平面命名空间。

      ArgoCD CR 示例
      apiVersion: argoproj.io/v1beta1
      kind: ArgoCD
      metadata:
        name: example (1)
        namespace: spring-petclinic (2)
      spec:
        sourceNamespaces: (3)
          - dev (4)
          - app-team-* (5)
      1 用户定义的集群范围 Argo CD 实例的名称。
      2 您希望运行用户定义的集群范围 Argo CD 实例的命名空间。
      3 用于创建和管理Application资源的非控制平面命名空间列表。
      4 Argo CD 服务器创建和管理Application资源的目标命名空间的名称。
      5 使用通配符 (*) 指定与模式app-team-*匹配的目标命名空间的名称(例如app-team-1app-team-2),以便 Argo CD 服务器创建和管理Application资源。
    3. 点击**保存**和**重新加载**。

      sourceNamespaces字段下指定目标命名空间时,Operator 会将argocd.argoproj.io/managed-by-cluster-argocd标签添加到指定的命名空间。

      dev目标命名空间示例
      apiVersion: v1
      kind: Namespace
      metadata:
        name: dev
        labels:
          argocd.argoproj.io/managed-by-cluster-argocd: spring-petclinic (1)
          kubernetes.io/metadata.name: dev (2)
      1 用户定义的集群范围 Argo CD 实例的命名空间。
      2 Argo CD 服务器创建和管理Application资源的目标命名空间。
  6. 验证 Operator 是否已将argocd.argoproj.io/managed-by-cluster-argocd标签添加到指定的命名空间

    1. 转到**管理** → **命名空间**,然后点击**创建命名空间**。

    2. 在**创建命名空间**对话框中,提供**名称**并点击**创建**。

      例如,要创建dev目标命名空间,请在**名称**字段中输入dev。您可以重复之前的步骤来创建app-team-1app-team-2目标命名空间。

      **命名空间**页面将显示已创建的目标命名空间。

    3. 点击目标命名空间,然后转到**YAML**选项卡以验证 Operator 添加的argocd.argoproj.io/managed-by-cluster-argocd标签。

  7. 验证您的用户定义的集群范围 Argo CD 实例是否配置了用于管理集群范围资源的集群角色

    1. 转到**用户管理** → **角色**,然后从**筛选器**列表中选择**集群范围的角色**。

    2. 使用**按名称搜索**字段搜索已创建的集群角色。例如,example-spring-petclinic-argocd-application-controllerexample-spring-petclinic-argocd-server

      **角色**页面将显示已创建的集群角色。

    3. 验证 GitOps Operator 是否创建了以下基于角色的访问控制 (RBAC) 资源

      名称 类型 用途

      <argocd_name>-<argocd_namespace>-argocd-application-controller

      ClusterRoleClusterRoleBinding

      用于 Argo CD Application Controller 在集群级别监视和列出Application资源

      <argocd_name>-<argocd_namespace>-argocd-server

      ClusterRoleClusterRoleBinding

      用于 Argo CD Server 在集群级别监视和列出Application资源

      <argocd_name>-<target_namespace>

      RoleRoleBinding

      用于 Argo CD 服务器通过 UI、API 或 CLI 在目标命名空间中管理Application资源

使用目标命名空间创建和配置用户定义的 AppProject 实例

作为集群管理员,您可以定义一组用户可以在其中创建、更新和协调Application资源的非控制平面命名空间。在使用目标命名空间配置用户定义的集群范围 Argo CD 实例后,您必须在openshift-gitops控制平面命名空间中创建和配置用户定义的AppProject实例。此外,您必须在用户定义的AppProject实例的.spec.sourceNamespaces字段中显式配置目标命名空间。

GitOps 控制平面命名空间 (openshift-gitops) 中的应用程序允许将它们的.spec.project字段设置为引用任何AppProject实例,而不管AppProject自定义资源 (CR) 中的.spec.sourceNamespaces字段施加的限制。

先决条件
  • 您已以管理员身份登录到 OpenShift Container Platform 集群。

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps 1.13.0 或更高版本。

步骤
  1. openshift-gitops控制平面命名空间中创建和配置用户定义的AppProject实例,以在.spec.sourceNamespaces字段中指定目标命名空间

    1. 从**项目**列表中,选择openshift-gitops项目。

    2. 在 Web 控制台的**管理员**视角中,点击**Operators** → **已安装的 Operators** → **Red Hat OpenShift GitOps**,然后转到**AppProject**选项卡。

    3. 点击**创建 AppProject**,并在 YAML 视图中输入以下配置

      用户定义的AppProject实例示例
      kind: AppProject
      apiVersion: argoproj.io/v1alpha1
      metadata:
        name: project-one (1)
        namespace: openshift-gitops (2)
      spec:
        sourceNamespaces: (3)
        - dev (4)
        - app-team-* (5)
        destinations: (6)
          - name: '*'
            namespace: '*'
            server: '*'
         sourceRepos: (7)
          - '*'
      1 用户定义的AppProject实例的名称。
      2 您要运行用户定义的AppProject实例的控制平面命名空间。
      3 用于创建和管理Application资源的非控制平面命名空间列表。
      4 Argo CD 服务器创建和管理Application资源的目标命名空间的名称。
      5 使用通配符 (*) 指定与模式app-team-*匹配的目标命名空间的名称(例如app-team-1app-team-2),以便 Argo CD 服务器创建和管理Application资源。
      6 对用户定义的AppProject实例中的应用程序可以部署到的集群和命名空间的引用。
      7 对用户定义的AppProject实例中的应用程序可以从中拉取清单的资源库的引用。
    4. 点击创建

      AppProjects页面显示已创建的用户定义AppProject实例。

创建和配置 Application CR 以引用目标命名空间和用户定义的 AppProject 实例

作为集群管理员,您可以定义一组特定的非控制平面命名空间,用户可以在其中创建、更新和协调Application资源。在用户定义的AppProject实例的.spec.sourceNamespaces字段中配置目标命名空间后,必须显式创建和配置Application自定义资源 (CR),其metadata.namespace.spec.project字段的参数要引用目标命名空间和用户定义的AppProject实例。

先决条件
  • 您已以管理员身份登录到 OpenShift Container Platform 集群。

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps 1.13.0 或更高版本。

步骤
  1. 创建并配置Application CR,其metadata.namespace.spec.project字段的参数要引用目标命名空间和用户定义的AppProject实例。

    1. 项目列表中选择目标命名空间。

    2. 在 Web 控制台的管理员视角中,点击OperatorsInstalled OperatorsRed Hat OpenShift GitOps 并转到Application选项卡。

    3. 点击创建应用程序并在 YAML 视图中输入以下配置

      用户定义的AppProject实例示例
      kind: Application
      apiVersion: argoproj.io/v1alpha1
      metadata:
        name: cluster-configs (1)
        namespace: dev (2)
      spec:
        project: project-one (3)
        # ...
      1 应用程序的名称。
      2 Argo CD 服务器创建和管理Application资源的目标命名空间的名称。
      3 用户定义的AppProject实例的名称。
    4. 点击创建

      应用程序页面显示已创建的应用程序。

      cluster-configs Argo CD 应用程序现在状态为健康已同步