OAuth 2.0身份提供者

本文档介绍了如何使用基于 OAuth 2.0 协议的外部身份提供者。

下图显示了 KubeSphere 与外部 OAuth 2.0 身份提供者之间的身份验证过程。

oauth2

准备工作

您需要部署一个 Kubernetes 集群,并在集群中安装 KubeSphere。有关详细信息,请参阅在 Linux 上安装在 Kubernetes 上安装

开发 OAuth 2.0 插件

备注

KubeSphere 提供了两个内置的 OAuth 2.0 插件:GitHub 的 GitHubIdentityProvider 和阿里云IDaaS的 AliyunIDaasProvider ,可以根据内置的插件开发其他插件。

  1. 在本地克隆 KubeSphere ,进入本地 KubeSphere 仓库,并在 /pkg/apiserver/authentication/identityprovider/ 目录下创建一个插件的包。

  2. 在插件包中,实现如下接口:

    1. // /pkg/apiserver/authentication/identityprovider/oauth_provider.go
    2. type OAuthProvider interface {
    3. // Exchange identity with a remote server.
    4. IdentityExchange(code string) (Identity, error)
    5. }
    6. type OAuthProviderFactory interface {
    7. // Return the identity provider type.
    8. Type() string
    9. // Apply settings from kubesphere-config.
    10. Create(options oauth.DynamicOptions) (OAuthProvider, error)
    11. }
    1. // /pkg/apiserver/authentication/identityprovider/identity_provider.go
    2. type Identity interface {
    3. // (Mandatory) Return the identifier of the user at the identity provider.
    4. GetUserID() string
    5. // (Optional) Return the name of the user to be referred as on KubeSphere.
    6. GetUsername() string
    7. // (Optional) Return the email address of the user.
    8. GetEmail() string
    9. }
  3. 在插件包的 init() 函数中注册插件。

    1. // Custom plugin package
    2. func init() {
    3. // Change <StructName> to the actual name of the struct that
    4. // implements the OAuthProviderFactory interface.
    5. identityprovider.RegisterOAuthProvider(&<StructName>{})
    6. }
  4. /pkg/apiserver/authentication/options/authenticate_options.go 中导入插件包。

    1. // Change <CustomPackage> to the actual name of your plugin package.
    2. import (
    3. ...
    4. _ "kubesphere.io/kubesphere/pkg/apiserver/authentication/identityprovider/<CustomPackage>"
    5. ...
    6. )
  5. 构建 ks-apiserver 镜像 并部署到您的集群中。

集成身份提供者

  1. admin 身份登录 KubeSphere,将光标移动到右下角 icon ,点击 kubectl,然后执行以下命令来编辑 CRD ClusterConfiguration 中的 ks-installer

    1. kubectl -n kubesphere-system edit cc ks-installer
  2. spec:authentication 部分配置的 oauthOptions:identityProviders 以外的字段信息请参阅设置外部身份认证

  3. 根据开发的身份提供者插件来配置 oauthOptions:identityProviders 中的字段。

    以下是使用 GitHub 作为外部身份提供者的配置示例。详情请参阅 GitHub 官方文档GitHubIdentityProvider 源代码

    1. spec:
    2. authentication:
    3. jwtSecret: ''
    4. authenticateRateLimiterMaxTries: 10
    5. authenticateRateLimiterDuration: 10m0s
    6. oauthOptions:
    7. accessTokenMaxAge: 1h
    8. accessTokenInactivityTimeout: 30m
    9. identityProviders:
    10. - name: github
    11. type: GitHubIdentityProvider
    12. mappingMethod: auto
    13. provider:
    14. clientID: '******'
    15. clientSecret: '******'
    16. redirectURL: 'https://ks-console/oauth/redirect/github'

    同样,您也可以使用阿里云 IDaaS 作为外部身份提供者。详情请参阅阿里云 IDaaS 文档AliyunIDaasProvider 源代码

  4. 字段配置完成后,保存修改,然后等待 ks-installer 完成重启。

    备注

    KubeSphere Web 控制台在 ks-installer 重新启动期间不可用。请等待重启完成。

  5. 进入 KubeSphere 登录界面,点击 Log In with XXX (例如,Log In with GitHub)。

  6. 在外部身份提供者的登录界面,输入身份提供者配置的用户名和密码,登录 KubeSphere 。

    github-login-page