我的编程空间,编程开发者的网络收藏夹
学习永远不晚

KubeSphere分级管理实践及解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

KubeSphere分级管理实践及解析

前言

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-user
  labels:
    kubernetes.io/level: 3
spec:
  email: demo-user@kubesphere.io

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

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

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

apiVersion: apps/v1
kind: Pod
metadata:
  labels:
    kubernetes.io/level: 2
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
      protocol: TCP
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
       nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/level
            operator: Lt
            values:
            - 2
        - matchExpressions:
          - key: kubernetes.io/level
            operator: In
            values:
            - 2

如何实现资源的升降级

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

不同层级间 Pod 的网络隔离

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

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

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

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

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

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: level-match-network-policy
  namespace: demo-ns
  labels:
    kubernetes.io/level: 2
spec:
  podSelector:
    matchExpressions:
    - key: kubernetes.io/level
      operator: Gt
      values:
      - 2
  policyTypes:
  - Ingress

总结

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

以上就是KubeSphere分级管理实践及解析的详细内容,更多关于KubeSphere分级管理实践的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

KubeSphere分级管理实践及解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

KubeSphere分级管理怎么实现

这篇“KubeSphere分级管理怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“KubeSphere分级管理怎么实现
2023-07-02

Golang实现Json分级解析及数字解析实践详解

你是否遇到过在无法准确确定json层级关系的情况下对json进行解析的需求呢?本文就来和大家介绍一次解析不确定的json对象的经历,以及遇到的问题和解决方法
2023-02-14

Android ListView 单条刷新方法实践及原理解析

对于使用listView配合adapter进行刷新的方法大家都不陌生,先刷新adapter里的数据,然后调用notifydatasetchange通知listView刷新界面。 方法虽然简单,但这里面涉及到一个效率的问题,调用notifyd
2022-06-06

MongoDB在物业管理行业中的应用实践与数据分析

MongoDB是一种非关系型数据库管理系统,常用于处理大规模数据和高并发访问的场景。在物业管理行业中,MongoDB的应用已经取得了显著的成果。本文将探讨MongoDB在物业管理行业中的应用实践与数据分析。一、物业管理行业的挑战物业管理行业
MongoDB在物业管理行业中的应用实践与数据分析
2023-11-02

Linux磁盘分区实现原理及方法解析

回忆: IDE盘:第一块盘hda,第二块盘hdb...第一块盘的第一个分区hda1,第二个分区hda2... SAS/SATA/SCSI盘:第一块盘sda,第二块盘sdb...第一块盘的第一个分区sda1,第二个分区sda2... 一般分区
2022-06-03

TF-IDF理解及其Java实现的示例分析

这篇文章将为大家详细讲解有关TF-IDF理解及其Java实现的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。TF-IDF前言前段时间,又具体看了自己以前整理的TF-IDF,这里把它发布在博客上,知
2023-05-30

2022年系统规划与管理师下午案例分析真题及答案解析

  参加2022年系统规划与管理师考试的考生都很关注真题答案,编程学习网小编将在考后为大家整理2022年系统规划与管理师下午案例分析真题及答案解析,敬请考生关注!  系统规划与管理师案例分析科目在下午考试,编程学习网小编在考后为大家整理了2022年系统规划与管理师下午案例分析真题及答案解析,想知道答案和解析的考生请进入编程学习网在
2022年系统规划与管理师下午案例分析真题及答案解析
2024-04-19

如何分析CDN HTTPS安全加速基本概念、解决方案及优化实践

这篇文章将为大家详细讲解有关如何分析CDN HTTPS安全加速基本概念、解决方案及优化实践,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。大家都知道,HTTP 本身是明文传输的,没有经过任何安
2023-06-04

PB连接阿里云SQL数据库实现企业级数据管理与分析

随着企业信息化进程的不断深入,数据管理与分析已经成为企业发展的重要支撑。然而,如何有效管理、分析这些数据,以及如何将数据与业务流程紧密相连,是企业面临的一大挑战。本篇文章将介绍如何使用PB(ProBusiness)语言连接阿里云SQL数据库,以实现企业级的数据管理与分析。PB(ProBusiness)语言是一款功
PB连接阿里云SQL数据库实现企业级数据管理与分析
2023-11-22

2023上半年信息系统项目管理师下午案例分析真题及答案解析

  参加2023上半年信息系统项目管理师考试的考生都很关注真题答案,编程学习网小编将在考后为大家整理2023上半年信息系统项目管理师下午案例分析真题及答案解析,敬请关注!  信息系统项目管理师案例分析科目在下午考试,编程学习网小编在考后为大家整理了2023上半年信息系统项目管理师下午案例分析真题及答案解析,编程学习网软考学院老师也
2023上半年信息系统项目管理师下午案例分析真题及答案解析
2024-04-19

MySQL权限控制和用户与角色管理实例分析讲解

目录一、mysql用户登录二、用户管理三、权限控制四、角色管理一、MySQL用户登录lYoljYfqX一般在本机上我们的登录命令:mysql -u root -p+密码 这里介绍命令的作用:-u 指定用户名-h 指定主机地址(默认为l
2022-12-01

2023上半年软考初级信息系统运行管理员真题及答案解析

2023上半年软考初级信息系统运行管理员考试已结束,很多考生关注2023上半年软考初级信息系统运行管理员真题及答案解析。目前2023上半年软考初级信息系统运行管理员真题暂未更新,编程学习网小编整理了初级信息系统运行管理员历年真题的内容。
2023上半年软考初级信息系统运行管理员真题及答案解析
2024-07-10

编程热搜

目录