访问控制和用户管理


Red Hat OpenShift GitOps 1.17

为用户和命名空间配置用户身份验证和访问控制

Red Hat OpenShift Documentation Team

摘要

本文档提供了有关更改和管理用户级别访问权限和资源请求的说明。它还讨论如何配置基于角色的访问控制和单点登录身份验证供应商,以管理集群中的多个用户、权限、Argo CD 资源和实例。

第 1 章 配置 Argo CD RBAC

默认情况下,除 kube:admin 用户外的任何类型的用户,登录到默认的 Argo CD 实例无法访问任何服务。但是,登录自定义 Argo CD 实例的用户默认为只读用户。

注意

在 Red Hat OpenShift GitOps v1.9.0 或更早版本中,除 kube:admin 用户外,使用 Red Hat SSO (RH SSO)登录到 Argo CD 是只读用户。

1.1. 配置用户级别访问权限

要管理和修改用户级别访问权限,请在 Argo CD 自定义资源(CR)中配置基于角色的访问控制(RBAC)部分。

流程

  1. 编辑 argocd CR:

    $ oc edit argocd [argocd-instance-name] -n [namespace]
    Copy to Clipboard Toggle word wrap

    输出

    metadata
    ...
    ...
      rbac:
        policy: 'g, rbacsystem:cluster-admins, role:admin'
        scopes: '[groups]'
    Copy to Clipboard Toggle word wrap

  2. 将策略配置添加到 rbac 部分,再添加要应用到 用户的名称 和所需的角色:

    metadata
    ...
    ...
    rbac:
        policy: g, <name>, role:<admin>
        scopes: '[groups]'
    Copy to Clipboard Toggle word wrap
注意

目前,RHSSO 无法读取 Red Hat OpenShift GitOps 用户的组信息。因此,在用户级别配置 RBAC。

第 2 章 使用 Dex 为 Argo CD 配置 SSO

安装 Red Hat OpenShift GitOps Operator 后,Argo CD 会自动创建一个具有 admin 权限的用户。要管理多个用户,集群管理员可以使用 Argo CD 来配置 Single Sign-On(SSO)。

注意

ArgoCD CR 中的 spec.dex 参数不再支持 Red Hat OpenShift GitOps v1.10.0。考虑改用 .spec.sso 参数。

2.1. 配置以启用 Dex OpenShift OAuth Connector

对于 Operator 创建的所有 Argo CD 实例,默认安装 Dex。您可以通过设置 .spec.sso 参数,将 Red Hat OpenShift GitOps 配置为使用 Dex 作为 SSO 身份验证供应商。

Dex 通过检查平台提供的 OAuth 服务器,使用 OpenShift Container Platform 中定义的用户和组。

流程

  • 要启用 Dex,请在 Operator 的 YAML 资源中将 .spec.sso.provider 参数设置为 dex

    # ...
    spec:
      sso:
        provider: dex
        dex:
          openShiftOAuth: true 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    openShiftOAuth 属性触发 Operator,当值设为 true 时自动配置内置 OpenShift Container Platform OAuth 服务器。

2.1.1. 将用户映射到特定的角色

如果有直接 ClusterRoleBinding 角色,Argo CD 无法将用户映射到特定角色。您可以通过 OpenShift,手动更改 SSO 上的 role:admin 角色。

流程

  1. 创建名为 cluster-admins 的组。

    $ oc adm groups new cluster-admins
    Copy to Clipboard Toggle word wrap
  2. 将用户添加到组。

    $ oc adm groups add-users cluster-admins USER
    Copy to Clipboard Toggle word wrap
  3. cluster-admin ClusterRole 应用到组:

    $ oc adm policy add-cluster-role-to-group cluster-admin cluster-admins
    Copy to Clipboard Toggle word wrap

2.2. 通过替换 .spec.sso 禁用 Dex

  • 要禁用 dex,可以从 Argo CD 自定义资源中删除 spec.sso 元素,或者指定不同的 SSO 供应商。

第 3 章 使用 Keycloak 为 Argo CD 配置 SSO

安装 Red Hat OpenShift GitOps Operator 后,Argo CD 会自动创建一个具有 admin 权限的用户。要管理多个用户,集群管理员可以使用 Argo CD 来配置 Single Sign-On(SSO)。

3.1. 先决条件

  • 在集群中安装了 Red Hat SSO。
  • Red Hat OpenShift GitOps Operator 安装在 OpenShift Container Platform 集群中。
  • 在集群中安装了 Argo CD。
  • 在集群中提供了 DeploymentConfig API。如需更多信息,请参阅 "DeploymentConfig [apps.openshift.io/v1]"。
  • 当在为 FIPS 模式配置的 OpenShift Container Platform 集群上部署 Red Hat OpenShift GitOps Operator 时,不支持使用 Keycloak 的 Argo CD 的单点登录(SSO)配置。

3.2. 在 Keycloak 中配置新客户端

对于 Operator 创建的所有 Argo CD 实例,默认安装 Dex。但是,您可以删除 Dex 配置并添加 Keycloak,以使用 OpenShift 凭证登录到 Argo CD。Keycloak 作为 Argo CD 和 OpenShift 之间的身份代理。

流程

要配置 Keycloak,请按照以下步骤执行:

  1. 通过从 Argo CD 自定义资源 (CR) 中删除 .spec.sso.dex 参数来删除 Dex 配置,并保存 CR:

    dex:
        openShiftOAuth: true
        resources:
          limits:
            cpu:
            memory:
          requests:
            cpu:
            memory:
    Copy to Clipboard Toggle word wrap
  2. 在 Argo CD CR 中将 provider 参数的值设置为 keycloak
  3. 通过执行以下步骤配置 Keycloak:

    • 对于安全连接,设置 rootCA 参数的值,如下例所示:

      apiVersion: argoproj.io/v1beta1
      kind: ArgoCD
      metadata:
        name: example-argocd
        labels:
          example: basic
      spec:
        sso:
          provider: keycloak
          keycloak:
            rootCA: "<PEM-encoded-root-certificate>" 
      1
      
        server:
          route:
            enabled: true
      Copy to Clipboard Toggle word wrap
      1
      用于验证 Keycloak 的 TLS 证书的自定义证书。

      Operator 会协调 .spec.sso.keycloak.rootCA 参数中的更改,并使用 argocd-cm 配置映射中 PEM 编码的 root 证书更新 oidc.config 参数。

    • 对于不安全连接,将 rootCA 参数的值留空,并使用 oidc.tls.insecure.skip.verify 参数,如下所示:

      apiVersion: argoproj.io/v1beta1
      kind: ArgoCD
      metadata:
        name: example-argocd
        labels:
          example: basic
      spec:
        extraConfig:
          oidc.tls.insecure.skip.verify: "true"
        sso:
          provider: keycloak
          keycloak:
            rootCA: ""
      Copy to Clipboard Toggle word wrap
    • 可选:自定义 spec.sso.keycloak 字段,在 ArgoCD CR 中为 keycloak 供应商添加路由名称。使用此功能支持高级路由用例,如在多个 Ingress Controller 分片 之间平衡传入的流量负载。

      • 使用以下示例 YAML 在 ArgoCD CR 中添加 host 参数:

        ArgoCD CR 示例

        apiVersion: argoproj.io/v1alpha1
        kind: ArgoCD
        metadata:
          name: <resource_name> 
        1
        
          labels:
            example: route
        spec:
          sso:
            provider: keycloak
            keycloak:
             host: <hostname> 
        2
        
          server:
            ingress:
              enabled: true
            insecure: true
        Copy to Clipboard Toggle word wrap

        1
        <resource_name > 替换为 ArgoCD CR 的名称。
        2
        <hostname > 替换为主机密钥的名称,如 sso.test.example.com
      • 要创建 ArgoCD CR,请运行以下命令:

        $ oc create -f <argocd_filename>.yaml -n <your-namespace>
        Copy to Clipboard Toggle word wrap
      • 要编辑 ArgoCD CR,请运行以下命令:

        $ oc edit -f <argocd_filename>.yaml -n <your_namespace>
        Copy to Clipboard Toggle word wrap
      • 保存文件以使改变生效。
      • 要应用 ArgoCD CR,请运行以下命令:

        $ oc apply -f <argocd_filename>.yaml -n <your_namespace>
        Copy to Clipboard Toggle word wrap
      • 运行以下命令验证 host 属性是否已添加:

        $ oc get route keycloak -n <your_namespace> -o yaml
        Copy to Clipboard Toggle word wrap

        输出示例

        kind: Route
        metadata:
          name: keycloak 
        1
        
          labels:
            application: keycloak
        spec:
          host: sso.test.example.com
        status:
          ingress:
            - host: sso.test.example.com 
        2
        Copy to Clipboard Toggle word wrap

        1
        指定路由的名称。
        2
        指定主机密钥的名称。
        注意

        Keycloak 实例需要 2-3 分钟来安装和运行。

3.3. 登录到 Keycloak

登录到 Keycloak 控制台以管理身份或角色,并定义分配给不同角色的权限。

先决条件

  • 删除 Dex 的默认配置。
  • Argo CD CR 必须配置为使用 Keycloak SSO 供应商。

流程

  1. 获取用于登录的 Keycloak 路由 URL:

    $ oc -n argocd get route keycloak
    
    NAME        HOST/PORT                                                        PATH   SERVICES   PORT    TERMINATION   WILDCARD
    keycloak    keycloak-default.apps.ci-ln-******.origin-ci-int-aws.dev.**.com         keycloak   <all>    reencrypt     None
    Copy to Clipboard Toggle word wrap
  2. 获取将用户名和密码存储为环境变量的 Keycloak pod 名称:

    $ oc -n argocd get pods
    
    NAME                      READY   STATUS           RESTARTS   AGE
    keycloak-1-2sjcl           1/1    Running            0        45m
    Copy to Clipboard Toggle word wrap
    1. 获取 Keycloak 用户名:

      $ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME
      
      SSO_ADMIN_USERNAME=Cqid54Ih
      Copy to Clipboard Toggle word wrap
    2. 获取 Keycloak 密码:

      $ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD
      
      SSO_ADMIN_PASSWORD=GVXxHifH
      Copy to Clipboard Toggle word wrap
  3. 在登录页面上,点 LOG IN VIA KEYCLOAK

    注意

    您只能在 Keycloak 实例就绪后看到 LOGIN VIA KEYCLOAK 选项。

  4. Login with OpenShift

    注意

    不支持使用 kubeadmin 登录。

  5. 输入要登录的 OpenShift 凭据。
  6. 可选: 默认情况下,登录到 Argo CD 的任何用户都具有只读访问权限。您可以通过更新 argocd-rbac-cm 配置映射来管理用户级别访问权限:

    policy.csv:
    <name>, <email>, role:admin
    Copy to Clipboard Toggle word wrap

3.4. 卸载 Keycloak

您可以通过从 Argo CD 自定义资源(CR)文件中删除 SSO 字段来删除 Keycloak 资源及其相关配置。删除 SSO 字段后,文件中的值类似如下:

  apiVersion: argoproj.io/v1beta1
  kind: ArgoCD
  metadata:
    name: example-argocd
    labels:
      example: basic
  spec:
    server:
      route:
       enabled: true
Copy to Clipboard Toggle word wrap
注意

使用此方法创建的 Keycloak 应用程序当前不是持久性。在服务器重启时,在 Argo CD Keycloak 域中创建的其他配置会被删除。

3.5. 修改 Keycloak 资源请求/限制

默认情况下,Keycloak 容器使用资源请求和限值创建。您可以更改并管理资源请求。

Expand
资源RequestsLimits

CPU

500m

1000m

内存

512 Mi

1024 Mi

流程

  • 修改默认资源要求,修补 Argo CD 自定义资源(CR):
$ oc -n openshift-gitops patch argocd openshift-gitops --type='json' -p='[{"op": "add", "path": "/spec/sso", "value": {"provider": "keycloak", "resources": {"requests": {"cpu": "512m", "memory": "512Mi"}, "limits": {"cpu": "1024m", "memory": "1024Mi"}} }}]'
Copy to Clipboard Toggle word wrap
注意

Red Hat OpenShift GitOps Operator 创建的 Keycloak 仅保留 Operator 所做的更改。如果 Keycloak 重启,则删除 Keycloak 中的管理员创建的额外配置。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat