5.13. 使用 Keycloak 为 Argo CD 配置 SSO

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

先决条件

  • 在集群中安装了 Red Hat SSO。
  • 在集群中安装了 Red Hat OpenShift GitOps Operator。
  • 在集群中安装了 Argo CD。

5.13.1. 在 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:
  2. 在 Argo CD CR 中将 provider 参数的值设置为 keycloak
  3. 通过执行以下步骤配置 Keycloak:

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

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

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

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

      apiVersion: argoproj.io/v1alpha1
      kind: ArgoCD
      metadata:
        name: example-argocd
        labels:
          example: basic
      spec:
        extraConfig:
          oidc.tls.insecure.skip.verify: "true"
        sso:
          provider: keycloak
          keycloak:
            rootCA: ""
注意

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

5.13.2. 登录到 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
  2. 获取将用户名和密码存储为环境变量的 Keycloak pod 名称:

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

      $ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME
      
      SSO_ADMIN_USERNAME=<username>
    2. 获取 Keycloak 密码:

      $ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD
      
      SSO_ADMIN_PASSWORD=<password>
  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

5.13.3. 卸载 Keycloak

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

  apiVersion: argoproj.io/v1alpha1
  kind: ArgoCD
  metadata:
    name: example-argocd
    labels:
      example: basic
  spec:
    server:
      route:
       enabled: true
注意

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