当前位置: 首页 > article >正文

K8s访问控制

用cluster-admin的权限随便操作所有 Pod 之间网络全通反正测试环境怎么玩都无所谓。 但当你的集群上了生产跑了核心业务你就会发现问题开发同学误操作把线上的 Deployment 删了整个服务挂了半小时测试环境的账户不小心改了生产的配置微服务里的前端服务居然能直接访问用户的数据库一旦被攻破所有数据都泄露了这时候才意识到没有访问控制的集群就像没做任何权限管控的系统任何人都能操作任何资源太危险了。一、访问控制的整体流程请求要过哪几关Kubernetes 的所有操作最终都会落到 API Server 上不管是你用 kubectl 执行命令还是 Pod 里的程序调用 API所有请求都必须按顺序经过三个核心的处理阶段这三个阶段就是访问控制的核心认证Authentication这一步的核心是确认你是谁。API Server 会验证你请求里带的身份凭证比如客户端证书、Bearer Token、账号密码确认你的身份是合法的不是伪造的。只有通过了这一步请求才会进入下一关。授权Authorization确认完你的身份之后这一步要确认你能不能做你要做的这件事。比如你是一个开发能不能删除集群里的节点能不能修改某个 namespace 里的 Pod。Kubernetes 最常用的授权模式就是 RBAC准入控制Admission Control这是最后一关在请求要被处理、保存到集群存储之前做最后的全局检查。比如你有没有超出资源配额你用的镜像是不是合法的你有没有开启危险的特权容器。只有所有的检查都通过请求才会被最终处理。简单来说这三个阶段就是先确认你是谁再确认你能不能做这件事最后确认这件事本身合不合规矩。二、身份管理给 Pod 一个合法的身份要做权限管控首先得有身份Kubernetes 里的身份分两种一种是给人类用户用的普通 User比如运维、开发一般是通过外部的认证服务管理的另一种就是给 Pod 里的程序用的ServiceAccount服务账户。疑问为什么 Pod 里的程序不用配账号就能直接调用 Kubernetes API这就是 ServiceAccount 的功劳。ServiceAccount 是怎么工作的ServiceAccount 是集群内部管理的账户专门给 Pod 里的进程用的用来让这些程序能合法地访问 API。它的整个流程都是自动的你几乎不用做任何配置每个 namespace 创建的时候都会自动创建一个名为default的 ServiceAccount给没指定账户的 Pod 用。只要你新建了 ServiceAccountKubernetes 的 Token controller 就会自动为它生成一个 Secret里面存着身份 Token、集群的 CA 证书、当前的 namespace 信息。Pod 启动的时候会自动把这个 Secret 里的文件挂载到容器内的/var/run/secrets/kubernetes.io/serviceaccount/这个固定路径下。Pod 里的官方客户端比如 client-go、kubectl都会自动去读这个路径下的文件不用你做任何配置程序就已经带着合法的身份去访问 API 了。当然如果你需要给不同的 Pod 分配不同的权限你也可以手动创建自己的 ServiceAccount比如# 创建一个专门给订单服务用的ServiceAccount kubectl create namespace order kubectl -n order create serviceaccount order-sa这样你就可以给这个账户单独分配权限和默认的账户分开了。另外如果你有 Pod 根本不需要访问 API为了安全你可以关掉自动挂载避免凭证泄露spec: automountServiceAccountToken: false三、权限管控用 RBAC 管好 “谁能做什么”有了身份之后我们就要管权限了这个身份能做什么不能做什么这就要用到 RBAC也就是基于角色的访问控制这是 Kubernetes 最常用的授权模式。RBAC 的核心逻辑RBAC 的逻辑很简单把权限打包成角色然后把角色绑定给账户这样账户就拥有了角色里的所有权限。它有四个核心的资源两两配对分别管 namespace 级和集群级的权限资源类型作用作用范围Role定义权限规则说明这个角色能做什么操作单个 namespace只在当前 namespace 生效ClusterRole定义权限规则说明这个角色能做什么操作整个集群对所有 namespace 生效也能管理节点这类集群级资源RoleBinding把角色绑定给账户让账户拥有角色的权限单个 namespace绑定只在当前 namespace 生效ClusterRoleBinding把角色绑定给账户让账户拥有角色的权限整个集群绑定对所有 namespace 生效这里要注意两个点权限是累加的没有拒绝只要你给账户绑定的角色里有任何一个允许了某个操作这个操作就能做所有没被允许的默认都是拒绝的。RoleBinding 可以绑定 ClusterRole你可以把一个全局的 ClusterRole绑定到某个 namespace 的账户这样这个账户就只在当前 namespace 拥有这个权限不用重复写规则非常方便。实际操作给服务分配只读权限举个实际的例子我们要给之前的order-sa这个账户分配ordernamespace 里的 Pod 只读权限也就是只能看 Pod不能改、不能删怎么做首先我们创建一个 Role定义权限apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-reader namespace: order rules: - apiGroups: [] resources: [pods] verbs: [get, list, watch]这个 Role 的规则就是允许对 Pod 执行读相关的操作也就是 get、list、watch没有给创建、删除的权限。然后我们把这个 Role 绑定给order-sa账户kubectl -n order create rolebinding pod-reader-binding \ --rolepod-reader \ --serviceaccountorder:order-sa绑定完之后我们来测试一下权限# 测试能不能看Pod有权限 kubectl -n order auth can-i get pods --assystem:serviceaccount:order:order-sa yes # 测试能不能删Pod没权限 kubectl -n order auth can-i delete pods --assystem:serviceaccount:order:order-sa no这样就完成了我们的订单服务的程序就只能读 Pod不能修改或者删除就算程序出了问题也不会误删资源非常安全。四、网络隔离用 NetworkPolicy 管好 Pod 之间的访问权限管好了集群的 API 访问那 Pod 之间的网络访问呢比如我要让数据库的 Pod只能被应用服务的 Pod 访问别的都不能访问怎么做这就要用到 NetworkPolicy也就是网络策略。NetworkPolicy 的核心规则NetworkPolicy 是用来做 Pod 之间的网络隔离的它可以管控 Pod 的网络流量限制 Pod 只能和指定的对象通信。它的默认规则很重要很多新手都踩过这个坑如果你的 Pod 没有匹配到任何 NetworkPolicy那么所有流量都是全通的Pod 可以随便连别人别人也可以随便连它。只要有一个 NetworkPolicy 匹配到了这个 Pod那么所有没被明确允许的流量都会被默认拒绝也就是说你加了网络策略之后一定要把所有需要的流量都明确允许不然服务就会不通。另外NetworkPolicy 的规则也是累加的只要有任何一个策略允许了某个连接这个连接就能通规则的顺序不影响结果。还要注意不是所有的网络插件都支持 NetworkPolicy比如默认的 flannel 就不支持你需要用 Calico、Cilium 这些支持的插件不然你创建了策略也不会生效。实际操作限制数据库的访问来源举个例子我们的dbnamespace 里放了 MySQL 服务我们要让它只能被appnamespace 里的应用服务访问其他的都不能访问怎么做首先创建两个 namespacekubectl create namespace db kubectl create namespace app然后创建 NetworkPolicyapiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-app-access-db namespace: db spec: podSelector: {} # 对db namespace里的所有Pod生效 policyTypes: - Ingress # 只管控入口流量 ingress: - from: - namespaceSelector: matchLabels: name: app # 只允许来自app namespace的来源 ports: - protocol: TCP port: 3306 # 只允许访问3306端口这个策略的意思就是db里的所有 Pod只允许appnamespace 里的 Pod 访问它的 3306 端口其他的来源都被拒绝。这样配置完之后就算有别的 Pod 拿到了数据库的地址也连不上就算数据库的权限没配好也能挡住非法的访问双重安全。五、注意最小权限原则永远只给账户最小的必要权限不要随便给cluster-admin的权限很多人图方便给所有账户都开了 admin这是非常危险的。不要用 default 账户默认的defaultServiceAccount 权限太开放而且所有 Pod 默认都会用它生产环境一定要给每个服务单独创建自己的 ServiceAccount分配独立的权限。定期审计权限定期清理不用的账户、不用的角色绑定避免权限泛滥时间长了谁都不知道哪个账户有什么权限了。开启网络策略不要让所有 Pod 都全通给核心服务加上网络策略只允许必要的访问就算某个服务被攻破也能挡住横向渗透。总结Kubernetes 的访问控制是集群安全的基础从身份管理到权限管控再到网络隔离这一套体系下来就能把你的集群的安全管好避免误操作、避免非法访问让你的生产集群更安全。

相关文章:

K8s访问控制

用cluster-admin的权限随便操作,所有 Pod 之间网络全通,反正测试环境怎么玩都无所谓。 但当你的集群上了生产,跑了核心业务,你就会发现问题:开发同学误操作,把线上的 Deployment 删了,整个服务挂…...

FLUX.1海景美女图新手教程:3分钟掌握提示词结构——主体+环境+光线+风格

FLUX.1海景美女图新手教程:3分钟掌握提示词结构——主体环境光线风格 你是不是也遇到过这种情况?看到别人用AI生成的“海景美女图”美轮美奂,自己试了试,结果出来的图片要么人物奇怪,要么背景模糊,要么光线…...

DELMIA焊枪批量导入实战:宏命令脚本优化与CATIA协同操作指南

1. DELMIA焊枪批量导入的核心逻辑 在焊装仿真项目中,批量导入焊枪姿态是个让人头疼的活儿。我做过十几个汽车焊装项目,发现传统手动操作不仅效率低下,还容易出错。后来摸索出这套宏命令脚本CATIA协同的工作流,效率直接提升5倍不止…...

MedGemma-1.5-4B镜像特性:内置医学影像预处理Pipeline与安全脱敏机制

MedGemma-1.5-4B镜像特性:内置医学影像预处理Pipeline与安全脱敏机制 1. 引言:当AI遇见医学影像 想象一下,你是一位医学研究者,手头有大量的X光片、CT扫描和MRI影像需要分析。传统方法需要逐张查看、手动标注,既耗时…...

从Goldschmidt到代码:我如何用Python脚本‘侦探’出钙钛矿论文里的隐藏计算参数

解码钙钛矿论文中的隐藏参数:Python逆向工程实战 在材料科学领域,钙钛矿化合物的稳定性预测一直是个关键课题。Goldschmidt容忍因子(t)作为经典判据已有近百年历史,但鲜少有人讨论一个核心问题:当不同研究团队报告"相同&quo…...

PTA L2-039 清点代码库:STL容器组合实战解析

1. 题目背景与需求分析 这道PTA L2-039题目来自中国高校计算机大赛-团体程序设计天梯赛(GPLT),考察的是STL容器的综合运用能力。题目要求我们对代码库中的功能模块进行去重统计,这在软件开发中是个非常实际的需求——想象一下&…...

别再只会显示‘Hello World’了!用OLED玩点花的:SPI硬件滚动 vs I2C软件动画效果实现详解

让OLED屏动起来:SPI硬件滚动与I2C软件动画的进阶实战指南 当你的OLED项目已经能够稳定显示基础信息后,是否想过让这块小屏幕真正"活"起来?本文将带你突破静态显示的局限,深入探讨两种截然不同的动态效果实现方案&#…...

Phi-4-mini-reasoning开发者案例:为低代码平台注入多步推理能力

Phi-4-mini-reasoning开发者案例:为低代码平台注入多步推理能力 1. 模型介绍 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型,特别擅长处理需要多步逻辑推导的问题。与通用聊天模型不同,它被设计用来解决数学题、逻辑题等需要逐步…...

Path of Building终极指南:流放之路离线构建规划器深度解析

Path of Building终极指南:流放之路离线构建规划器深度解析 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding Path of Building(简称PoB&#xff09…...

新手避坑指南:DC综合后report_timing报告里‘MET’旁边slack=0.01,这算时序过了吗?

数字IC设计新手必读:当DC综合报告显示slack0.01ns时,我们该警惕什么? 第一次看到Design Compiler综合后的时序报告里出现"MET"旁边跟着一个接近零的slack值,就像在高速公路上以120km/h的极限速度通过测速摄像头——表面…...

Flowframes视频插帧工具:5步快速上手AI视频补帧完整指南

Flowframes视频插帧工具:5步快速上手AI视频补帧完整指南 【免费下载链接】flowframes Flowframes Windows GUI for video interpolation using DAIN (NCNN) or RIFE (CUDA/NCNN) 项目地址: https://gitcode.com/gh_mirrors/fl/flowframes 想要将24fps的视频轻…...

终极免费调试工具:解锁AMD Ryzen处理器隐藏性能的完整指南

终极免费调试工具:解锁AMD Ryzen处理器隐藏性能的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...

知识竞赛系统的多端适配

📱 知识竞赛系统的多端适配实现PC、手机与平板的全场景覆盖📌 多端适配的时代必要性在数字化学习与竞赛日益普及的今天,用户设备呈现多元化趋势。专业场景下的集中培训可能使用PC电脑,碎片化时间的个人练习依赖智能手机&#xff0…...

手把手教你用PyTorch从零搭建并调优MobileNetV2图像分类模型

1. 环境准备与项目初始化 第一次接触MobileNetV2和PyTorch时,我也被各种环境配置搞得头大。后来发现用Anaconda管理环境能省去80%的兼容性问题。这里分享我的标准配置流程: conda create -n mobilenetv2 python3.8 -y conda activate mobilenetv2安装PyT…...

Cursor AI Pro功能持续使用技术方案:多语言环境下的设备限制解决方案

Cursor AI Pro功能持续使用技术方案:多语言环境下的设备限制解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve re…...

OP-TEE安全存储深度解析(一):密钥体系与文件加密流程

1. OP-TEE安全存储的核心价值 第一次接触OP-TEE的安全存储功能时,我完全被它的精妙设计震撼到了。想象一下,你的手机里存着指纹、人脸识别模板这些极度敏感的数据,如果这些信息被普通应用程序随意读取,后果简直不堪设想。而OP-TEE…...

【技术解析】SwAV:用在线聚类与最优运输破解无监督视觉特征学习难题

1. SwAV:无监督视觉特征学习的破局者 想象一下你面前有100万张没有标签的图片,现在需要让AI自动学会识别其中的物体特征——这就是SwAV要解决的核心问题。传统方法就像让一个孩子通过反复对比无数相似图片来学习,不仅效率低下,还特…...

Intel RealSense D435i数据采集避坑指南:Python脚本获取相机内参、外参并同步保存多传感器图像

Intel RealSense D435i多模态数据采集工程实践:从参数解析到高精度同步方案 在机器人导航、三维重建和增强现实等领域,多传感器数据采集的精度和同步性直接决定了后续算法的上限。Intel RealSense D435i作为一款集成了RGB、深度和IMU的视觉传感器&#x…...

从入门到实战:在UniApp中高效集成uCharts图表(组件与原生双模式详解)

1. uCharts图表库简介与UniApp集成优势 uCharts是一款专为移动端优化的高性能图表库,最初为微信小程序设计,现已全面支持UniApp平台。我在多个商业项目中实测发现,它的渲染速度比同类库快30%以上,特别适合需要快速响应的数据可视化…...

STM32 FOC电机库PID调参避坑指南:为什么你的定点参数调不好?

STM32 FOC电机库PID调参避坑指南:为什么你的定点参数调不好? 调试电机控制系统的PID参数就像在给一台精密仪器做微创手术——参数调整的每一个细节都可能影响最终性能表现。对于使用STM32 FOC电机库的工程师来说,定点PID参数的调试尤其考验技…...

用Java Stream一行代码搞定彩票随机选号(双色球/大乐透)

用Java Stream一行代码搞定彩票随机选号(双色球/大乐透) 每次路过彩票站,总忍不住想试试手气。但机选号码总感觉少了点参与感?不如用Java Stream API自己写个随机选号器,既锻炼编码能力又能享受"定制化"选号…...

智能代码生成可读性优化(工业级SOP手册):含12个真实Git Diff对比案例与自动化检测脚本

第一章:智能代码生成代码可读性优化 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成工具(如Copilot、CodeWhisperer、Tabnine)在提升开发效率的同时,常产出语法正确但语义模糊、命名随意、结构扁平的代码&#xff0c…...

光轮智能揽5.5亿订单引爆具身数据元年,物理AI时代数据成竞争焦点

1. 光轮智能订单刷新纪录,引爆“具身数据元年” 全球首个具身数据独角兽光轮智能,2026年一季度狂揽5.5亿元订单,刷新具身数据行业纪录,直接引爆“具身数据元年”。把订单拆开来看,背后浮现出的并非单一需求&#xff0c…...

别再傻傻地直接扫了!手把手教你用wafw00f在Windows和Kali上优雅地“试探”网站防火墙

优雅识别Web应用防火墙:wafw00f在Windows与Kali中的实战指南 当安全研究员面对一个陌生网站时,直接发起攻击就像蒙着眼睛走雷区——不仅危险,而且低效。真正的高手总会先做一件事:识别目标网站的防护体系。本文将带你用wafw00f这…...

AMD平台ESXI 7.0实战:避坑部署Win11与TrueNAS虚拟化存储方案

1. AMD平台与ESXI 7.0的兼容性陷阱 AMD平台在虚拟化领域的崛起让不少玩家跃跃欲试,但ESXI 7.0对AMD处理器的支持并非完美无缺。我最近用Ryzen 9 5900X搭建测试环境时,就遭遇了三个典型问题:首先是安装界面卡在"Loading modules"阶段…...

Vue项目实战:用3d-force-graph和Neo4j打造炫酷的3D知识图谱(附完整代码)

Vue与Neo4j深度整合:构建高性能3D知识图谱的工程实践 知识图谱作为结构化知识的表现形式,正在成为企业知识管理和智能应用的核心基础设施。本文将深入探讨如何利用Vue.js前端框架与Neo4j图数据库,结合3d-force-graph可视化库,构建…...

SR-MPLS TE隧道配置实战:基于ENSP的流量工程实验指南

1. SR-MPLS TE技术入门:从理论到实验环境搭建 第一次接触SR-MPLS TE时,我被它"无状态隧道"的特性惊艳到了。传统MPLS TE需要每台设备维护RSVP信令状态,而SR-MPLS TE只需要在头节点计算路径就能实现流量工程,这就像自驾…...

告别弹窗与捆绑:用Geek Uninstaller与SoftCnKiller打造纯净Windows系统

1. 为什么你的Windows系统总是越用越卡? 相信很多朋友都有这样的体验:新买的电脑用起来飞快,但半年后就开始卡顿、弹窗不断,甚至莫名其妙多出一堆没安装过的软件。这种情况我遇到过太多次了——上周帮同事修电脑,发现…...

Hive数据操作与查询实战:从DDL到DQL的完整工作流解析

1. Hive数据库与表的基础操作 Hive作为构建在Hadoop之上的数据仓库工具,其核心功能之一就是通过类SQL语法(HiveQL)管理结构化数据。我们先从最基础的数据库和表操作开始,这是每个Hive用户必须掌握的技能点。 创建数据库时&#xf…...

从NOIP真题到算法实战:一元三次方程求解的二分法精讲

1. 从NOIP真题看一元三次方程求解的重要性 第一次接触NOIP真题的同学可能会好奇,为什么一元三次方程求解会成为竞赛中的经典题目?这背后其实隐藏着算法竞赛考察的核心能力——数值计算与算法思维的结合。在2001年NOIP提高组的真题中,这道题就…...