第三部分:控制平面组件 kube-apiserver 介绍

📝 前言

Kubernetes 集群是由一个控制平面和一组用于运行容器化应用的工作机器组成,这些工作机器称工作节点(Node)。

在控制平面中 kube-apiserver 是所有组件沟通的唯一入口,就像集群的大脑中枢,负责接收、校验和处理所有 API 请求。

本文是云原生之旅第三部分的第二篇,主要介绍 kube-apiserver 组件。

🧠 本章知识卡片

🚀 本章小节

1️⃣ Kubernetes 集群架构

— 来源:https://kubernetes.io/zh-cn/docs/concepts/architecture/

组件说明:

  • Cloud Controller Manager(可选):与云服务商(如AWS、Azure)交互,管理负载均衡、存储卷等云资源。
  • API Server(kube-apiserver):负责与其他组件(如kubectl、控制器、调度器)通信。
  • Scheduler(kube-scheduler):监听未调度的Pod,根据资源需求、节点负载等因素,将Pod分配到合适的Worker节点。
  • Controller Manager(kube-controller-manager):运行一系列控制器(Controller),确保集群状态符合预期。
  • etcd:分布式键值存储数据库,保存集群的所有配置数据和状态(如Pod、Service信息)。
  • kubelet:节点上的“代理”,负责与API Server通信,确保Pod按预期运行(如启动/停止容器、监控资源)。
  • kube-proxy(可选):维护节点上的网络规则(如iptables/IPVS),实现 Service 的负载均衡和流量转发。有些网络插件自己实现了流量代理就不需要该组件,例如:Cilium、kube-router 等
  • CRI(Container Runtime):容器运行时,例如:Docker、containerd、CRI-O。

2️⃣ kube-apiserver 工作原理

kube-apiserver 是 Kubernetes 的“中央枢纽”,所有集群操作(无论是来自用户、控制器还是节点)都必须经过它。

但它本身并不存储数据,所有状态由etcd管理。

它在集群中的数据流程大致如下图:

PS:这里省去了认证、鉴权等部分。

3️⃣ kube-apiserver 作用与定位

在 Kubernetes 架构中,kube-apiserver 扮演以下角色:

  • 统一的 API 接口

    对外提供 RESTful API,供用户、控制器和节点组件调用。

  • 身份认证与权限控制

    处理请求时进行认证(Authentication)和鉴权(Authorization)。

  • 数据验证与持久化

    校验资源对象的合法性,并将其存储到 etcd。

  • 集群状态查询与变更

    所有状态读取、修改均通过它转发给 etcd 或相关控制器。

4️⃣ kube-apiserver 功能特性

kube-apiserver的主要功能特性包括以下:

  • 声明式 API:基于 YAML/JSON 的资源描述文件,适合 GitOps。
  • 无状态设计:kube-apiserver 本身不存储数据,可通过部署多副本提高可用性。
  • 多版本 API 支持:通过版本号(如 v1、v1beta1)实现平滑升级。
  • Watch 机制:支持长连接实时推送资源变更事件。
  • 聚合层(Aggregation Layer):允许扩展自定义 API(CRD)。

5️⃣ 常见启动参数

以下是 kube-apiserver 常用的部分启动参数:

参数 说明
--bind-address 监听的 IP 地址(建议改为内网 IP,如 172.16.0.1
--advertise-address 向集群其他组件通告的 API Server IP(多网卡时需指定)
--etcd-servers etcd 集群的访问地址
--authorization-mode 鉴权模式(RBAC、Node、Webhook 等)
--enable-admission-plugins 启用的准入控制插件列表
--service-cluster-ip-range Service ClusterIP 可分配的网段(需与 CNI 插件匹配)
--client-ca-file 客户端 CA 证书文件路径
--tls-cert-file / --tls-private-key-file API Server 的 TLS 证书与私钥

✅ 总结

kube-apiserver 是 Kubernetes 集群的唯一 API 入口,承担了请求接收、认证鉴权、数据校验、持久化和事件分发等重要职责。

它的本质是一个 “状态机”

1. 接收请求 → 2. 验证请求 → 3. 持久化到 etcd → 4. 推送变更事件

其核心设计目标是:安全地暴露集群状态,并高效协调组件协作