8.2. 为直接身份验证配置外部 OIDC 身份提供程序
您可以将 OpenShift Container Platform 配置为直接使用外部 OIDC 身份提供程序来发布令牌以进行身份验证。
使用 OIDC 身份提供程序直接验证只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
-
您已启用了
TechPreviewNoUpgrade功能集。 您已配置了外部身份验证供应商。
此流程使用 Keycloak 作为身份提供程序,并假设您配置了以下客户端:
-
名为
console-test的 Web 控制台的机密客户端,有效的重定向 URI 设置为https://<openshift_console_route>/auth/callback -
OpenShift CLI (
oc)的公共客户端,名为oc-cli-test,有效重定向 URI 设置为http://localhost:8080
-
名为
-
您可以访问安装程序为集群生成的
kubeconfig文件。 - 您已备份了任何现有的身份验证配置,以防您需要使用内置的 OAuth 服务器进行身份验证。
流程
-
确保您使用安装程序生成的
kubeconfig文件,或者另一个长期以集群管理员身份登录的方法。 运行以下命令,创建允许您通过 Web 控制台进行身份验证的 secret:
oc create secret generic console-secret \ --from-literal=clientSecret=<secret_value> \ -n openshift-config$ oc create secret generic console-secret \ --from-literal=clientSecret=<secret_value> \1 -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<secret_value>替换为身份提供程序中console-test客户端的 secret 值。
可选:通过运行以下命令,创建包含供应商的证书颁发机构捆绑包的配置映射:
oc create configmap keycloak-oidc-ca --from-file=ca-bundle.crt=my-directory/ca-bundle.crt \ -n openshift-config$ oc create configmap keycloak-oidc-ca --from-file=ca-bundle.crt=my-directory/ca-bundle.crt \1 -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定供应商的
ca-bundle.crt文件的路径。
运行以下命令来编辑身份验证配置:
oc edit authentication.config/cluster
$ oc edit authentication.config/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将
type字段设置为OIDC,为供应商配置oidcProviders字段,并将webhookTokenAuthenticator字段设置为null来更新身份验证配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必须设置为
OIDC以指示使用外部 OIDC 身份提供程序。 - 2
- 当
type设为OIDC时,必须设置为null。 - 3
- OIDC 供应商配置。目前,只允许一个 OIDC 供应商配置。
- 4
- 用于配置映射的可选字段,用于为集群身份构建额外属性。
- 5
- 为集群身份构建组名称的声明名称。
- 6
- 配置用于为集群身份构造 uid 的声明映射的可选字段。
- 7
- 为集群身份构建用户名的声明名称。
- 8
- 此身份验证提供程序发布令牌的受众列表。
- 9
- 包含
ca-bundle.crt键的配置映射名称。如果未设置,则使用系统信任。 - 10
- 令牌签发者的 URL。
- 11
- 外部 OIDC 供应商的名称。
- 12
- 供应商用于 OpenShift CLI (
oc)的客户端 ID。 - 13
- 您的供应商用于 OpenShift Container Platform Web 控制台的客户端 ID。
- 14
- 存储控制台客户端的 secret 值的 secret 名称。
有关所有可用参数的详情,请参阅"OIDC 供应商配置参数"。
- 退出并保存更改以应用新配置。
等待集群向所有节点推出新修订版本。
运行以下命令,检查 Kubernetes API 服务器 Operator 状态:
oc get co kube-apiserver
$ oc get co kube-apiserverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE kube-apiserver 4.20.0 True True False 85m NodeInstallerProgressing: 2 node are at revision 8; 1 node is at revision 10
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE kube-apiserver 4.20.0 True True False 85m NodeInstallerProgressing: 2 node are at revision 8; 1 node is at revision 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上例中的消息显示一个节点已进入新修订版本,两个节点还没有更新。根据集群大小,可能需要 20 分钟或更长时间向所有节点推出新修订版本。
-
要排除任何问题,您还可以检查 Cluster Authentication Operator 和
kube-apiserverpod 日志中的错误。
验证
通过与您的身份提供程序进行身份验证,验证您可以登录到 OpenShift CLI (
oc):运行以下命令登录:
oc login --exec-plugin=oc-oidc \ --issuer-url=https://keycloak-keycloak.apps.example.com/realms/master \ --client-id=oc-cli-test \ --extra-scopes=email --callback-port=8080 \ --oidc-certificate-authority my-directory/ca-bundle.crt$ oc login --exec-plugin=oc-oidc \1 --issuer-url=https://keycloak-keycloak.apps.example.com/realms/master \2 --client-id=oc-cli-test \3 --extra-scopes=email --callback-port=8080 \ --oidc-certificate-authority my-directory/ca-bundle.crt4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Please visit the following URL in your browser: http://localhost:8080
Please visit the following URL in your browser: http://localhost:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在浏览器中打开 http://localhost:8080。
使用身份提供程序中的凭证进行身份验证。
身份验证成功后,您应该在终端中看到类似以下输出的消息:
Logged into "https://api.my-cluster.example.com:6443" as "oidc-user-test:user1@example.com" from an external oidc issuer.
Logged into "https://api.my-cluster.example.com:6443" as "oidc-user-test:user1@example.com" from an external oidc issuer.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通过与身份提供程序进行身份验证来验证您可以登录到 OpenShift Container Platform Web 控制台:
在浏览器中打开集群的 Web 控制台 URL。
您将被重定向到您的身份提供程序以登录。
使用身份提供程序中的凭证进行身份验证。
验证您是否成功登录,并重定向到 OpenShift Container Platform Web 控制台。
8.2.1. OIDC 供应商配置参数 复制链接链接已复制到粘贴板!
下表列出了用于直接身份验证的所有可用 OIDC 供应商参数:
| 参数 | 描述 |
|---|---|
|
| 配置 Kubernetes API 服务器将身份提供程序发布的 JSON Web 令牌(JWT)中转换声明的规则到集群身份。 |
|
| 用于配置用于为集群身份构建额外属性的映射的可选字段。省略时,集群身份上不会有额外的属性。额外映射的键值必须是唯一的。最多可提供 32 个额外属性映射。 |
|
| 指定用作额外属性键的字符串的必填字段。有以下限制:
|
|
|
指定 CEL 表达式的必填字段,用于指定从 JWT 令牌声明中提取额外属性值。
|
|
| 配置身份提供程序发布的 JWT 令牌中的声明应如何构建集群身份组。引用声明时,如果 JWT 令牌中存在声明,则其值必须是以逗号分隔的组列表。 |
|
| 配置 JWT 令牌声明,其值分配给与此映射关联的 cluster identity 字段。 |
|
| 配置在将 JWT 声明映射到集群身份属性的过程中应用于集群身份属性的前缀。 |
|
|
配置用于为集群身份构建 UID 的声明映射的可选字段。省略时,这意味着用户没有建议,平台会被保留选择默认值,这可能会随时间变化。当前的默认值是使用 |
|
|
指定映射中使用的 JWT 令牌声明的可选字段。此声明的值将分配给关联此映射的字段。要指定声明,请为
您必须设置 |
|
|
指定 CEL 表达式的可选字段,用于从 JWT 令牌声明生成字符串值。使用
CEL 表达式可以通过 CEL 变量声明 访问令牌
您必须设置 |
|
| 配置身份提供程序发布的 JWT 令牌中的声明应如何构建集群身份的用户名。 |
|
| 配置 JWT 令牌声明,其值分配给与此映射关联的 cluster identity 字段。 |
|
|
配置应添加到 JWT 声明值的前缀。当 |
|
|
配置在将 JWT 声明映射到集群身份属性期间应用到集群身份用户名属性的前缀。不能是空字符串 ( |
|
|
配置如何将前缀应用到在
当设置为
当设置为 如果省略,则表示没有意见,平台将选择任何要应用的前缀,它可能会随着时间有所变化。
目前,当声明不是 |
|
|
配置 Kubernetes API 服务器使用的规则来验证身份提供程序发布的 JWT 令牌中的声明。验证规则通过 |
|
| 配置 Kubernetes API 服务器用来验证传入的 JWT 是否有效时所需的声明和值。 |
|
|
配置所需声明的名称。从 JWT 声明获取时,声明必须是字符串值。不能是空字符串 ( |
|
|
配置在从传入 JWT 声明中获取时, |
|
|
配置验证规则的类型。允许的值是
当设置为 |
|
| 一个必填字段,用于配置平台如何与身份提供程序进行交互,以及 Kubernetes API 服务器如何评估从身份提供程序发布的令牌。 |
|
|
一个必填字段,用于配置由身份提供程序发布的 JWT 令牌必需分发到的可接受的受众。至少一个条目必须与 JWT 令牌中的 |
|
|
配置 Kubernetes API 服务器使用的证书颁发机构,以在获取发现信息时验证与身份提供程序的连接。如果没有指定,则使用系统信任。如果指定,它必须引用 |
|
| 引用的配置映射的名称。 |
|
|
配置用于由身份提供程序发布令牌的 URL。Kubernetes API 服务器通过与 JWT 中的 |
|
|
配置与身份提供程序关联的唯一人类可读标识符的必填字段。它用于区分多个身份提供程序,且不会影响令牌验证或身份验证机制。不能是空字符串 ( |
|
| 配置集群、平台客户端应如何从身份提供程序请求令牌。不能超过 20 个条目,且条目必须具有唯一的命名空间/名称对。 |
|
|
从身份提供程序配置客户端标识符,平台组件用于向身份提供程序发出的身份验证请求。身份提供程序必须接受此标识符,以便平台组件能够使用身份提供程序作为身份验证模式。不能是空字符串 ( |
|
| 配置平台组件在向身份提供程序发出身份验证请求时使用的客户端 secret。 如果没有指定,则不会在向身份提供程序发出身份验证请求时使用客户端 secret。
指定后,它会在 公共客户端不需要客户端 secret,但私有客户端需要客户端 secret 与身份提供程序一起使用。 |
|
| 所引用的 secret 的名称。 |
|
|
指定配置为使用身份提供程序作为身份验证模式的平台组件的名称。它与 |
|
|
指定将平台组件配置为使用身份提供程序作为身份验证模式运行的命名空间。它与 |
|
| 配置在向身份提供程序发出身份验证请求时平台组件请求的额外范围。如果您配置了需要特定范围的声明映射,在标准 OIDC 范围之外请求特定范围的声明映射,这很有用。如果省略,则不会请求其他范围。 |