×

安装 Red Hat OpenShift GitOps Operator 后,Argo CD 会自动创建一个具有admin权限的用户。为了管理多个用户,集群管理员可以使用 Argo CD 配置单点登录 (SSO)。

先决条件

  • Red Hat SSO 已安装在集群上。

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

  • Argo CD 已安装在集群上。

  • 集群中提供DeploymentConfig API。更多信息,请参见“DeploymentConfig [apps.openshift.io/v1]”。

在 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/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
      1 用于验证 Keycloak TLS 证书的自定义证书。

      Operator 会协调.spec.sso.keycloak.rootCA参数的变化,并使用argocd-cm配置映射中 PEM 编码的根证书更新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: ""
    • 可选:自定义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
        1 <resource_name>替换为ArgoCD CR 的名称。
        2 <hostname>替换为主机密钥的名称,例如sso.test.example.com
      • 要创建ArgoCD CR,请运行以下命令

        $ oc create -f <argocd_filename>.yaml -n <your-namespace>
      • 要编辑ArgoCD CR,请运行以下命令

        $ oc edit -f <argocd_filename>.yaml -n <your_namespace>
      • 保存文件以应用更改。

      • 要应用ArgoCD CR,请运行以下命令

        $ oc apply -f <argocd_filename>.yaml -n <your_namespace>
      • 通过运行以下命令验证是否已添加host属性

        $ oc get route keycloak -n <your_namespace> -o yaml
        示例输出
        kind: Route
        metadata:
          name: keycloak (1)
          labels:
            application: keycloak
        spec:
          host: sso.test.example.com
        status:
          ingress:
            - host: sso.test.example.com (2)
        1 指定路由的名称。
        2 指定主机密钥的名称。

        Keycloak 实例需要 2-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
  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=Cqid54Ih
    2. 获取 Keycloak 密码

      $ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD
      
      SSO_ADMIN_PASSWORD=GVXxHifH
  3. 在登录页面上,单击通过 Keycloak 登录

    只有在 Keycloak 实例准备就绪后,您才能看到通过 Keycloak 登录选项。

  4. 单击使用 OpenShift 登录

    不支持使用kubeadmin登录。

  5. 输入 OpenShift 凭据以登录。

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

    policy.csv:
    <name>, <email>, role:admin

卸载 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

使用此方法创建的 Keycloak 应用程序当前不持久。当服务器重启时,在 Argo CD Keycloak 领域中创建的附加配置将被删除。

修改 Keycloak 资源请求/限制

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

资源 请求 限制

CPU

500

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"}} }}]'

由 Red Hat OpenShift GitOps 创建的 Keycloak 仅保留由操作员进行的更改。如果 Keycloak 重启,则管理员在 Keycloak 中创建的任何其他配置都将被删除。