访问控制和用户管理
为用户和命名空间配置用户身份验证和访问控制
摘要
第 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)部分。
流程
编辑
argocdCR:oc edit argocd [argocd-instance-name] -n [namespace]
$ oc edit argocd [argocd-instance-name] -n [namespace]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将策略配置添加到
rbac部分,再添加要应用到用户的名称和所需的角色:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
目前,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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
openShiftOAuth属性触发 Operator,当值设为true时自动配置内置 OpenShift Container PlatformOAuth服务器。
2.1.1. 将用户映射到特定的角色 复制链接链接已复制到粘贴板!
如果有直接 ClusterRoleBinding 角色,Argo CD 无法将用户映射到特定角色。您可以通过 OpenShift,手动更改 SSO 上的 role:admin 角色。
流程
创建名为
cluster-admins的组。oc adm groups new cluster-admins
$ oc adm groups new cluster-adminsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户添加到组。
oc adm groups add-users cluster-admins USER
$ oc adm groups add-users cluster-admins USERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
cluster-adminClusterRole应用到组:oc adm policy add-cluster-role-to-group cluster-admin cluster-admins
$ oc adm policy add-cluster-role-to-group cluster-admin cluster-adminsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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。
-
在集群中提供了
DeploymentConfigAPI。如需更多信息,请参阅 "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,请按照以下步骤执行:
通过从 Argo CD 自定义资源 (CR) 中删除
.spec.sso.dex参数来删除 Dex 配置,并保存 CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 Argo CD CR 中将
provider参数的值设置为keycloak。 通过执行以下步骤配置 Keycloak:
对于安全连接,设置
rootCA参数的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于验证 Keycloak 的 TLS 证书的自定义证书。
Operator 会协调
.spec.sso.keycloak.rootCA参数中的更改,并使用argocd-cm配置映射中 PEM 编码的 root 证书更新oidc.config参数。对于不安全连接,将
rootCA参数的值留空,并使用oidc.tls.insecure.skip.verify参数,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:自定义
spec.sso.keycloak字段,在ArgoCDCR 中为keycloak供应商添加路由名称。使用此功能支持高级路由用例,如在多个 Ingress Controller 分片 之间平衡传入的流量负载。使用以下示例 YAML 在
ArgoCDCR 中添加host参数:ArgoCDCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建
ArgoCD CR,请运行以下命令:oc create -f <argocd_filename>.yaml -n <your-namespace>
$ oc create -f <argocd_filename>.yaml -n <your-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要编辑
ArgoCD CR,请运行以下命令:oc edit -f <argocd_filename>.yaml -n <your_namespace>
$ oc edit -f <argocd_filename>.yaml -n <your_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件以使改变生效。
要应用
ArgoCDCR,请运行以下命令:oc apply -f <argocd_filename>.yaml -n <your_namespace>
$ oc apply -f <argocd_filename>.yaml -n <your_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证
host属性是否已添加:oc get route keycloak -n <your_namespace> -o yaml
$ oc get route keycloak -n <your_namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Keycloak 实例需要 2-3 分钟来安装和运行。
3.3. 登录到 Keycloak 复制链接链接已复制到粘贴板!
登录到 Keycloak 控制台以管理身份或角色,并定义分配给不同角色的权限。
先决条件
- 删除 Dex 的默认配置。
- Argo CD CR 必须配置为使用 Keycloak SSO 供应商。
流程
获取用于登录的 Keycloak 路由 URL:
oc -n argocd get route keycloak
$ 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 NoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取将用户名和密码存储为环境变量的 Keycloak pod 名称:
oc -n argocd get pods
$ oc -n argocd get pods NAME READY STATUS RESTARTS AGE keycloak-1-2sjcl 1/1 Running 0 45mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 Keycloak 用户名:
oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME SSO_ADMIN_USERNAME=Cqid54IhCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 Keycloak 密码:
oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD
$ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD SSO_ADMIN_PASSWORD=GVXxHifHCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在登录页面上,点 LOG IN VIA KEYCLOAK。
注意您只能在 Keycloak 实例就绪后看到 LOGIN VIA KEYCLOAK 选项。
点 Login with OpenShift。
注意不支持使用
kubeadmin登录。- 输入要登录的 OpenShift 凭据。
可选: 默认情况下,登录到 Argo CD 的任何用户都具有只读访问权限。您可以通过更新
argocd-rbac-cm配置映射来管理用户级别访问权限:policy.csv: <name>, <email>, role:admin
policy.csv: <name>, <email>, role:adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. 卸载 Keycloak 复制链接链接已复制到粘贴板!
您可以通过从 Argo CD 自定义资源(CR)文件中删除 SSO 字段来删除 Keycloak 资源及其相关配置。删除 SSO 字段后,文件中的值类似如下:
使用此方法创建的 Keycloak 应用程序当前不是持久性。在服务器重启时,在 Argo CD Keycloak 域中创建的其他配置会被删除。
3.5. 修改 Keycloak 资源请求/限制 复制链接链接已复制到粘贴板!
默认情况下,Keycloak 容器使用资源请求和限值创建。您可以更改并管理资源请求。
| 资源 | Requests | Limits |
|---|---|---|
| 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"}} }}]'
$ 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 Operator 创建的 Keycloak 仅保留 Operator 所做的更改。如果 Keycloak 重启,则删除 Keycloak 中的管理员创建的额外配置。