2. Kubernetes 控制平面核心组件:API Server、etcd、Controller Manager、Scheduler 的角色与通信机制

Kubernetes 控制平面(Control Plane)是集群的“大脑”,负责全局决策与状态管理。其四个核心组件——API Server、etcd、Controller Manager、Scheduler——通过严格定义的接口与通信协议协同工作,共同维护集群的期望状态。理解它们的角色与交互机制,是掌握控制平面接口调用与安全策略集成的基础。

2.1 核心组件角色总览

下表从功能定位、数据流向、安全边界三个维度,对比四个核心组件的职责差异:

组件 核心职责 数据流向 安全关注点
API Server (kube-apiserver) 集群网关,所有组件与外部请求的唯一入口;提供 RESTful API 进行资源操作;执行认证、授权、准入控制。 双向:接收请求 → 写入 etcd;监听 etcd 变化 → 通知客户端。 TLS 终止、RBAC 鉴权、Admission Webhook 集成、审计日志。
etcd 分布式键值存储,保存集群所有资源对象(Pod、Service、Secret 等)的完整状态。 仅接受 API Server 的读写请求;通过 Watch 机制推送变更。 数据加密(静态加密 + TLS 传输)、访问控制(仅 API Server 可直连)。
Controller Manager (kube-controller-manager) 运行多个控制器(如 Node Controller、ReplicaSet Controller),通过控制循环将当前状态调整为期望状态。 单向:通过 API Server 读取状态 → 对比期望 → 通过 API Server 写入调整指令。 ServiceAccount 权限最小化、避免控制器间资源竞争。
Scheduler (kube-scheduler) 为新创建的 Pod 选择最合适的 Node;基于资源需求、约束、亲和性等策略进行调度决策。 单向:通过 API Server 读取未调度 Pod → 写入绑定结果到 API Server。 调度策略配置安全、避免特权 Pod 绕过调度约束。

2.2 组件间通信机制

所有组件间的通信都遵循“以 API Server 为中心”的星型模型。etcd 是唯一不与 API Server 之外的组件直接通信的存储层。这种架构设计保证了状态一致性与安全边界清晰。

关键原则:Controller Manager 和 Scheduler 从不直接访问 etcd;它们的所有读写操作都通过 API Server 的 REST API 完成。这确保了 etcd 的访问权限可以被 API Server 集中管控。

2.2.1 通信路径与协议

  • API Server ↔ etcd:使用 gRPC 协议,通过 TLS 双向认证。API Server 是 etcd 的唯一合法客户端。
  • Controller Manager ↔ API Server:使用 HTTPS,通过 ServiceAccount 或客户端证书认证。Controller Manager 内部各控制器使用 Informer 机制(基于 List+Watch)高效同步资源。
  • Scheduler ↔ API Server:使用 HTTPS,同样通过 ServiceAccount 认证。Scheduler 通过 Watch 机制监听未调度的 Pod 队列。
  • 外部用户/组件 ↔ API Server:使用 HTTPS,支持多种认证方式(X.509 证书、Bearer 、OIDC 等)。

2.2.2 核心通信流程:Pod 创建与调度

以下流程展示了控制平面组件如何协作完成一个 Pod 的创建与调度:

  1. 用户提交 Pod 定义(通过 kubectl 或 API 调用)到 API Server。
  2. API Server 执行认证、授权、准入控制(包括 Secret 挂载策略检查),验证通过后将 Pod 对象写入 etcd。
  3. Scheduler 通过 Watch 机制发现未绑定 Node 的 Pod,执行调度算法,将 Pod 与目标 Node 的绑定关系写回 API Server。
  4. API Server 更新 etcd 中的 Pod 状态,并通知目标 Node 上的 kubelet。
  5. Controller Manager 中的相关控制器(如 ReplicaSet Controller)持续监控 Pod 状态,确保副本数符合期望。

2.3 控制平面组件交互架构图

下图展示了四个核心组件之间的通信关系与数据流向:

Kubernetes 控制平面组件交互架构 Kubernetes 控制平面组件交互架构 外部用户 / kubectl API Server 认证 · 授权 · 准入控制 · 审计 gRPC + TLS etcd 分布式键值存储 Controller Manager Node / ReplicaSet / Endpoint 等控制器 List+Watch / Write Scheduler 调度策略 · 绑定决策 Watch / Bind 通信安全要点 • 所有组件间通信均使用 TLS 加密 • etcd 仅接受 API Server 的连接,其他组件不得直连 etcd

2.4 API Server 的 Watch 机制与 Informer 模式

Controller Manager 和 Scheduler 的高效运行依赖于 API Server 提供的 Watch 机制。该机制允许客户端(如控制器)建立长连接,实时接收资源对象的变更事件(ADDED、MODIFIED、DELETED),而无需频繁轮询。

最佳实践:生产环境中,Controller Manager 和 Scheduler 内部使用 Informer(基于 List+Watch 的本地缓存库)来减少对 API Server 的直接请求压力。Informer 将资源对象缓存在本地内存中,仅通过 Watch 事件增量更新,大幅提升性能。

2.4.1 Watch 事件流示例

以下代码片段展示了 Scheduler 如何通过 Watch 监听未调度的 Pod:

# Scheduler 内部逻辑(伪代码)
watcher, err := clientset.CoreV1().Pods("").Watch(context.TODO(), metav1.ListOptions{
    FieldSelector: "spec.nodeName=",  # 仅监听未绑定 Node 的 Pod
})
for event := range watcher.ResultChan() {
    pod := event.Object.(*v1.Pod)
    switch event.Type {
    case watch.Added:
        // 将 Pod 加入调度队列
        scheduleQueue.Add(pod)
    case watch.Modified:
        // 更新 Pod 状态
        scheduleQueue.Update(pod)
    case watch.Deleted:
        // 从调度队列移除
        scheduleQueue.Delete(pod)
    }
}

2.5 控制平面通信的安全边界

在《控制平面接口调用与 Secrets 管理准入策略集成》课程中,理解通信安全边界至关重要。以下是各组件通信的安全控制要点:

通信路径 认证方式 授权方式 传输加密
外部用户 → API Server X.509 证书 / Bearer / OIDC RBAC(Role-Based Access Control) TLS 1.2+
Controller Manager → API Server ServiceAccount (自动挂载) RBAC(系统预置 ClusterRole) TLS 1.2+
Scheduler → API Server ServiceAccount (自动挂载) RBAC(系统预置 ClusterRole) TLS 1.2+
API Server → etcd 双向 TLS 证书认证 etcd 角色权限(仅允许 API Server 用户) TLS 1.2+
安全风险提示:如果 etcd 的 TLS 配置不当或 API Server 的 etcd 客户端证书泄露,攻击者可能直接读取 etcd 中的 Secrets 数据。在生产环境中,务必启用 etcd 的静态数据加密(Encryption at Rest),并严格限制 etcd 的网络访问来源。

2.6 组件角色与 Secrets 管理的关系

在后续章节中,我们将深入探讨 Secrets 管理准入策略。这里先建立控制平面组件与 Secrets 生命周期的关联:

  • API Server:Secrets 的创建、读取、更新、删除均通过 API Server 进行。准入控制器(如 SecretMutation 或自定义 Webhook)可以在写入 etcd 前对 Secrets 进行校验或转换。
  • etcd:Secrets 的持久化存储位置。未加密的 etcd 数据是 Secrets 泄露的最大风险点。
  • Controller Manager:某些控制器(如 ServiceAccount Controller)会自动创建和管理 Secrets(如 ServiceAccount Secret)。
  • Scheduler:调度决策不直接操作 Secrets,但 Pod 的调度结果会影响 Secrets 被挂载到哪个 Node 上,间接影响 Secrets 的物理分布。

理解这些组件的角色与通信机制,为后续设计 Secrets 管理准入策略(如强制加密、限制挂载范围、审计访问日志)奠定了架构基础。