作者:许伟,航天网信研发工程师

K8s 是容器编排和分布式应用部署领域的领导者,在 K8s 环境中,我们只需要关心应用的业务逻辑,减轻了我们服务器网络以及存储等方面的管理负担。对于一个用户而言,K8s 是一个很复杂的容器编排平台,学习成本非常高。KubeSphere 抽象了底层的 K8s,并进行了高度的产品化,构建了一个全栈的多租户容器云平台,为用户提供了一个健壮、安全、功能丰富、具备极致体验的 Web 控制台,解决了 K8s 使用门槛高和云原生生态工具庞杂等痛点,使我们可以专注于业务的快速迭代,其多维度的数据监控,对于问题的定位,提供了很大的帮助。

为什么要在 KuberSphere 上实现分级管理

在 KubeSphere 中,资源可以在租户之间共享,根据分配的不同角色,可以对各种资源进行操作。租户与资源之间、资源与资源之间的自由度很高,权限粒度也比较大。在我们的系统中,资源是有权限等级的,像是低等级用户可以通过邀请、赋予权限等操作来操作高等级资源,或者像是低等级项目中的 Pod 可以调度到高等级的节点上,对资源。诸如此类跨等级操作资源等问题,我们在 KubeSphere 基础上来实现了分级管理。

什么是分级体系

分级,顾名思义就是按照既定的标准对整体进行分解、分类。我们将其抽象成一个金字塔模型,从地基到塔顶会有很多个层级,我们将公共资源作为金字塔的地基,拥有最高权限的 admin 作为塔顶,其他资源按照权限等级划分成不同等级。低层级资源是不能访问高等级资源,高等级资源可以获取它等级之下的所有资源,构建了这样一个权益递减、层级间隔离的分级体系。

如何实现分级管理

我们定义了一个代表等级的标签 kubernetes.io/level。以一个多节点的集群为例,首先我们会给用户、企业空间、节点等资源打上代表等级的标签。在邀请用户加入企业空间或者项目时,要求加入的企业空间或者项目的等级不得高于用户的等级,同样项目在绑定企业空间时,也要求项目的等级不得高于企业空间的等级,才能对资源进行纳管;我们认为同一项目下的资源的等级是相同的,基于项目创建的负载、Pod、服务等资源的等级跟项目保持一致;同时 Pod 中加入节点亲和性,以使 Pod 调度到不高于其权限等级的节点上。

例如这里,我们创建了一个权限等级是 3 的用户 demo-user,他可以加入权限等级不高于3的企业空间或者项目中。

kind: User
apiVersion: iam.kubesphere.io/v1alpha2
metadata:name: demo-userlabels:kubernetes.io/level: 3
spec:email: demo-user@kubesphere.io

创建一个权限等级是 2 的项目 demo-ns,那么基于项目创建的负载、Pod、存储等资源的权限等级也是 2。

apiVersion: v1
kind: Namespace
metadata:name: demo-nslabels:kubernetes.io/level: 2

基于 demo-ns 项目创建了一个nginx 的 Pod,他的权限等级也是 2,同时加入节点亲和性,要求其调度到权限等级不高于 2 的节点上。

apiVersion: apps/v1
kind: Pod
metadata:labels:kubernetes.io/level: 2name: nginx
spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80protocol: TCPaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/leveloperator: Ltvalues:- 2- matchExpressions:- key: kubernetes.io/leveloperator: Invalues:- 2

如何实现资源的升降级

在分级管理体系中,支持等级的无限划分,只需要定义一个中间值,就可以在两个等级之间插入一个新的等级,无需操作其他资源;在对资源进行升降级时,只需要修改对应资源的 label 标签,就可以对资源进行升降级操作。当然,在对资源进行升降级的时候,我们需要对资源进行检测,保证升级时,其上层资源的权限等级不得低于目标等级;同时,降级时,其下层资源的权限等级不得高于目标等级。在不满足升降级操作条件时,需要将对应资源也做相应调整才可以。

不同层级间 Pod 的网络隔离

在分级体系中,我们要求高等级的 Pod 能访问低等级的 Pod,但是低等级的 Pod 不能访问高等级的 Pod,那我们需要如何保证不同层级间 Pod 的网络通信呢。

项目在不开启网络隔离的情况下,Pod 间的网络是互通的,所以这里会新增一个黑名单的网络策略。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-allnamespace: demo-nslabels:kubernetes.io/level: 2
spec:podSelector: {}policyTypes:- Ingress

podSelector:{} 作用于项目中所有 Pod,阻止所有流量的流入。

然后放行标签等级大于目标等级(这里是 2)的流量流入(我们对 Ingress 流量没有做限制)。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: level-match-network-policynamespace: demo-nslabels:kubernetes.io/level: 2
spec:podSelector:matchExpressions:- key: kubernetes.io/leveloperator: Gtvalues:- 2policyTypes:- Ingress

总结

KubeSphere 解决了用户构建、部署、管理和可观测性等方面的痛点,它的资源可以在多个租户之间共享。但是在资源有权限等级的场景中,低等级资源可以操作高等级资源,造成资源越权管理的问题。为解决这一问题,我们在 KubeSphere 的基础上进行了改造,以适应租户与资源之间和资源与资源之间的分级管理,同时在项目的网络策略中,增加黑名单和白名单策略,增强了项目间的网络隔离,让资源的管理更安全。

本文由博客一文多发平台 OpenWrite 发布!

基于 KubeSphere 的分级管理实践相关推荐

  1. 马上消费金融基于 KubeSphere 的 AI 平台开发实践

    概述 本文基于 "KubeSphere & Friends 2021 Meetup 北京站" 分享内容整理而来,详细内容建议观看视频,本文有一定删减. 作者:胡涛(Dani ...

  2. 中通物流基于 KubeSphere 在生产环境的开发与部署实践

    背景 中通物流是国内业务规模较大,第一方阵中发展较快的快递企业.2019年,中通各类系统产生的数据流以亿计,各类物理机和虚拟机成千上万,在线微服务更是数不胜数.如此庞大的管理,使得中通业务发展不可持续 ...

  3. 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台

    背景 从传统运维到容器化的 Docker Swarm 编排,从 Docker Swarm 转向 Kubernetes,然后在 Kubernetes 运行 SpringCloud 微服务全家桶,到最终拥 ...

  4. 为什么您应该使用基于标准的开发实践

    为什么您应该使用基于标准的开发实践 Why you should use standards-based development practices (even if you don't have t ...

  5. 基于Spark的机器学习实践 (九) - 聚类算法

    0 相关源码 1 k-平均算法(k-means clustering)概述 1.1 回顾无监督学习 ◆ 分类.回归都属于监督学习 ◆ 无监督学习是不需要用户去指定标签的 ◆ 而我们看到的分类.回归算法 ...

  6. 技术干货| 阿里云基于Hudi构建Lakehouse实践探索

    简介:阿里云高级技术专家王烨(萌豆)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件,本议题介绍了阿里云如何使用 Hudi 和 OSS 对象存储构建 ...

  7. 基于Spark的机器学习实践 (三) - 实战环境搭建

    0 相关源码 1 Spark环境安装 ◆ Spark 由scala语言编写,提供多种语言接口,需要JVM ◆ 官方为我们提供了Spark 编译好的版本,可以不必进行手动编译 ◆ Spark安装不难,配 ...

  8. 基于.NetCore结合docker-compose实践Gitlab-CI/CD 排坑指南

    引言 看过docker-compose真香的园友可能留意到当时是[把部署dll文件拷贝到生产机器],即时打包成镜像并启动容器,并没有完成CI/CD. 经过长时间实操验证,终于完成基于Gitlab的CI ...

  9. 技术干货| 阿里云基于Hudi构建Lakehouse实践探索「内附干货PPT下载渠道」

    简介: 阿里云高级技术专家王烨(萌豆)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件,本议题介绍了阿里云如何使用 Hudi 和 OSS 对象存储构 ...

  10. Amazon EKS基于GitLab的CICD实践一 GitLab的部署和配置篇

    在容器化,微服务,基础设施即代码(IaC)以及DevOps的理念不断被大家所接受和理解,摆在大家面前的是如何在实际的工作中应用和实践这些理念. 本文将讨论基于GitLab来实现针对公有云基础设施(亚马 ...

最新文章

  1. eclipse修改文件代码不起作用,输出时还是老的,估计是缓存问题
  2. 关于Combobox的多选和单选情况
  3. OpenCASCADE绘制测试线束:数据交换命令之XDE 图层命令
  4. 小财靠勤,中财靠德,大财靠命,现在多少钱才是小财?
  5. [BuildRelease]Mozilla Build Tools - Autoconf + GNU Make
  6. flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果
  7. BootStrap自定义小图标
  8. 自定义一个腾讯云短信验证码接口spring-starter
  9. python表示倍数_倍数 python
  10. 从端到云:飞腾平台全栈解决方案白皮书
  11. 怎样在vs2010中添加图片资源呢?
  12. tp5欢迎页 (获取系统信息)
  13. 订阅号 openid php,微信“订阅号”如何存放openid,并在其他页面使用
  14. POI-获取Excel中合并单元格问题
  15. ArcGIS Maps SDK for Unreal Engine通过UI方式显示地图教程
  16. Linux:xinetd服务安装与配置(操作环境:Ubuntu 18.04)
  17. Intel有那些45纳米的CPU
  18. matlab 星座图 qam,16QAM_星形及矩形星座图调制解调MATLAB代码.doc
  19. OneNav简约PHP导航书签源码
  20. 金山云与天润科技战略合作 推动智慧城市建设

热门文章

  1. 80后的我,记忆里和吃有关的那些事
  2. Oracle定时任务DBMS_JOB
  3. freenom域名申请教程
  4. 如何用matlab求向量在基下的坐标,请问什么是有关向量的基底、基向量、基坐标?...
  5. Git环境傻瓜式讲解
  6. js根据年份计算总周数并获取每周的日期范围
  7. OCR通用文字识别接口
  8. 【技术流派】双目立体视觉系统空间精度:精确定量分析
  9. 人民币对澳元汇率的大数据分析与预测
  10. 计算机用户没有管理员权限,电脑没有管理员权限怎么办