本发明涉及集群管理,特别涉及一种基于keyclock的k8s权限管理系统。
背景技术:
1、随着云计算技术的快速发展,kubernetes,简称k8s,作为一种强大的容器编排工具,得到了广泛应用。kubernetes能够提供强大的资源管理和调度能力,帮助企业实现应用的自动化部署、扩展和管理。然而,随着kubernetes集群规模的扩大和使用场景的复杂化,如何安全、有效地管理用户权限成为了一个重要的问题。
2、现有的kubernetes权限管理主要依赖于基于角色的访问控制rbac机制。虽然基于角色的访问控制rbac能够实现精细的权限控制,但在实际应用中,管理和维护复杂的基于角色的访问控制rbac策略仍然是一项具有挑战性的任务。尤其是在多租户环境下,不同用户、团队之间的权限划分和管理需要更灵活和高效的解决方案。此外,kubernetes原生的权限管理工具对接企业现有的身份认证和权限管理系统(如轻量级目录访问协议ldap、开放授权oauth、安全断言标记语言saml等)也存在一定的难度。
3、为了实现多种认证体系的对接,以及基于角色的访问控制rbac,本发明提出了一种基于keyclock的k8s权限管理系统。
技术实现思路
1、本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于keyclock的k8s权限管理系统。
2、本发明是通过如下技术方案实现的:
3、一种基于keyclock的k8s权限管理系统,其特征在于:包括:
4、客户端模块,负责配置k8s客户端,并创建k8s动态客户端;
5、若用户要操作的资源不属于自定义资源定义crd(custom resourcedefinitions)资源,则调用k8s客户端中对应资源的操作方法,完成资源的增删改查操作;
6、若用户要操作的资源属于自定义资源定义crd资源,则调用k8s动态客户端中自定义资源定义crd资源的操作方法完成资源的增删改查操作;
7、键锁keyclock认证模块,负责安装键锁keyclock,监听用户注册、更新和删除事件,将变化的数据同步到本地数据库,实现统一的身份认证管理;
8、自定义基于角色的访问控制rbac模块,负责在键锁keycloak或自定义客户端中定义角色,并配置用户与角色的绑定关系,确保每个用户都被分配到正确的角色;
9、权限验证模块,负责在客户端通过过滤器或拦截器实现中间件,用于拦截请求,在每个请求前调用自定义基于角色的访问控制rbac模块进行权限验证,确保用户拥有该资源的操作权限;
10、日志记录与审计模块,负责记录每次权限验证的结果,审计日志保存在安全的位置,以便在需要时进行查询和分析,并设置警报以在发生异常权限访问时通知管理员。
11、所述客户端模块配置k8s客户端的实现步骤如下:
12、s1.1、确定需要支持的k8s资源类型,包括但不限于容器组pod、服务service、部署deployment、配置项configmap与自定义资源定义crd;
13、s1.2、确定支持的操作,包括但不限于创建、读取、更新与删除;
14、s1.3、安装k8s客户端库;
15、s1.4、安装yaml(yaml ain't markup language)解析库;
16、s1.5、使用加载kube配置函数kubernetes.config.load_kube_config()加载本地的kube配置kubeconfig文件,配置k8s客户端。
17、接收到用户提供的yaml文件后,所述客户端模块进行如下操作:
18、s2.1、使用pyyaml库解析用户提供的yaml文件,将其转换为python字典对象;
19、s2.2、从yaml文件中提取应用程序编程接口api版本apiversion和类型kind以及所属命名空间metadata.namespace字段,以识别资源类型;
20、s2.3、根据类型kind字段的解析值判断用户要操作的资源是否属于自定义资源定义crd(custom resource definitions)资源:
21、若其类型kind不属于自定义资源定义crd,则将yaml文件转化成json格式,根据用户的操作类型调用k8s客户端中对应资源的操作方法,完成资源的增删改查操作;
22、若其类型kind属于自定义资源定义crd,则根据类型kind调用k8s客户端的自定义资源定义crd查询接口,获取该类型kind对应的自定义资源定义crd详细信息;解析自定义资源定义crd详细信息,获取其中的应用程序编程接口api群组spec.group,资源种类spec.names.kind,资源的复数形式spec.names.plural,资源类型的单数和复数名称spec.names与单数形式singular字段。
23、所述客户端模块先将类型kind属于自定义资源定义crd的yaml文件转化成json格式,然后根据用户的操作类型调用k8s动态客户端中自定义资源定义crd的操作方法,并传入步骤s2.3中获取的应用程序编程接口api群组spec.group,资源种类spec.names.kind,资源的复数形式spec.names.plural,资源类型的单数和复数名称spec.names与单数形式singular字段,以及步骤s2.2中获取的所属命名空间metadata.namespace字段,完成资源的增删改查操作。
24、所述键锁keyclock认证模块实现统一的身份认证管理,步骤如下:
25、s3.1、安装键锁keyclock,键锁keyclock对接用户现有的权限管理系统,包括但不限于轻量级目录访问协议ldap系统、开放授权oauth系统与安全断言标记语言saml系统,实现统一的身份认证管理;
26、s3.2、在键锁keycloak中创建一个新的租户realm,用于隔离不同的用户群体;
27、s3.3、在租户realm下创建客户端,配置客户端的回调统一资源定位符url与有效重定向统一资源标识符uri,以便与自定义客户端进行交互;
28、s3.4、通过键锁keycloak的程序接口admin rest api监听用户注册、更新和删除事件;
29、当监听到用户信息变化时,将变化的数据同步到本地数据库,包括用户的基本信息和角色信息。
30、所述自定义基于角色的访问控制rbac模块先在键锁keycloak或自定义客户端中定义角色,每个角色对应一组权限;
31、同时,明确每个权限的具体内容,包括但不限于读取pods与创建deployments,确保权限描述清晰且易于理解。
32、所述日志记录与审计模块记录每次权限验证的结果,包括请求的时间、用户、操作类型、资源类型和结果。
33、一种基于keyclock的k8s权限管理设备,其特征在于:包括存储器和处理器;所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现上述的系统。
34、一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的系统。
35、本发明的有益效果是:该基于keyclock的k8s权限管理系统,通过键锁keycloak实现了统一的身份认证管理,提高了权限管理的灵活性和效率,同时简洁易用,能够与现有系统无缝对接,降低了使用和维护成本。
1.一种基于keyclock的k8s权限管理系统,其特征在于:包括:
2.根据权利要求1所述的基于keyclock的k8s权限管理系统,其特征在于:所述客户端模块配置k8s客户端的实现步骤如下:
3.根据权利要求2所述的基于keyclock的k8s权限管理系统,其特征在于:接收到用户提供的yaml文件后,所述客户端模块进行如下操作:
4.根据权利要求3所述的基于keyclock的k8s权限管理系统,其特征在于:所述客户端模块先将类型kind属于自定义资源定义crd的yaml文件转化成json格式,然后根据用户的操作类型调用k8s动态客户端中自定义资源定义crd的操作方法,并传入步骤s2.3中获取的应用程序编程接口api群组spec.group,资源种类spec.names.kind,资源的复数形式spec.names.plural,资源类型的单数和复数名称spec.names与单数形式singular字段,以及步骤s2.2中获取的所属命名空间metadata.namespace字段,完成资源的增删改查操作。
5.根据权利要求1所述的基于keyclock的k8s权限管理系统,其特征在于:所述键锁keyclock认证模块实现统一的身份认证管理,步骤如下:
6.根据权利要求1所述的基于keyclock的k8s权限管理系统,其特征在于:所述自定义基于角色的访问控制rbac模块先在键锁keycloak或自定义客户端中定义角色,每个角色对应一组权限;
7.根据权利要求1所述的基于keyclock的k8s权限管理系统,其特征在于:所述日志记录与审计模块记录每次权限验证的结果,包括请求的时间、用户、操作类型、资源类型和结果。
8.一种基于keyclock的k8s权限管理设备,其特征在于:包括存储器和处理器;所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现如权利要求1至7任意一项所述的系统。
9.一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述的系统。