1.4 Kube API Server

1.4 Kube API Server

一、API Server 核心功能

Kubernetes API Server(kube-apiserver)是集群的唯一入口,提供 RESTful API 供所有组件和用户交互。其核心职责包括:

  1. 请求处理:接收并校验 kubectl、控制器、调度器等客户端的请求。
  2. 数据持久化:将集群状态(如 Pod、Service 等资源)存储到 ETCD。
  3. 认证与授权:通过插件链(如 RBAC、Webhook)控制访问权限。
  4. 资源版本控制:为每个对象维护多版本(如 v1apps/v1)。
  5. API 扩展:支持 Custom Resource Definitions (CRDs)。

二、API Server 架构与组件交互

1
2
3
4
5
6
7
graph LR
A[用户/工具] -->|HTTP请求| B[API Server]
B -->|读写| C[ETCD]
B --> D[Controller Manager]
B --> E[Scheduler]
D -->|监听资源变化| B
E -->|获取未调度Pod| B
  • 唯一数据入口:所有组件(包括 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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 检查 API Server Pod 状态 
# 通常Kubeadm在master node的kubesystem namespace中将kubeapi server服务器部署为pod
kubectl get pods -n kube-system -l component=kube-apiserver
# 在Kubeadm管理情况下,可以在pod definition file查看options:
cat /etc/kubernetes/manifests/kube-apiserver.yaml

#在非Kubeadm管理情况下,options查看:
cat /etc/systemd/system/kube-apiserver.service

# 查看正在运行的进程
ps -aux | grep kube-apiserver

# 测试 API Server 连通性
kubectl cluster-info

2. 直接访问 API(无需 kubectl)

1
2
3
4
5
6
# 获取所有 Pod 信息(需认证)
curl -k -H "Authorization: Bearer $(kubectl get secret -n default -o jsonpath='{.items[0].data.token}' | base64 --decode)" \
https://<API_SERVER_IP>:6443/api/v1/pods

# 查看支持的 API 资源列表
kubectl api-resources

3. 调试 API 请求

1
2
3
4
5
# 查看请求的详细过程(包括 API 版本和响应)
kubectl get pods -v=8

# 以 YAML 格式输出原始 API 响应
kubectl get pod nginx -o yaml --raw

4. 管理 API 扩展(CRD)

1
2
3
4
5
# 创建自定义资源定义(CRD)
kubectl apply -f my-crd.yaml

# 查看所有 API 版本(包括自定义资源)
kubectl api-versions

5. 安全相关操作

1
2
3
4
5
# 检查当前用户的权限
kubectl auth can-i create deployments --namespace dev

# 查看审计日志(需提前配置 --audit-log-path)
tail -f /var/log/kubernetes/audit.log

五、API Server 高可用配置

生产环境中通常需要部署多个 API Server 实例,通过负载均衡对外提供服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 示例:kube-apiserver 的静态 Pod 配置(高可用)
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --etcd-servers=https://10.0.0.1:2379,https://10.0.0.2:2379
- --service-cluster-ip-range=10.96.0.0/12
- --apiserver-count=3 # 指定集群中 API Server 的数量

六、常见问题排查

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-infokubectl api-resourcescurl 直接访问 API。
  • 生产建议:启用审计日志、配置高可用、定期升级。

通过理解 API Server 的运作机制,可以更高效地管理 Kubernetes 集群并快速定位问题。