×

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

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

除非另有说明,否则以下步骤适用于GitHub和GitHub Enterprise。

关于OpenShift Container Platform中的身份提供商

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

OpenShift Container Platform用户名中包含/:%不受支持。

关于GitHub身份验证

配置GitHub身份验证允许用户使用其GitHub凭据登录到OpenShift Container Platform。为了防止任何拥有GitHub用户ID的人登录到您的OpenShift Container Platform集群,您可以将访问权限限制为仅限于特定GitHub组织中的用户。

注册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.openshift-cluster.example.com/oauth2callback/github
  6. 单击注册应用程序。GitHub将提供客户端ID和客户端密钥。您需要这些值才能完成身份提供程序配置。

创建密钥

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

步骤
  • 使用以下命令创建一个包含字符串的Secret对象

    $ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config

    或者,您可以应用以下YAML来创建密钥

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
      namespace: openshift-config
    type: Opaque
    data:
      clientSecret: <base64_encoded_client_secret>
  • 您可以使用以下命令定义一个包含文件内容的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

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ca-config-map
      namespace: openshift-config
    data:
      ca.crt: |
        <CA_certificate_PEM>

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 控制如何在此提供商的身份和 `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)。

  • 您必须以管理员身份登录。

步骤
  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 控制台中导航到**(?)帮助** → **命令行工具** → **复制登录命令**来访问此页面。

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

    $ oc login --token=<token>

    此身份提供商不支持使用用户名和密码登录。

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

    $ oc whoami