Kubernetes控制平面组件:API Server Node 授权机制 详解

news/2025/2/25 9:26:55

云原生学习路线导航页(持续更新中)

  • kubernetes学习系列快捷链接
    • Kubernetes架构原则和对象设计(一)
    • Kubernetes架构原则和对象设计(二)
    • Kubernetes架构原则和对象设计(三)
    • Kubernetes控制平面组件:etcd(一)
    • Kubernetes控制平面组件:etcd(二)
    • Kubernetes控制平面组件:etcd常用配置参数
    • Kubernetes控制平面组件:etcd高可用集群搭建
    • Kubernetes控制平面组件:etcd高可用解决方案
    • Kubernetes控制平面组件:Kubernetes如何使用etcd
    • Kubernetes控制平面组件:API Server详解(一)
    • Kubernetes控制平面组件:APIServer 基于 X509 证书的认证机制
    • Kubernetes控制平面组件:APIServer 基于 静态Token 的认证机制
    • Kubernetes控制平面组件:APIServer 基于 引导Token 的认证机制
    • Kubernetes控制平面组件:APIServer 基于 ServiceAccount 的认证机制
    • Kubernetes控制平面组件:APIServer 基于 OpenID 的认证机制详解
    • Kubernetes控制平面组件:APIServer 基于 Webhook Toeken令牌 的认证机制详解
    • Kubernetes控制平面组件:APIServer 基于匿名请求的认证机制详解
    • kubectl 和 kubeconfig 基本原理
    • kubeadm 升级 k8s集群 1.17到1.20
    • Kubernetes常见问题解答
    • 查看云机器的一些常用配置

本文主要对kubernetes的控制面组件API Server 授权机制中的 Node 授权机制进行详细介绍,涵盖Node机制基础概念、设计理念、实现原理、授权流程、参数配置及实操案例等

  • 希望大家多多 点赞 关注 评论 收藏,作者会更有动力编写技术文章

1.基本概念

Node 授权机制是 Kubernetes 中专门为节点(Node)设计的授权模式,用于控制 kubelet(节点代理)对 API Server 的访问权限。其核心目标是确保节点仅能操作与其自身相关的资源(如 Pod、Node 状态等),防止节点权限越界或滥用。

核心特点

  • 专用性:仅针对 kubelet 发起的请求,其他用户或组件不适用。
  • 最小权限原则:严格限制 kubelet 的操作范围,仅允许访问与节点绑定的资源。
  • 动态控制:通过准入控制插件(如 NodeRestriction)进一步限制写操作。

2.设计理念

  1. 节点隔离性
    每个节点仅能管理自身资源,避免跨节点操作(如修改其他节点的状态或 Pod)。
  2. 零信任模型
    节点需通过严格的身份认证(如 TLS 证书)和授权策略,确保请求合法性。
  3. 动态权限适配
    结合 RBAC 和准入控制插件,实现权限的动态调整与扩展。

3.实现原理

3.1.身份认证

  • 证书认证kubelet 使用由集群 CA 签发的客户端证书,证书中需包含以下信息:
  • 用户名system:node:<nodeName>(如 system:node:node01
  • 组名system:nodes
  • 证书验证流程:API Server 通过 CA 根证书验证 kubelet 证书的合法性,并提取用户与组信息。

3.2.授权策略

  • 允许的操作
  • 读操作:访问当前节点绑定的 Pod、ConfigMap、Secret 等资源。
  • 写操作:更新当前节点的状态(status)、Pod 状态(需 NodeRestriction 插件支持)。
  • 认证相关操作:TLS 引导(certificatesigningrequests)、Token 验证等。
  • 禁止的操作:跨节点资源操作、非绑定资源的删除/创建。

2.3.准入控制

通过 NodeRestriction 插件进一步限制写操作:

  • 仅允许 kubelet 修改其所属节点的 Node 对象。
  • 仅允许修改当前节点绑定的 Pod 状态。

4.授权流程

  1. 请求发起
    kubelet 向 API Server 发起请求(如更新节点状态)。
  2. 认证阶段
    API Server 验证 kubelet 的 TLS 证书,提取用户 system:node:<nodeName> 和组 system:nodes
  3. 授权阶段
    Node 授权器检查请求的 操作类型(Verb)、资源类型(Resource)、命名空间(Namespace)是否符合策略:
  • 若请求为 读操作,检查资源是否属于当前节点。
  • 若请求为 写操作,结合 NodeRestriction 插件验证资源归属。
  1. 准入控制
    NodeRestriction 插件拦截非法写操作(如修改其他节点的状态)。
  2. 请求处理
    通过所有检查后,API Server 执行操作并返回结果。

5.参数配置与实操案例

5.1.启用 Node 授权模式

在 API Server 启动参数中配置:

# kube-apiserver.yaml 片段
spec:
  containers:
  - command:
    - kube-apiserver
    - --authorization-mode=Node,RBAC  # 启用 Node 和 RBAC 授权
    - --admission-control=...,NodeRestriction,...  # 启用准入控制插件

kubelet__100">5.2.生成 kubelet 证书

使用 cfssl 工具生成证书(需包含 system:nodes 组):

// csr.json
{
  "CN": "system:node:node01",
  "hosts": ["node01"],
  "key": { "algo": "rsa", "size": 2048 },
  "names": [
    { "O": "system:nodes" }  // 组名必须为 system:nodes
  ]
}

5.3.RBAC 配置(可选)

若需扩展权限,可创建 ClusterRole 并绑定到 system:nodes 组:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: node-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: node-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:nodes

6.常见问题与调试

  1. 权限拒绝(403 错误)
  • 检查证书中的用户名和组是否正确。
  • 确认 API Server 启用了 Node 授权模式和 NodeRestriction 插件。
  1. 证书过期
    使用 kubeadm certs renew 更新 kubelet 证书。
  2. 跨节点操作拦截
    确保 NodeRestriction 插件已启用,并验证 Pod 是否绑定到当前节点。

7.扩展与最佳实践

  • 与 RBAC 结合:通过 RBAC 细化权限(如允许节点读取特定 ConfigMap)。
  • 安全加固:定期轮换证书、审计节点操作日志。
  • 多租户场景:结合命名空间隔离,限制节点仅能访问所属租户资源。

http://www.niftyadmin.cn/n/5865318.html

相关文章

Dashboard-frps

通过浏览器查看 frp的状态以及代理统计信息展示。 注&#xff1a;Dashboard 尚未针对大量的 proxy 数据展示做优化&#xff0c;如果出现 Dashboard 访问较慢的情况&#xff0c;请不要启用此功能。 需要在 frps.ini中指定 dashboard服务使用的端口&#xff0c;即可开启此功能&…

在运维工作中,磁盘文件满了,怎么办?

在运维工作中&#xff0c;磁盘文件满了是一个常见的问题&#xff0c;处理这种情况需要快捷定位问题、清理空间&#xff0c;并采用措施防止再次发生。以下是详细的处理步骤&#xff1a; 1. 确认磁盘使用情况 首先&#xff0c;需要确认磁盘的使用情况&#xff0c;明确是哪个分区…

iOS指纹归因详解

iOS 指纹归因&#xff08;Fingerprint Attribution&#xff09;详解 1. 指纹归因的概念 指纹归因&#xff08;Fingerprint Attribution&#xff09;是一种无 ID 归因&#xff08;ID-less Attribution&#xff09;技术&#xff0c;主要用于广告跟踪、用户识别或流量分析。它基…

多层次自治协作智能网络

核心理念&#xff1a; 利用区块链构建安全可信的去中心化基础设施&#xff0c;以自治智能体为基本单元进行边缘计算和分布式协作&#xff0c;通过联邦学习和强化学习实现智能进化&#xff0c;并由中央综合智能体进行宏观统筹和服务支撑&#xff0c;最终形成一个高弹性、可扩展、…

从零到一学习c++(基础篇--筑基期十一-类)

从零到一学习C&#xff08;基础篇&#xff09; 作者&#xff1a;羡鱼肘子 温馨提示1&#xff1a;本篇是记录我的学习经历&#xff0c;会有不少片面的认知&#xff0c;万分期待您的指正。 温馨提示2&#xff1a;本篇会尽量用更加通俗的语言介绍c的基础&#xff0c;用通俗的语言去…

使用Vue-Flow创建一个流程图可视化节点坐标查询器

在开发中遇到这样一个需求&#xff0c;需要后端返回数据前端网页生成流程图&#xff0c;由于流程图使用了Vue-Flow&#xff0c;所以需要坐标来辅助后端生成数据。 首先引入方法并定义添加节点数据 const { updateEdge, addEdges, addNodes} useVueFlow() const add_nodes …

2 算法1-2 明明的随机数

题目描述 明明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0c;他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N≤100)&#xff0c;对于其中重复的数字&#xff0c;只保留一个&#xff0c;把其余相同的数去掉&#xff0c;不同的数对应着…

互联网上门洗衣洗鞋小程序

洗衣洗鞋小程序必备功能&#xff1a; 1. 在线下单上门取送&#xff1a;用户随时下单&#xff0c;享受上门取送服务&#xff0c;方便快捷。 2. 拼团洗鞋&#xff1a;拼团享优惠&#xff0c;吸引更多订单。 3. 抽奖砍价&#xff1a;通过抽奖、砍价等活动&#xff0c;提升用户参与…