1.4 Kube API Server
一、API Server 核心功能
Kubernetes API Server(kube-apiserver)是集群的唯一入口,提供 RESTful API 供所有组件和用户交互。其核心职责包括:
- 请求处理:接收并校验
kubectl、控制器、调度器等客户端的请求。 - 数据持久化:将集群状态(如 Pod、Service 等资源)存储到 ETCD。
- 认证与授权:通过插件链(如 RBAC、Webhook)控制访问权限。
- 资源版本控制:为每个对象维护多版本(如
v1、apps/v1)。 - API 扩展:支持 Custom Resource Definitions (CRDs)。
二、API Server 架构与组件交互
1 | graph LR |
- 唯一数据入口:所有组件(包括
kubelet)必须通过 API Server 操作资源。 - 无状态设计:可水平扩展,通过负载均衡暴露服务。
三、API Server 关键启动参数
配置文件通常位于 /etc/kubernetes/manifests/kube-apiserver.yaml(静态 Pod 部署方式)。以下为关键参数:
| 参数 | 作用 | 示例值 |
|---|---|---|
--etcd-servers |
指定 ETCD 集群地址 | https://10.0.0.1:2379 |
--authorization-mode |
授权模式(如 RBAC、Node) | RBAC,Node |
--enable-admission-plugins |
准入控制插件(如资源限制、Pod 安全策略) | ResourceQuota,PodSecurity |
--service-cluster-ip-range |
Service 的 ClusterIP 地址池 | 10.96.0.0/12 |
--tls-cert-file |
API Server 的 TLS 证书 | /etc/kubernetes/pki/apiserver.crt |
--audit-log-path |
审计日志路径(记录所有 API 请求) | /var/log/kubernetes/audit.log |
四、常见命令与使用场景
1. 查看 API Server 状态
1 | # 检查 API Server Pod 状态 |
2. 直接访问 API(无需 kubectl)
1 | # 获取所有 Pod 信息(需认证) |
3. 调试 API 请求
1 | # 查看请求的详细过程(包括 API 版本和响应) |
4. 管理 API 扩展(CRD)
1 | # 创建自定义资源定义(CRD) |
5. 安全相关操作
1 | # 检查当前用户的权限 |
五、API Server 高可用配置
生产环境中通常需要部署多个 API Server 实例,通过负载均衡对外提供服务:
1 | # 示例:kube-apiserver 的静态 Pod 配置(高可用) |
六、常见问题排查
1. API Server 无法启动
- 检查日志:
1
journalctl -u kube-apiserver -f
- 常见原因:
- ETCD 连接失败(证书错误或网络不通)。
- 端口冲突(默认 6443)。
2. 请求被拒绝
- 错误示例:
403 Forbidden - 解决方案:
1
2# 检查 RBAC 权限
kubectl get rolebindings,clusterrolebindings --all-namespaces
3. 性能优化
- 启用缓存:
--watch-cache=true(默认开启)。 - 限制请求速率:
--max-requests-inflight=400。
七、总结
- API Server 是集群的“网关”:所有操作必须通过其 REST API。
- 核心能力:认证、授权、版本转换、数据校验。
- 关键命令:
kubectl cluster-info、kubectl api-resources、curl直接访问 API。 - 生产建议:启用审计日志、配置高可用、定期升级。
通过理解 API Server 的运作机制,可以更高效地管理 Kubernetes 集群并快速定位问题。