k8s master 节点 Unauthorized

k8s master 节点 Unauthorized

故障

多master集群的k8s其中一台master 出现 You must be logged in to the server (Unauthorized),说明当前节点上的 kubectl 无法认证到 apiserver。
共有三台master:

  • master1 正常
  • master2 异常
  • master3 异常

排查问题

用 admin 证书直接用 curl 测试认证

1curl --cert /etc/kubernetes/pki/admin.crt --key /etc/kubernetes/pki/admin.key -k https://10.10.10.68:6443/healthz
  • 结果 HTTP/1.1 200 OK → TLS + 认证成功(client cert 被接受)。
  • 若返回 401/403 → TLS 成功但授权失败(RBAC 或 client cert 虽被接受但没有权限)。把完整返回贴来。
  • 若 curl 报 TLS 错误 → client cert/CA 有问题(贴错误信息)。

把 kubeconfig 中的 client cert/key 解码到临时文件并检查它们(确认 kubectl 用的是这个证书、并检查证书 Subject/CN/到期日)

1# 解码证书与私钥
2awk '/client-certificate-data/ {print $2}' ~/.kube/config | base64 -d > /tmp/kube_client.crt
3awk '/client-key-data/ {print $2}' ~/.kube/config | base64 -d > /tmp/kube_client.key
4chmod 600 /tmp/kube_client.key
5
6# 检查证书主体与到期日
7openssl x509 -in /tmp/kube_client.crt -noout -text | egrep "Subject:|Not Before|Not After"

如果看到 Not After 在过去 → 证书过期(那就说明证书过期了)。 Subject 的 CN 通常是 kubernetes-admin 或 admin / system:admin,我们要确认 CN 是否合理。

我这边发现证书过期了,所以导致认证失败了。

解决

使用 kubeadm 重新生成 admin kubeconfig.

在任意 master 上执行:

 1# 备份旧配置
 2mv ~/.kube/config ~/.kube/config.bak
 3
 4# 重新生成 admin kubeconfig
 5kubeadm init phase kubeconfig admin
 6
 7# 拷贝到用户目录
 8mkdir -p ~/.kube
 9cp /etc/kubernetes/admin.conf ~/.kube/config
10chmod 600 ~/.kube/config

测试

1kubectl get nodes