2. kube-apiserver 基础:架构、请求处理流程与核心组件
kube-apiserver 是 Kubernetes 控制面的核心网关,也是 Serverless 平台控制面所有查询与写入操作的唯一入口。理解其内部架构与请求处理流程,是后续进行查询优化与样本留存的前提。
2.1 整体架构概览
kube-apiserver 采用分层架构,从外到内依次经过 HTTP 层、认证、授权、准入控制、以及最终的存储层。每一层都可以独立扩展或替换,这也是 Kubernetes 可扩展性的基础。
2.2 请求处理流程(详细步骤)
一个典型的 API 请求从客户端发起直到写入 etcd,经历以下 7 个关键步骤:
| 步骤 | 组件/阶段 | 核心职责 | 常见优化点 |
|---|---|---|---|
| 1 | HTTP 路由 | 根据请求路径(/api/v1/...)匹配对应的资源处理器 | 减少不必要的路由重定向 |
| 2 | 认证 | 验证请求者身份(证书、、BasicAuth) | 使用长连接复用认证上下文 |
| 3 | 授权 | 判断请求者是否有权限执行操作(RBAC/ABAC) | 缓存 RBAC 策略评估结果 |
| 4 | 准入控制 | 修改或验证请求对象(Mutating + Validating) | 减少 Webhook 调用次数 |
| 5 | 对象校验 | 对资源对象进行 Schema 校验 | 使用 OpenAPI 缓存 |
| 6 | 存储层 | 将对象序列化后写入 etcd | 批量写入、压缩 |
| 7 | 响应返回 | 将结果封装为 HTTP 响应返回客户端 | 分页、字段选择 |
优化提示:在 Serverless 平台中,认证和准入控制是延迟开销最大的两个阶段。建议对 ServiceAccount 使用本地缓存,并将频繁调用的 Webhook 改为内部插件形式。
2.3 核心组件详解
2.3.1 认证(Authentication)
kube-apiserver 支持多种认证方式,按配置顺序依次尝试,直到有一个成功:
- X.509 客户端证书:通过 TLS 双向认证,kubelet 和 kube-controller-manager 常用。
- ServiceAccount :Pod 内默认使用的 JWT ,Serverless 平台中函数 Pod 的主要认证方式。
- Bearer / Webhook :外部身份系统集成(如 OIDC)。
- 静态 / 密码文件:仅用于测试或遗留场景。
2.3.2 授权(Authorization)
授权模块决定“谁可以做什么”。Kubernetes 默认使用 RBAC(基于角色的访问控制):
- Role / ClusterRole:定义一组权限规则(verbs + resources)。
- RoleBinding / ClusterRoleBinding:将角色绑定到用户或 ServiceAccount。
- 评估顺序:多个授权模块(RBAC、ABAC、Webhook)按顺序执行,任何模块允许即通过。
常见陷阱:在 Serverless 平台中,如果每个函数 Pod 都使用独立的 ServiceAccount,会导致 etcd 中存储大量 RoleBinding 对象,增加 List 操作的延迟。建议使用命名空间级聚合角色来减少对象数量。
2.3.3 准入控制(Admission Control)
准入控制是请求处理流程中唯一可以修改请求对象的阶段。分为两类:
| 类型 | 执行时机 | 典型插件 | 对性能的影响 |
|---|---|---|---|
| Mutating(变更) | 先执行 | MutatingAdmissionWebhook、DefaultStorageClass | 高(涉及网络调用) |
| Validating(验证) | 后执行 | ValidatingAdmissionWebhook、PodSecurity | 中(可能涉及外部服务) |
在 Serverless 场景中,自定义 Webhook 常用于注入 Sidecar、设置资源配额、验证函数配置等。但 Webhook 的延迟会直接增加 API 请求的 P99 延迟,因此需要重点优化。
2.3.4 存储层(etcd)
etcd 是 kube-apiserver 的唯一持久化存储,所有资源对象最终都以 Key-Value 形式存储在 etcd 中。关键特性:
- Watch 机制:kube-apiserver 通过 etcd 的 Watch 接口监听资源变化,实现控制器模式。
- 事务支持:使用 etcd 的 Txn 接口保证资源更新的原子性。
- 存储格式:资源对象以 Protobuf 或 JSON 格式序列化后存储,默认使用 Protobuf(性能更优)。
2.4 核心组件交互关系总结
以下表格总结了各组件在请求处理中的角色与关键性能指标:
| 组件 | 输入 | 输出 | 关键性能指标 |
|---|---|---|---|
| HTTP 层 | HTTP 请求 | 路由后的内部请求 | QPS、连接数 |
| 认证 | / 证书 | 用户身份信息 | 认证延迟(P99) |
| 授权 | 用户 + 操作 + 资源 | 允许/拒绝 | 策略评估延迟 |
| 准入控制 | 资源对象 | 修改后的对象 | Webhook 延迟 |
| 存储层 | 序列化后的对象 | 持久化写入 | 写入延迟、Watch 延迟 |