4.6. 配置 GitHub 或 GitHub Enterprise 身份提供程序

配置 github 身份提供程序,针对 GitHub 或 GitHub Enterprise 的 OAuth 身份验证服务器验证用户名和密码。OAuth 可以协助 OpenShift Container Platform 和 GitHub 或 GitHub Enterprise 之间的令牌交换流。

您可以使用 GitHub 集成来连接 GitHub 或 GitHub Enterprise。对于 GitHub Enterprise 集成,您必须提供实例的 hostname,并可选择提供要在服务器请求中使用的 ca 证书捆绑包。

注意

除非有所注明,否则以下步骤同时适用于 GitHub 和 GitHub Enterprise。

配置 GitHub 身份验证后,用户可使用 GitHub 凭证登录 OpenShift Container Platform。为防止具有任何 GitHub 用户 ID 的任何人登录 OpenShift Container Platform 集群,您可以将访问权利限制给仅属于特定 GitHub 组织的用户。

4.6.1. 关于 OpenShift Container Platform 中的身份提供程序

默认情况下,集群中只有 kubeadmin 用户。要指定身份提供程序,您必须创建一个自定义资源 (CR) 来描述该身份提供程序并把它添加到集群中。

注意

OpenShift Container Platform 用户名不能包括 /:%

4.6.2. 注册 GitHub 应用程序

要将 GitHub 或 GitHub Enterprise 用作身份提供程序,您必须注册要使用的应用程序。

流程

  1. 在 GitHub 上注册应用程序:

  2. 输入应用程序名称,如 My OpenShift Install
  3. 输入主页 URL,如 https://oauth-openshift.apps.<cluster-name>.<cluster-domain>
  4. 可选:输入应用程序描述。
  5. 输入授权回调 URL,其中 URL 末尾包含身份提供程序 name

    https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>

    例如:

    https://oauth-openshift.apps.example-openshift-cluster.com/oauth2callback/github/
  6. 点击 Register application。Github 会提供客户端 ID 和客户端 Secret。您需要使用这些值来完成身份提供程序配置。

4.6.3. 创建 secret

身份提供程序使用 openshift-config 命名空间中的 OpenShift Container Platform secret 来包含客户端 secret、客户端证书和密钥。

  • 您可以使用以下命令,定义一个包含字符串的 OpenShift Container Platform Secret。

    $ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config
  • 您可以使用以下命令,定义一个文件(如证书文件)内容的 OpenShift Container Platform Secret。

    $ oc create secret generic <secret_name> --from-file=/path/to/file -n openshift-config

4.6.4. 创建 ConfigMap

身份提供程序使用 openshift-config 命名空间中的 OpenShift Container Platform ConfigMap 来包含证书颁发机构捆绑包。主要用于包含身份提供程序所需的证书捆绑包。

  • 使用以下命令,定义包含证书颁发机构的 OpenShift Container Platform ConfigMap。证书颁发机构必须存储在 ConfigMap 的 ca.crt 键中。

    $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config

4.6.5. GitHub CR 示例

以下自定义资源 (CR) 显示 GitHub 身份提供程序的参数和可接受值。

GitHub CR

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
控制如何在此提供程序的身份和用户对象之间建立映射。
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 发布的客户端 Secret 的 OpenShift Container Platform Secret 的引用。
6
对于 GitHub Enterprise,您必须提供实例的主机名,如 example.com。这个值必须与 /setup/settings 文件中的 GitHub Enterprise hostname 值匹配,且不可包括端口号。如果未设定这个值,则必须定义 teamsorganizations。对于 GitHub,请省略此参数。
7
可选的组织列表。如果指定,只有至少是一个所列组织成员的 GitHub 用户才能登录。如果在 clientID 中配置的 GitHub OAuth 应用程序不归该组织所有,则组织所有者必须授予第三方访问权限才能使用此选项。这可以在组织管理员第一次登录 GitHub 时完成,也可以在 GitHub 组织设置中完成。不可与 teams 字段结合使用。
8
可选的团队列表。如果指定,只有是至少一个列出团队的成员的 GitHub 用户才能登录。如果在 clientID 中配置的 GitHub OAuth 应用程序不归该团队的组织所有,则组织所有者必须授予第三方访问权限才能使用此选项。这可以在组织管理员第一次登录 GitHub 时完成,也可以在 GitHub 组织设置中完成。不可与 organizations 字段结合使用。

4.6.6. 将身份提供程序添加到集群中

安装集群之后,请在其中添加一个身份提供程序,以便您的用户可以进行身份验证。

先决条件

  • 创建 OpenShift Container Platform 集群。
  • 为身份提供程序创建自定义资源 (CR)。
  • 必须已经以管理员身份登录。

流程

  1. 应用定义的 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。在这种情况下,您可以忽略这个警告。

  2. 从 OAuth 服务器获取令牌。

    只要 kubeadmin 用户已被删除,oc login 命令就会提供如何访问可以获得令牌的网页的说明。

    您还可以通过使用 web 控制台的 (?)访问此页面。 HelpCommand Line ToolsCopy Login Command.

  3. 登录到集群,提供令牌进行身份验证。

    $ oc login --token=<token>
    注意

    这个身份提供程序不支持使用用户名和密码登录。

  4. 确认用户登录成功,并显示用户名。

    $ oc whoami