版本:kubesphere 4.1.2
之前我们已经完成了kubesphere和ldap的对接。现在公司的员工可以使用工号和密码登录。
但是初次登录后,用户是没有任何权限的,需要联系管理员配置,这就比较麻烦了。
所以,我们可以使用代码根据规划提前创建用户权限。
在kubesphere中,用户账号和权限都是kubesphere的crd资源。
分别是
- users.iam.kubesphere.io 存用户信息
- workspacerolebindings.iam.kubesphere.io 绑定用户和企业空间
- rolebindings.iam.kubesphere.io 配置用户和namespace的关系
我们使用kubesphere默认的角色,所以只涉及这三个crd。如果你使用了自定义角色,那就要做其他修改了。
参考一个存在的账号,把一些无关的信息删除,留下有用的字段。
{}换成你自己的数据。
创建用户
这一步不是必须的,因为用户在第一次登录时,会自动创建这个crd。
kubesphere的用户是crd: users.iam.kubesphere.io
apiVersion: iam.kubesphere.io/v1beta1
kind: User
metadata:
annotations:
iam.kubesphere.io/globalrole: platform-regular
finalizers:
- finalizers.kubesphere.io/users
labels:
iam.kubesphere.io/identify-provider: openldap
iam.kubesphere.io/origin-uid: “{工号}”
name: “{工号}”
spec:
email: {邮箱}
企业空间和用户的绑定:
workspacerolebindings.iam.kubesphere.io
我们参考一个已经配置好的账户,以企业空间的regular权限为例。我们的策略是给用户企业空间的regular权限。这是一个最小查看权限。
$ kubectl get workspacerolebindings.iam.kubesphere.io xxx-yyy-regular -oyaml
去掉不需要的字段后。以regular权限为例
apiVersion: iam.kubesphere.io/v1beta1
kind: WorkspaceRoleBinding
metadata:
finalizers:
- finalizers.kubesphere.io/workspacerolebindings
labels:
iam.kubesphere.io/role-ref: {企业空间}-viewer
iam.kubesphere.io/user-ref: “{工号}”
kubesphere.io/workspace: {企业空间}
name: {工号}-{企业空间}-regular
ownerReferences:
- apiVersion: tenant.kubesphere.io/v1beta1
blockOwnerDeletion: true
controller: true
kind: WorkspaceTemplate
name: {企业空间}
uid: {企业空间的uid}
roleRef:
apiGroup: iam.kubesphere.io
kind: WorkspaceRole
name: {企业空间}-regular
subjects:
- apiGroup: iam.kubesphere.io
kind: User
name: “{工号}”
其中企业空间的uid,查看WorkspaceTemplate资源
namespace和用户的绑定
以operator权限为例。
我们的策略是测试环境给用户namespace的operator权限。
生产环境给viewer权限
$ kubectl -n xxnamespace get rolebindings.iam.kubesphere.io xxx-operator -oyaml
apiVersion: iam.kubesphere.io/v1beta1
kind: RoleBinding
metadata:
labels:
iam.kubesphere.io/role-ref: operator
iam.kubesphere.io/user-ref: “{工号}”
name: {工号}-operator
namespace: {namespace}
roleRef:
apiGroup: iam.kubesphere.io
kind: Role
name: operator
subjects:
- apiGroup: iam.kubesphere.io
kind: User
name: “{工号}”
然后使用client-go的dynamic client编写对应的代码。
可以提前给用户配置好需要的权限。等用户登录的时候,权限就是已经配好的。