第三方认证系统

外部认证系统接入

KubeCube 中包含一套自有的认证系统,同时也支持多种类型的外部认证系统的接入。本文档介绍了如何在 KubeCube 中接入 GitHub、Ldap 以及通用认证接口三种认证系统的操作步骤。

GitHub 认证

1. 登记应用信息

GitHub 注册一个 Oauth 应用,Homepage URL 和 Authorization callback URL 均填写 http://{kubecube_host}/#/login,创建成功后 Github 生成一个 ClientId,再手动创建一个 Client secret。

2. 修改配置文件

在管控集群修改 configmap:kubectl edit cm kubecube-auth-config -n kubecube-system,修改内容如下:

apiVersion: v1
kind: ConfigMap
data:
  github: |
    enabled: true
    clientId: 80b802dc59eeb847ed00
    clientSecret: 83dc8eb788f706de3449d45e61f45ebdca433de2
    host: http://10.219.196.107:30080    

参数说明如下:

参数说明类型默认值
enabled是否开启 Github 登录booleanfalse
clientIdGitHub 授权的 ClientIdstring
clientSecretGitHub 授权的 Client secretstring
hostKubeCube 服务器地址string

3. 访问前端登录页面

访问 KubeCube 前端登录页面,选择使用GitHub账号登录;

external-auth

授权应用,点击 Authorize xxxapp,即可登录到 KubeCube。

KubeCube 会使用 Github 返回的信息自动在集群中创建该用户,并标记该用户的 “LOGINTYPE” 为 “github”。

Ldap 认证

KubeCube 支持接入用户已部署的 LDAP 来进行认证。具体步骤如下。

1. 添加启动参数

为 KubeCube Deployment 添加启动参数,参数说明如下:

参数说明类型是否必填默认值示例
ldap-is-enable是否开启 Ldap 登录booleanfalsetrue
ldap-serverLdap 服务器地址string10.219.196.107
ldap-portLdap 服务器端口号string389389
ldap-baseLdap 查询分区stringdc=example,dc=com
ldap-admin-user-accountLdap 管理员账号stringcn=admin,dc=example,dc=com
ldap-admin-passwordLdap 管理员密码stringadmin123456
ldap-object-classLdap 对象类stringpersonperson
ldap-login-name-config用户名所在配置stringuidcn
ldap-object-categoryLdap objectcategorystringdc=example,dc=com

示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubecube
  namespace: kubecube-system
spec:
  template:
    spec:
      containers:
      - args:
        - -ldap-is-enable=true
        - -ldap-object-class=person
        - -ldap-server=10.219.196.107
        - -ldap-base=dc=example,dc=com
        - -ldap-admin-user-account=cn=admin,dc=example,dc=com
        - -ldap-admin-password=admin123456
        - -ldap-login-name-config=cn

2. 请求登录

接口路径
/api/v1/cube/login
接口方法

POST

请求参数
参数名称参数说明参数来源参数类型是否必须备注
name用户名bodystring
password密码bodystring
loginType登录方式bodystringldap
响应

如果 Ldap 返回认证成功,KubeCube 在集群中创建该用户,并标记该用户的 “LOGINTYPE” 为 “ldap”。

响应码状态描述响应体
200OK请求成功,返回在集群中创建的User信息User
数据模型
User
参数名称参数说明参数类型是否必须备注
kindUserstring
apiVersionuser.kubecube.io/v1string
metadata元数据Metadata
specUserSpec
statusUserStatus
Metadata
参数名称参数说明参数类型是否必须备注
name该用户在集群中的名称string
labels标签map[string]stringLdap返回的真实用户名保存在标签中
creationTimestamp创建此对象时的时间戳Time
generation所需状态的特定生成的序列号integer
uid资源对象在集群中的唯一标识string
selfLink资源关联的urlstring
UserSpec
参数名称参数说明参数类型是否必须备注
loginType登录方式stringldap
UserStatus
参数名称参数说明参数类型是否必须备注
lastLoginTime上次登录时间Time
lastLoginIP上次登录IPstring
请求示例
curl https://0.0.0.0:7443/api/v1/cube/login -X POST -d '{"name": "test123","password":"123456","loginType":"ldap"}' --header "Content-Type: application/json" 
返回示例
{
	"kind": "User",
	"apiVersion": "user.kubecube.io/v1",
  "metadata": {
		"labels": {
			"name": "test123"
		},
	"spec": {
		"loginType": "ldap",
	},
	"status": {
		"lastLoginTime": "2022-07-06T06:25:37Z",
		"lastLoginIP": "10.219.196.107"
	}
}

通用认证

通用认证指的是通过请求第三方接口的方式进行认证。KubeCube 提供了一种通用的接入方式,但对接口的返回有一定要求。具体步骤如下。

1. 接口准备

第三方认证接口要求:

  1. 请求 url 为配置的固定值,KubeCube 会将请求携带的 header 进行转发,因此第三方接口对 header 进行认证;
  2. 接口返回格式为 map[string]interface{},其中包含一组值为 key=“name”,value=“{用户名}”。

2. 添加启动参数

为 KubeCube Deployment 添加启动参数,参数说明如下:

参数说明类型是否必填默认值示例
generic-auth-is-enable是否开启通用认证方式booleanfalsetrue
generic-auth-url第三方认证urlstringhttps://kubecube123.com/api/v1/demo/auth
generic-auth-method第三方认证请求方式stringGET
generic-auth-scheme请求协议stringhttphttps
generic-auth-insecure-skip-verify是否跳过安全校验stringtrue
generic-auth-tls-certtls证书stringLS0NGc9PQotLS0tLUVOFURS0tLS0t
generic-auth-tls-keytls密钥stringLS0NsfGcQotfdLS0tLUVOFURtLS0ta1

示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubecube
  namespace: kubecube-system
spec:
  template:
    spec:
      containers:
      - args:
        - -generic-auth-is-enable=true
        - -generic-auth-url=https://kubecube123.com/api/v1/demo/auth
        - -generic-auth-method=GET
        - -generic-auth-scheme=https
        - -generic-auth-insecure-skip-verify=true

开启通用认证方式后,用户可跳过登录直接访问 KubeCube。KubeCube 会将请求携带的 header 转发给配置的第三方认证平台,由第三方认证平台返回的结果决定请求是否通过认证。

最后修改 January 9, 2023 : add external auth doc (568d7672)