节点维护、控制面证书与 CA 轮换

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
CA Certificate Authority 证书颁发机构
CI Continuous Integration 持续集成
CRI Container Runtime Interface 容器运行时接口
CSI Container Storage Interface 容器存储接口
CSR Certificate Signing Request 证书签名请求
DNS Domain Name System 域名系统
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
GitOps GitOps 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式
GKE Google Kubernetes Engine Google 托管 Kubernetes 服务
HA High Availability 高可用
IdP Identity Provider 身份提供方
LB Load Balancer 负载均衡器
OIDC OpenID Connect 基于 OAuth 2.0 的身份认证协议
OS Operating System 操作系统
PKI Public Key Infrastructure 公钥基础设施
SSH Secure Shell 安全远程登录协议
TLS Transport Layer Security 传输层安全协议

前置:kubeadm HA、可恢复 etcd/PKI 备份、带外入口。EKS/GKE 控制面证书由平台管理;托管节点优先建新节点池替换,不照搬自建静态 Pod 操作。

1. 节点 OS 与运行时维护#

  1. 记录节点 image/内核/containerd/kubelet 版本、磁盘、Pod/卷和驱逐预算;确认剩余容量。
  2. 按 调度篇 cordon→drain,任何驱逐失败均停住。
  3. 自建节点通过固定软件源升级批准的 OS/runtime 包,按发行版要求重启;不顺带升级未评审的 kubelet。
  4. 带外检查 kubelet/containerd、DNS、CRI、磁盘与证书后,再执行:
kubectl wait --for=condition=Ready "node/$NODE" --timeout=10m
kubectl describe node "$NODE"
kubectl uncordon "$NODE"
kubectl -n orders get pods -o wide
  1. 业务验收和监控稳定后处理下一台。失败节点保持 cordon;必要时以旧 image 建替代节点,先 fencing 有卷的旧节点,再迁移。

控制面维护一次一台,开始前 etcd quorum 健康;不能同时重启两台三成员控制面。kubelet/集群版本更新另按 升级篇。

2. kubeadm 叶子证书续期#

在每台控制面检查,确认不是外部 CA 管理:

sudo kubeadm certs check-expiration
sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates -issuer -subject

先做受限加密备份 /etc/kubernetes/pki、kubeconfig 与 etcd;manifest 备份不得放静态 Pod 扫描目录。选择单台控制面,从 LB 摘流后:

sudo kubeadm certs renew all
sudo kubeadm certs check-expiration

续期不自动重启所有组件。在当前这台控制面每次移出一个 manifest,等待 kubelet 停止其旧容器,再放回并确认新容器健康;依次 etcd、kube-apiserver、kube-controller-manager、kube-scheduler。下面例子仅重启 apiserver,离开 SSH 前必须确认文件已归位:

sudo install -d -m 700 /var/lib/k8s-manifest-maintenance
sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /var/lib/k8s-manifest-maintenance/
sudo crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps --name kube-apiserver
# 等待至少一个 kubelet fileCheckFrequency,确认旧容器已停止后再继续。
sudo mv /var/lib/k8s-manifest-maintenance/kube-apiserver.yaml /etc/kubernetes/manifests/
sudo crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps --name kube-apiserver
kubectl get --raw='/readyz?verbose'

使用该节点本地健康检查再确认,不只依赖 LB 可能落到别的成员的成功响应。etcd 重启前/后按 etcd 健康检查检查 quorum。最后恢复 LB,验证所有控制面后再下一台。

若管理员本地 kubeconfig 是旧 admin.conf 副本,安全更新副本;企业 OIDC 用户不应改成 admin.conf。kubelet 客户端自动轮换独立于 kubeadm certs renew all,检查 /var/lib/kubelet/pki/kubelet-client-current.pem 和 CSR:

kubectl get csr

不批量 approve 未审核 CSR;核对节点身份、signerName、用途、来源。

3. CA 轮换采用并行新集群迁移#

kubeadm 不提供一条命令完成通用 CA 轮换。企业可执行路径为:

  1. 用 建设篇建新集群,使用新 CA、不同集群名/context,接入同一 IdP 的受限受众策略。
  2. 按 多集群篇配置独立 GitOps、云身份和 DNS 所有者;分发新 API CA 给 CI/监控/外部 webhook 客户端。
  3. 按 Velero恢复对象/卷或按应用复制数据;外部数据库保持兼容,禁止两侧重复消费。
  4. 在临时域名完成 TLS、准入 webhook、聚合 API、CSI、业务身份和故障验证;按批次切流。
  5. 观察期内旧集群只作为受控回退目标;涉及数据写入时按迁移水位回切,不双写猜测一致性。
  6. 全部客户端迁移后撤销旧身份、移除旧信任、备份并退役旧集群。

必须原地换 CA 的环境需要专属双信任过渡方案,分别处理 Kubernetes CA、etcd CA、front-proxy CA、客户端 kubeconfig;不能套用叶子证书续期。本路线用并行迁移避免不完整信任切换。

参考:kubeadm 证书管理、安全排空。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭