当前位置: 首页 > 科技观察

基于KubeSphere的分层管理实践_0

时间:2023-03-15 16:19:56 科技观察

K8s是容器编排和分布式应用部署领域的领导者。在K8s环境下,我们只需要关心应用的业务逻辑,减轻了我们服务器网络和存储的管理负担。对于用户来说,K8s是一个非常复杂的容器编排平台,学习成本非常高。KubeSphere对底层K8s进行抽象,并进行高度产品化,构建全栈多租户容器云平台,为用户提供健壮、安全、功能丰富、极致体验的Web控制台,解决K8s使用门槛高、云原生生态工具复杂等痛点让我们可以专注于业务的快速迭代,其多维度的数据监控为定位问题提供了很大的帮助。为什么要对KubeSphere进行分级管理在KubeSphere中,资源可以在租户之间共享,各种资源可以根据分配的不同角色进行操作。租户与资源之间、资源与资源之间自由度较高,权限粒度比较大。在我们的系统中,资源具有权限级别。例如,低级别用户可以通过邀请、授权等操作操作高级别资源,或者将低级别项目中的Pod调度到高级别节点。到资源。对于跨级操作资源等问题,我们在KubeSphere的基础上实现了分级管理。什么是分级系统分级,顾名思义,就是按照既定的标准对整体进行分解和分类。我们把它抽象成一个金字塔模型。从地基到塔顶有很多层次。我们以公共资源为金字塔的底部,以最高权限的管理员为塔顶。其他资源根据其权限级别划分为不同的级别。低级资源无法访问高级资源,而高级资源可以获取其级别以下的所有资源,构建了这样一个层级递减、层级隔离的层级体系。如何实现分级管理我们定义一个标签kubernetes.io/level代表级别。以多节点集群为例,首先我们将用户、企业空间、节点等资源进行标注,以表示层次。邀请用户加入企业空间或项目时,加入的企业空间或项目的等级不得高于用户等级。同理,项目绑定企业空间时,项目的层级不能高于企业空间的层级。资源得到管理;我们认为同一个项目下的资源层级是一样的,基于项目创建的loads、pod、services等资源层级与项目一致;同时为pod增加node亲和性,使pod可以被调度到不高于其权限级别的Nodes上。比如这里,我们创建了一个权限级别为3的用户demo-user,可以加入权限级别不高于3的企业空间或项目。kind:UserapiVersion:iam.kubesphere.io/v1alpha2metadata:name:demo-userlabels:kubernetes.io/level:3spec:email:demo-user@kubesphere.io创建一个权限级别为2的项目demo-ns,然后根据创建的load、Pod、storage等资源的权限级别项目也是2.apiVersion:v1kind:Namespacemetadata:name:demo-nslabels:kubernetes.io/level:2基于demo-ns项目创建了一个nginxPod,其权限级别也是2。在同时,添加节点亲和性,要求调度到权限级别为2或更低的节点上。apiVersion:apps/v1kind:Podmetadata:labels:kubernetes.io/level:2name:nginxspec:containers:-name:nginximage:nginximagePullPolicy:IfNotPresent端口:-containerPort:80协议:TCP亲和力:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:-matchExpressions:-key:kubernetes.io/leveloperator:Ltvalues:-2-matchExpressions:-key:kubernetes.io/leveloperator:Invalues:-2如何实现资源升级升级在分级管理体系中,levels支持资源的无限划分,只需要定义一个中间值,就可以在两个层级之间插入一个新的层级,而无需操作其他资源;升级或升级资源时,只需要将对应资源的标签修改为Resourcesareupgradeorupgraded。当然,在升级或降级资源时,我们需要对资源进行检查,保证升级时,其上层资源的权限级别不低于target级别;同时,在降级时,其下级资源的权限等级不得高于目标等级。当升级升级的运营条件不满足时,相应的资源需要做相应的调整。Pod在不同层级之间的网络隔离是有层次的。我们要求高级别的Pod能够访问低级别的Pod,但是低级别的Pod不能访问高级别的Pod。如何保证不同层级的Pod之间的网络通信?.当项目没有开启网络隔离时,Pod之间的网络是互通的,所以这里会增加一个黑名单网络策略。apiVersion:networking.k8s.io/v1kind:NetworkPolicymetadata:name:deny-allnamespace:demo-nslabels:kubernetes.io/level:2spec:podSelector:{}policyTypes:-IngresspodSelector:{}作用于项目中的所有Pod,阻止所有传入流量。然后允许标签级别大于目标级别(这里为2)的流量流入(我们不限制Ingress流量)。apiVersion:networking.k8s.io/v1kind:NetworkPolicymetadata:name:level-match-network-policynamespace:demo-nslabels:kubernetes.io/level:2spec:podSelector:matchExpressions:-key:kubernetes.io/leveloperator:Gtvalues:-2policyTypes:-IngressSummaryKubeSphere解决了用户构建、部署、管理和可观察性的痛点,其资源可以在多个租户之间共享。但是在资源有权限级别的场景下,低级别的资源可以操作高级别的资源,导致资源越权管理的问题。为了解决这个问题,我们对KubeSphere进行了改造,以适应租户与资源之间、资源与资源之间的分级管理。同时,在项目的网络策略中,我们加入了黑名单和白名单策略,以增强保证项目之间的网络隔离,让资源管理更加安全。