2. Kubernetes API Server 架构:核心组件、请求处理流程、认证授权审计链

Kubernetes API Server(kube-apiserver)是整个控制面的核心网关,所有对集群状态的查询与变更都必须经过它。对于多租户场景,API Server 的请求处理路径直接决定了限流与隔离策略的生效位置。本节深入剖析 API Server 的内部架构、请求生命周期以及认证、授权、准入、审计的完整链路。

2.1 核心组件与分层架构

API Server 采用分层设计,从上到下依次为:API 层(路由与版本协商)、访问控制层(认证→授权→准入)、业务逻辑层(资源校验与存储)、底层存储层(etcd 交互)。

层级 核心组件 职责
API 层 HTTP Router、API Group Manager、Codec 请求路由、版本协商、序列化/反序列化
访问控制层 Authentication、Authorization、Admission 身份验证、权限校验、策略准入
业务逻辑层 Resource Registry、Strategy、Validation 资源校验、默认值注入、存储适配
存储层 Storage Backend (etcd3)、Watch Cache 数据持久化、监听通知、缓存
多租户视角: 访问控制层是租户隔离的第一道防线,而存储层的 Watch Cache 是限流与队列隔离的关键拦截点。

2.2 请求处理流程(完整生命周期)

一个典型的 API 请求从客户端到达 API Server 到最终写入 etcd,经历以下 8 个阶段:

  1. HTTP 接收与路由 — TLS 终止,根据 URL 路径匹配 API 版本与资源类型。
  2. 认证(Authentication) — 从请求头、证书、Bearer 中提取身份信息。
  3. 授权(Authorization) — 检查请求主体是否有权限执行该操作(RBAC/ABAC/Webhook)。
  4. 准入控制(Admission) — 通过 Mutating 与 Validating 准入插件链,修改或拒绝请求。
  5. 资源校验与默认值 — 调用对应资源的 Strategy 进行字段校验与默认值注入。
  6. 存储操作 — 将请求转换为 etcd 事务(Create/Update/Delete),写入持久化存储。
  7. 响应构建 — 序列化返回对象,包含最终状态与资源版本号。
  8. 审计日志 — 异步记录请求的完整元数据(阶段 2-7 均可触发审计事件)。
关键路径延迟: 准入控制链与存储操作是请求处理中最耗时的两个阶段,也是限流与队列隔离策略的主要作用点。
API Server 请求处理流程(8 阶段) HTTP 路由 认证 授权 准入控制 校验/默认值 存储操作 响应构建 审计日志(异步) 说明: • 准入控制阶段包含 Mutating 与 Validating 两类插件,支持 Webhook 扩展。 • 存储操作阶段会触发 Watch 通知,影响所有监听该资源的客户端。

2.3 认证(Authentication)链

API Server 支持多种认证方式,按配置顺序依次尝试,直到某个模块成功提取身份或全部失败:

认证模块 凭证来源 典型场景
X.509 客户端证书 TLS 握手阶段 kubelet、控制面组件
Bearer Authorization 请求头 ServiceAccount、用户
Webhook 外部认证服务 企业 SSO 集成
Anonymous 无凭证 健康检查、只读匿名访问
多租户风险: 如果启用了 Anonymous 认证且未绑定 RBAC 限制,任何未认证请求都可能获得集群信息。生产环境必须禁用匿名访问或仅授予最小权限。

2.4 授权(Authorization)链

认证通过后,API Server 将请求主体(User/Group/ServiceAccount)与操作(Verb/Resource/Subresource)传递给授权模块链。Kubernetes 默认使用 RBAC 模式,也支持 ABAC 与 Webhook:

  • RBAC(Role-Based Access Control) — 通过 Role/ClusterRole 与 RoleBinding/ClusterRoleBinding 定义权限。多租户场景下,每个租户对应一个 Namespace,通过 RoleBinding 将租户用户绑定到该 Namespace 的 Role。
  • ABAC(Attribute-Based Access Control) — 基于 JSON 策略文件,灵活性低,不推荐用于多租户。
  • Webhook — 将授权决策委托给外部服务,适合复杂的企业级策略。
最佳实践: 多租户集群应使用 RBAC + 外部 IDP(如 LDAP/OIDC)实现租户隔离。每个租户拥有独立的 Namespace 和 ServiceAccount,通过 RBAC 限制跨 Namespace 访问。

2.5 准入控制(Admission)链

准入控制是请求处理路径中最后一个可编程拦截点,分为两类:

类型 执行顺序 作用 多租户相关插件
Mutating 先执行 修改请求对象(注入默认值、Sidecar、标签) NamespaceLifecycle、MutatingWebhook
Validating 后执行 校验请求对象(资源配额、Pod 安全策略) ResourceQuota、PodSecurity、ValidatingWebhook

对于多租户场景,以下准入插件至关重要:

  • NamespaceLifecycle — 防止在正在删除的 Namespace 中创建资源。
  • ResourceQuota — 限制每个 Namespace 的资源使用量(CPU/内存/PVC 数量)。
  • PodSecurity — 强制 Pod 安全标准(Privileged/Baseline/Restricted)。
  • MutatingWebhook / ValidatingWebhook — 自定义准入逻辑,例如注入租户标识、校验租户配额。
API Server 访问控制层架构 HTTP 请求 认证(Authentication) X.509 / / Webhook 授权(Authorization) RBAC / ABAC / Webhook 准入控制(Mutating → Validating) 内置插件 + Webhook 多租户关键点: • 认证阶段识别租户身份 • 授权阶段限制 Namespace 范围 • 准入阶段校验租户配额与策略

2.6 审计(Audit)链

审计日志记录每个 API 请求的完整上下文,是安全审计与租户行为分析的基础。审计策略分为四个级别:

级别 记录内容 性能影响 推荐场景
None 不记录 无 健康检查、静态资源
Metadata 请求元数据(用户、资源、操作、状态码) 低 常规审计
Request 元数据 + 请求体 中 敏感操作审计
RequestResponse 元数据 + 请求体 + 响应体 高 故障排查、安全取证
多租户审计建议: 为每个租户配置独立的审计策略,对租户管理员操作使用 Request 级别,对普通用户操作使用 Metadata 级别。审计日志应包含租户标识(Namespace 或自定义标签),便于后续检索与分析。

2.7 限流与队列隔离的切入点

基于上述架构,多租户限流与队列隔离可以在以下位置实施:

  • HTTP 路由层 — 基于请求路径或 Header 进行速率限制(如 nginx ingress 的 limit-req)。
  • 认证后/授权前 — 识别租户身份后,对每个租户的请求速率进行独立计数。
  • 准入控制链 — 通过 MutatingWebhook 注入租户优先级标签,或通过 ValidatingWebhook 拒绝超出配额的请求。
  • 存储层 Watch Cache — 为每个租户分配独立的 Watch 队列,防止一个租户的突发流量阻塞其他租户的监听通知。