OAuth 2.0身份提供者
本文档介绍了如何使用基于 OAuth 2.0 协议的外部身份提供者。
下图显示了 KubeSphere 与外部 OAuth 2.0 身份提供者之间的身份验证过程。
准备工作
您需要部署一个 Kubernetes 集群,并在集群中安装 KubeSphere。有关详细信息,请参阅在 Linux 上安装和在 Kubernetes 上安装。
开发 OAuth 2.0 插件
备注
在本地克隆 KubeSphere ,进入本地 KubeSphere 仓库,并在
/pkg/apiserver/authentication/identityprovider/
目录下创建一个插件的包。在插件包中,实现如下接口:
// /pkg/apiserver/authentication/identityprovider/oauth_provider.go type OAuthProvider interface { // Exchange identity with a remote server. IdentityExchange(code string) (Identity, error) } type OAuthProviderFactory interface { // Return the identity provider type. Type() string // Apply settings from kubesphere-config. Create(options oauth.DynamicOptions) (OAuthProvider, error) }
// /pkg/apiserver/authentication/identityprovider/identity_provider.go type Identity interface { // (Mandatory) Return the identifier of the user at the identity provider. GetUserID() string // (Optional) Return the name of the user to be referred as on KubeSphere. GetUsername() string // (Optional) Return the email address of the user. GetEmail() string }
在插件包的
init()
函数中注册插件。// Custom plugin package func init() { // Change <StructName> to the actual name of the struct that // implements the OAuthProviderFactory interface. identityprovider.RegisterOAuthProvider(&<StructName>{}) }
在
/pkg/apiserver/authentication/options/authenticate_options.go
中导入插件包。// Change <CustomPackage> to the actual name of your plugin package. import ( ... _ "kubesphere.io/kubesphere/pkg/apiserver/authentication/identityprovider/<CustomPackage>" ... )
构建 ks-apiserver 镜像 并部署到您的集群中。
集成身份提供者
以
admin
身份登录 KubeSphere,将光标移动到右下角 ,点击 kubectl,然后执行以下命令来编辑 CRDClusterConfiguration
中的ks-installer
:kubectl -n kubesphere-system edit cc ks-installer
在
spec:authentication
部分配置的oauthOptions:identityProviders
以外的字段信息请参阅设置外部身份认证。根据开发的身份提供者插件来配置
oauthOptions:identityProviders
中的字段。以下是使用 GitHub 作为外部身份提供者的配置示例。详情请参阅 GitHub 官方文档和 GitHubIdentityProvider 源代码 。
spec: authentication: jwtSecret: '' authenticateRateLimiterMaxTries: 10 authenticateRateLimiterDuration: 10m0s oauthOptions: accessTokenMaxAge: 1h accessTokenInactivityTimeout: 30m identityProviders: - name: github type: GitHubIdentityProvider mappingMethod: auto provider: clientID: '******' clientSecret: '******' redirectURL: 'https://ks-console/oauth/redirect/github'
同样,您也可以使用阿里云 IDaaS 作为外部身份提供者。详情请参阅阿里云 IDaaS 文档和 AliyunIDaasProvider 源代码。
字段配置完成后,保存修改,然后等待 ks-installer 完成重启。
备注
KubeSphere Web 控制台在 ks-installer 重新启动期间不可用。请等待重启完成。进入 KubeSphere 登录界面,点击 Log In with XXX (例如,Log In with GitHub)。
在外部身份提供者的登录界面,输入身份提供者配置的用户名和密码,登录 KubeSphere 。
反馈
这篇文章对您有帮助吗?
通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知
感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。