×

默认情况下,Red Hat OpenShift GitOps 在 `openshift-gitops` 命名空间中安装一个 Argo CD 实例,并具有管理某些集群范围资源的其他权限。此默认 Argo CD 实例也称为默认集群范围实例。

要阻止默认 Argo CD 实例在 `openshift-gitops` 命名空间中启动,您可以使用 `openshift-gitops-operator` 订阅并在其中配置 `DISABLE_DEFAULT_ARGOCD_INSTANCE` 环境变量,方法是将字符串值设置为 `"true"`。

对于 GitOps 版本 1.13 及更高版本

  • 对于默认和用户定义的 Argo CD 实例,路由 TLS 终止都默认设置为 `reencrypt` 模式。现在,到 Argo CD 实例的 TLS 连接将接收在 OpenShift Container Platform 中设置的默认入口证书,而不是自签名的 Argo CD 证书。您可以通过配置 Argo CD CR 的 `.spec.server.route.tls` 字段来修改路由 TLS 终止策略。

  • 受限 Pod 安全准入 (PSA) 标签应用于 `openshift-gitops` 命名空间,以确保符合 OpenShift Container Platform 标准。如果您在此命名空间中运行其他工作负载(例如监控或日志记录),请确保它们符合受限 PSA 要求。如果无法实现合规性,请考虑使用用户定义的集群范围 Argo CD 实例,其中 PSA 标签未由 GitOps Operator 应用或控制。

要管理集群配置或部署应用程序,您可以安装和部署新的用户定义的 Argo CD 实例。默认情况下,任何新的用户定义实例都只有权限管理其部署到的命名空间中的资源。

  • 具有 Argo CD 命名空间访问权限的 Kubernetes 用户是 Argo CD 管理员,可以绕过在 Argo CD 中配置的任何基于角色的访问控制 (RBAC) 限制。切勿向非管理员用户授予对 Argo CD 命名空间的任何读或写访问权限。

  • 如果非管理员用户创建应用程序,请不要允许将其绑定到默认的AppProject自定义资源 (CR),因为它没有任何限制。否则,Argo CD 实例和默认AppProject CR 的 Kubernetes 权限允许在任何地方部署任何内容。为避免这种情况,请锁定默认的AppProject CR,即使有人错误配置了 Argo CD RBAC,也无法意外使用它。

您可以在任何命名空间(除了openshift-gitops命名空间)中创建用户定义的 Argo CD 实例。

如果您想在openshift-gitops命名空间内创建用户定义的 Argo CD 实例,请将openshift-gitops-operator订阅中的DISABLE_DEFAULT_ARGOCD_INSTANCE标志值设置为"true",并且不要将实例命名为openshift-gitops

安装用户定义的 Argo CD 实例

要管理集群配置或部署应用程序,您可以安装和部署新的用户定义的 Argo CD 实例。

先决条件
  • 您有权访问具有cluster-admin权限的集群。

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 在 Web 控制台的**管理员**视角中,单击**Operators** → **已安装的 Operators**。

  3. 从**项目**列表中创建或选择您要安装用户定义的 Argo CD 实例的项目。

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

  5. 单击**创建 ArgoCD**以配置参数

    1. 输入实例的**名称**。默认情况下,**名称**设置为example

    2. 创建一个外部 OS 路由以访问 Argo CD 服务器。单击**服务器** → **路由**并选中**启用**。

      您也可以配置 YAML 来创建外部 OS 路由,如下例所示

      创建具有外部 OS 路由的 Argo CD 示例
      apiVersion: argoproj.io/v1beta1
      kind: ArgoCD
      metadata:
        name: example
        namespace: openshift-gitops
      spec:
        server:
          route:
            enabled: true
    3. 可选:通过配置 Argo CD CR 的.spec.server.route.tls字段来修改路由 TLS 终止策略。

      为 Argo CD 服务器路由配置自定义 TLS 证书时,避免使用.spec.server.route.tls.key.spec.server.route.tls.certificate字段。请改用.spec.server.route.tls.externalCertificate字段。有关为自定义 TLS 证书配置路由的更多信息,请参阅路由的自定义 TLS 证书中的示例。

  6. 单击**创建**。

  7. 转到安装用户定义的 Argo CD 实例的项目中的**网络** → **路由** → **<instance_name>-server**。

  8. 在**详细信息**选项卡上,单击**路由详细信息** → **位置**下的 Argo CD Web UI 链接。Argo CD Web UI 将在新浏览器窗口中打开。

  9. 可选:要使用您的 OpenShift Container Platform 凭据登录,请确保您是cluster-admins组的用户,然后在 Argo CD 用户界面中选择通过 OpenShift 登录选项。

    要成为cluster-admins组的用户,请使用oc adm groups new cluster-admins <user>命令,其中<user>是您可以绑定到用户和组的默认集群角色(集群范围或本地范围)。

  10. 获取用户定义的 Argo CD 实例的密码

    1. 使用导航面板转到**工作负载** → **密钥**页面。

    2. 使用**项目**列表并选择创建用户定义的 Argo CD 实例的命名空间。

    3. 选择**<argo_CD_instance_name>-cluster**实例以显示密码。

    4. 在**详细信息**选项卡上,复制**数据** → **admin.password**下的密码。

  11. 使用admin作为**用户名**,使用复制的密码作为**密码**登录新窗口中的 Argo CD UI。

通过为命名空间范围的实例指定用户定义的集群角色来配置公共集群角色

作为集群管理员,当您使用argocd.argoproj.io/managed-by标签授予 Argo CD 对命名空间的访问权限时,Argo CD 将承担namespace-admin权限。然后,Red Hat OpenShift GitOps Operator 将自动为以下 GitOps 控制平面组件的所有托管命名空间创建角色绑定

  • Argo CD 应用程序控制器

  • Argo CD 服务器

  • Argo CD ApplicationSet 控制器

当您向非管理员用户(例如开发团队)提供命名空间时,他们可以使用namespace-admin权限修改网络策略等对象。在这些命名空间中安装 Argo CD 实例会赋予开发团队admin权限,并间接提升其分配的权限。这些角色具有很高的权限,可以删除所有资源。作为预防措施,您可以通过为 Operator 为 Argo CD 应用程序控制器和 Argo CD 服务器组件创建的角色绑定中所有托管命名空间配置公共集群角色来定义一组特定的、权限降低的角色,以满足您的安全要求。

要为所有托管命名空间配置公共集群角色,您可以为 Operator 的Subscription对象 YAML 文件中的CONTROLLER_CLUSTER_ROLESERVER_CLUSTER_ROLE环境变量指定用户定义的集群角色。结果,Operator 将使用现有的用户定义的集群角色,并为所有托管命名空间创建角色绑定,而不是创建默认的admin角色。

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

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。

步骤
  1. 在**管理员**视角中,导航到**管理** → **CustomResourceDefinitions**。

  2. 找到**Subscription** CRD 并单击以打开它。

  3. 选择**实例**选项卡并单击**openshift-gitops-operator**订阅。

  4. 选择**YAML**选项卡并进行自定义

    • CONTROLLER_CLUSTER_ROLESERVER_CLUSTER_ROLE环境变量指定用户定义的集群角色

      订阅示例
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-gitops-operator
        namespace: openshift-gitops-operator
      spec:
        config:
          env:
          - name: CONTROLLER_CLUSTER_ROLE
            value: gitops-controller-role (1)
          - name: SERVER_CLUSTER_ROLE
            value: gitops-server-role (2)
      1 Argo CD 应用程序控制器组件的环境变量名称。
      2 Argo CD 服务器组件的环境变量名称。

或者,您可以将前面的环境变量直接注入 Operator 的Deployment对象 YAML 文件中。

为 Argo CD 服务器和仓库服务器启用副本

Argo CD 服务器和 Argo CD 仓库服务器工作负载是无状态的。为了更好地在 Pod 之间分配工作负载,您可以增加 Argo CD 服务器和 Argo CD 仓库服务器副本的数量。但是,如果在 Argo CD 服务器上启用了水平自动缩放器,它将覆盖您设置的副本数量。

步骤
  • reposerver规范的replicas参数设置为要运行的副本数

    Argo CD 自定义资源示例
    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: repo
    spec:
      repo:
        replicas: <number_of_replicas>
      server:
        replicas: <number_of_replicas>
        route:
          enabled: true
          path: /
          tls:
            insecureEdgeTerminationPolicy: Redirect
            termination: passthrough
          wildcardPolicy: None

将资源部署到不同的命名空间

为了允许 Argo CD 管理其安装位置之外的其他命名空间中的资源,请使用argocd.argoproj.io/managed-by标签配置目标命名空间。

步骤
  • 配置命名空间

    $ oc label namespace <namespace> \
    argocd.argoproj.io/managed-by=<namespace> (1)
    1 Argo CD 安装所在的命名空间。

在多租户集群中,用户可能需要处理多个 Argo CD 实例。例如,在您的命名空间中安装 Argo CD 实例后,您可能会发现控制台应用程序启动器中显示的是不同的 Argo CD 实例链接,而不是您自己的 Argo CD 实例。

您可以通过设置DISABLE_DEFAULT_ARGOCD_CONSOLELINK环境变量来自定义 Argo CD 控制台链接。

  • 当您将DISABLE_DEFAULT_ARGOCD_CONSOLELINK设置为true时,Argo CD 控制台链接将被永久删除。

  • 当您将DISABLE_DEFAULT_ARGOCD_CONSOLELINK设置为false或使用默认值时,Argo CD 控制台链接将被暂时删除,并在 Argo CD 路由协调后再次显示。

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

  • 您已安装 Red Hat OpenShift GitOps Operator。

步骤
  1. 在**管理员**视角中,导航到**管理** → **CustomResourceDefinitions**。

  2. 找到**Subscription** CRD 并单击以打开它。

  3. 选择**实例**选项卡并单击**openshift-gitops-operator**订阅。

  4. 选择**YAML**选项卡并进行自定义

    • 要启用或禁用 Argo CD 控制台链接,请根据需要编辑DISABLE_DEFAULT_ARGOCD_CONSOLELINK的值。

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-gitops-operator
      spec:
        config:
          env:
          - name: DISABLE_DEFAULT_ARGOCD_CONSOLELINK
            value: 'true'