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

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

本文主要对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 启动参数中配置:

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

5.2.生成 kubelet 证书

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

json 复制代码
// 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 组:

yaml 复制代码
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)。
  • 安全加固:定期轮换证书、审计节点操作日志。
  • 多租户场景:结合命名空间隔离,限制节点仅能访问所属租户资源。
相关推荐
you来有去3 小时前
记录一下在k3s快速创建gitlab
java·kubernetes·gitlab
舌尖上的五香8 小时前
k8s拉取harbor镜像部署
云原生·容器·kubernetes
qq_448941088 小时前
12、k8s安全机制
安全·kubernetes
斯普信专业组8 小时前
深入探讨K8s资源管理和性能优化
容器·性能优化·kubernetes
终端行者8 小时前
k8s中pod的调度策略之pod的亲和性调度与反亲和性调度 一文搞懂 k8s中创建的pod如何调度?
容器·kubernetes
人才瘾大8 小时前
docker和k8s
docker·kubernetes
挣扎与觉醒中的技术人13 小时前
Kubernetes (K8S) 高效使用技巧与实践指南
网络·云原生·容器·kubernetes
2401_8789617214 小时前
十一、k8s安全机制
安全·容器·kubernetes