5.8. 使用 Keycloak 为 Argo CD 配置 SSO
安装 Red Hat OpenShift GitOps Operator 后,Argo CD 会自动创建一个具有 admin
权限的用户。要管理多个用户,集群管理员可以使用 Argo CD 来配置 Single Sign-On(SSO)。
先决条件
- 在集群中安装了 Red Hat SSO。
- 在集群中安装了 Argo CD。
5.8.1. 在 Keycloak 中配置新客户端
对于 Operator 创建的所有 Argo CD 实例,默认安装 Dex。但是,您可以删除 Dex 配置并添加 Keycloak,以使用 OpenShift 凭证登录到 Argo CD。Keycloak 作为 Argo CD 和 OpenShift 之间的身份代理。
流程
要配置 Keycloak,请按照以下步骤执行:
通过从 Argo CD 自定义资源(CR)中删除以下部分来删除 Dex 配置,并保存 CR:
dex: openShiftOAuth: true resources: limits: cpu: memory: requests: cpu: memory:
通过编辑 Argo CD CR 配置 Keycloak,并将
provider
参数的值更新为keycloak
。例如:apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: example-argocd labels: example: basic spec: sso: provider: keycloak server: route: enabled: true
Keycloak 实例需要 2-3 分钟来安装和运行。
5.8.2. 登录到 Keycloak
登录到 Keycloak 控制台以管理身份或角色,并定义分配给不同角色的权限。
先决条件
- 删除 Dex 的默认配置。
- Argo CD CR 必须配置为使用 Keycloak SSO 供应商。
流程
获取用于登录的 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
获取将用户名和密码存储为环境变量的 Keycloak pod 名称:
$ oc -n argocd get pods NAME READY STATUS RESTARTS AGE keycloak-1-2sjcl 1/1 Running 0 45m
获取 Keycloak 用户名:
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME SSO_ADMIN_USERNAME=Cqid54Ih
获取 Keycloak 密码:
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD SSO_ADMIN_PASSWORD=GVXxHifH
在登录页面上,点 LOG IN VIA KEYCLOAK。
注意您只能在 Keycloak 实例就绪后看到 LOGIN VIA KEYCLOAK 选项。
点 Login with OpenShift。
注意不支持使用
kubeadmin
登录。- 输入要登录的 OpenShift 凭据。
可选: 默认情况下,登录到 Argo CD 的任何用户都具有只读访问权限。您可以通过更新
argocd-rbac-cm
配置映射来管理用户级别访问权限:policy.csv: <name>, <email>, role:admin
5.8.3. 在断开连接的集群中将 Keycloak 与 OpenShift OAuth 服务器集成
在断开连接的集群中,Keycloak 通过代理与 OpenShift OAuth 服务器通信。
流程
按照以下步骤将 Keycloak 与 OpenShift OAuth 服务器集成:
登录到 Keycloak pod:
$ oc exec -it dc/keycloak -n argocd -- /bin/bash
启动 JBoss CLI 工具来设置代理映射:
/opt/eap/bin/jboss-cli.sh
在 JBoss CLI 工具中,运行以下命令来启动嵌入的单机服务器:
embed-server --server-config=standalone-openshift.xml
为 OpenShift OAuth 服务器主机设置代理映射:
/subsystem=keycloak-server/spi=connectionsHttpClient/provider=default:write-attribute(name=properties.proxy-mappings,value=["<oauth-server-hostname>;http://<proxy-server-host>:<proxy-server-port>"])
停止嵌入的服务器:
quit
重新载入 JBoss CLI 工具以应用代理映射:
/opt/eap/bin/jboss-cli.sh --connect --command=:reload
5.8.4. 卸载 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 域中创建的其他配置会被删除。