https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>
配置github
身份提供程序以针对GitHub或GitHub Enterprise的OAuth身份验证服务器验证用户名和密码。OAuth促进了OpenShift Container Platform和GitHub或GitHub Enterprise之间的令牌交换流程。
您可以使用GitHub集成连接到GitHub或GitHub Enterprise。对于GitHub Enterprise集成,您必须提供实例的hostname
,并且可以选择提供ca
证书包以用于对服务器的请求。
除非另有说明,否则以下步骤适用于GitHub和GitHub Enterprise。 |
默认情况下,集群中只存在kubeadmin
用户。要指定身份提供程序,您必须创建一个描述该身份提供程序的自定义资源(CR),并将其添加到集群。
OpenShift Container Platform用户名中包含 |
配置GitHub身份验证允许用户使用其GitHub凭据登录到OpenShift Container Platform。为了防止任何拥有GitHub用户ID的人登录到您的OpenShift Container Platform集群,您可以将访问权限限制为仅限于特定GitHub组织中的用户。
要使用GitHub或GitHub Enterprise作为身份提供程序,您必须注册一个应用程序。
在GitHub上注册应用程序
对于GitHub,请单击设置 → 开发者设置 → OAuth应用程序 → 注册新的OAuth应用程序。
对于GitHub Enterprise,请转到您的GitHub Enterprise主页,然后单击设置→开发者设置→注册新应用程序。
输入应用程序名称,例如My OpenShift Install
。
输入主页URL,例如https://oauth-openshift.apps.<cluster-name>.<cluster-domain>
。
可选:输入应用程序描述。
输入授权回调URL,其中URL的末尾包含身份提供程序name
https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>
例如
https://oauth-openshift.apps.openshift-cluster.example.com/oauth2callback/github
单击注册应用程序。GitHub将提供客户端ID和客户端密钥。您需要这些值才能完成身份提供程序配置。
身份提供程序在openshift-config
命名空间中使用OpenShift Container Platform Secret
对象来包含客户端密钥、客户端证书和密钥。
使用以下命令创建一个包含字符串的Secret
对象
$ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config
或者,您可以应用以下YAML来创建密钥
|
您可以使用以下命令定义一个包含文件内容的Secret
对象
$ oc create secret generic <secret_name> --from-file=<path_to_file> -n openshift-config
身份提供商使用 OpenShift Container Platform 的 `ConfigMap` 对象(位于 `openshift-config` 命名空间中)来包含证书颁发机构 (CA) 证书包。这些主要用于包含身份提供商所需的证书包。
此步骤仅适用于 GitHub Enterprise。 |
使用以下命令定义包含证书颁发机构的 OpenShift Container Platform `ConfigMap` 对象。证书颁发机构必须存储在 `ConfigMap` 对象的 `ca.crt` 密钥中。
$ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
或者,您可以应用以下 YAML 来创建 ConfigMap
|
以下自定义资源 (CR) 显示了 GitHub 身份提供商的参数和可接受的值。
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: githubidp (1)
mappingMethod: claim (2)
type: GitHub
github:
ca: (3)
name: ca-config-map
clientID: {...} (4)
clientSecret: (5)
name: github-secret
hostname: ... (6)
organizations: (7)
- myorganization1
- myorganization2
teams: (8)
- myorganization1/team-a
- myorganization2/team-b
1 | 此提供商名称作为前缀添加到 GitHub 数字用户 ID,以形成身份名称。它还用于构建回调 URL。 |
2 | 控制如何在此提供商的身份和 `User` 对象之间建立映射。 |
3 | 可选:指向包含 PEM 编码的证书颁发机构证书包的 OpenShift Container Platform `ConfigMap` 对象的引用,用于验证已配置 URL 的服务器证书。仅在使用非公开信任的根证书的 GitHub Enterprise 中使用。 |
4 | 已注册的 GitHub OAuth 应用程序的客户端 ID。该应用程序必须配置为回调 URL 为 `https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>`。 |
5 | 指向包含 GitHub 发放的客户端密钥的 OpenShift Container Platform `Secret` 对象的引用。 |
6 | 对于 GitHub Enterprise,您必须提供实例的主机名,例如 `example.com`。此值必须与 `/setup/settings` 文件中的 GitHub Enterprise `hostname` 值匹配,并且不能包含端口号。如果未设置此值,则必须定义 `teams` 或 `organizations`。对于 GitHub,请省略此参数。 |
7 | 组织列表。除非设置了 `hostname` 字段,或者 `mappingMethod` 设置为 `lookup`,否则必须设置 `organizations` 或 `teams` 字段。不能与 `teams` 字段一起使用。 |
8 | 团队列表。除非设置了 `hostname` 字段,或者 `mappingMethod` 设置为 `lookup`,否则必须设置 `teams` 或 `organizations` 字段。不能与 `organizations` 字段一起使用。 |
如果指定了 `organizations` 或 `teams`,则只有至少属于列出组织之一的 GitHub 用户才能登录。如果在 `clientID` 中配置的 GitHub OAuth 应用程序不属于该组织,则组织所有者必须授予第三方访问权限才能使用此选项。这可以在组织管理员第一次 GitHub 登录期间完成,也可以从 GitHub 组织设置中完成。 |
有关所有身份提供商共有的参数(例如 `mappingMethod`)的信息,请参阅身份提供商参数。
安装集群后,向其中添加身份提供商,以便用户可以进行身份验证。
创建一个 OpenShift Container Platform 集群。
为您的身份提供商创建自定义资源 (CR)。
您必须以管理员身份登录。
应用已定义的 CR
$ oc apply -f </path/to/CR>
如果 CR 不存在,`oc apply` 将创建一个新的 CR,并可能触发以下警告:`Warning: oc apply should be used on resources created by either oc create --save-config or oc apply`。在这种情况下,您可以安全地忽略此警告。 |
从 OAuth 服务器获取令牌。
只要已删除 `kubeadmin` 用户,`oc login` 命令就会提供有关如何访问网页以检索令牌的说明。
您还可以通过在 Web 控制台中导航到**(?)帮助** → **命令行工具** → **复制登录命令**来访问此页面。
登录到集群,传入令牌进行身份验证。
$ oc login --token=<token>
此身份提供商不支持使用用户名和密码登录。 |
确认用户已成功登录,并显示用户名。
$ oc whoami