You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes 1.18.2集群启动出现Unauthorized错误的排查求助

问题分析与解决方案

从你贴出的所有组件日志来看,核心问题是系统组件的ServiceAccount无法通过Kubernetes API Server的认证——不管是flannel、coredns还是metrics-server,都报了Unauthorized错误,这说明这些组件没有获得足够的权限去访问集群的API服务,或者集群的认证机制本身存在配置异常。

可能的触发原因

  1. RBAC权限绑定缺失:flannel、coredns这类系统组件需要对应的ClusterRole和ClusterRoleBinding来赋予它们访问API的权限,如果这些绑定没有正确创建,就会直接触发认证失败。
  2. 集群初始化配置遗漏:如果是用kubeadm初始化的集群,可能初始化时没指定flannel需要的--pod-network-cidr参数,或者后续部署组件时没有带上完整的RBAC配置。
  3. ServiceAccount Token挂载异常:Pod没有正确挂载对应的ServiceAccount token卷,导致无法向API Server提供合法的认证凭证。

分步解决步骤

1. 先检查关键权限配置是否存在

首先确认kube-system命名空间下的核心ServiceAccount和对应的权限绑定是否正常:

# 查看kube-system下的所有ServiceAccount
kubectl get sa -n kube-system
# 检查flannel的ClusterRole和ClusterRoleBinding
kubectl get clusterrole | grep flannel
kubectl get clusterrolebinding | grep flannel
# 同理检查coredns的权限绑定
kubectl get clusterrole | grep coredns
kubectl get clusterrolebinding | grep coredns

如果发现某个组件的ClusterRole或ClusterRoleBinding不存在,那就是权限配置缺失导致的问题。

2. 重新部署异常的系统组件(以kubeadm+flannel为例)

如果权限绑定缺失,最直接的方式是删除现有异常组件,重新部署带完整RBAC配置的版本:

  • 重新部署flannel:
    # 删除现有flannel的DaemonSet
    kubectl delete daemonset kube-flannel-ds-amd64 -n kube-system
    # 重新应用flannel的官方部署文件(确保文件包含完整的RBAC配置,可提前下载到本地执行)
    kubectl apply -f kube-flannel.yml
    
  • 重新部署coredns:
    # 删除现有coredns部署
    kubectl delete deployment coredns -n kube-system
    # 用kubeadm重新生成并部署coredns
    kubeadm init phase addon coredns
    
  • 重新部署metrics-server:
    确保metrics-server的部署yaml包含允许访问metrics相关API的ClusterRole,然后执行:
    kubectl delete deployment metrics-server -n kube-system
    kubectl apply -f metrics-server-deployment.yml
    

3. 验证API Server的认证配置(如果重新部署后问题依旧)

需要检查API Server的启动参数是否正确开启了ServiceAccount认证:

# 查看API Server的pod日志
kubectl logs kube-apiserver-<你的节点名称> -n kube-system | grep service-account

确认日志中包含以下默认kubeadm会自动配置的参数:

  • --service-account-key-file
  • --service-account-signing-key-file
  • --service-account-token-lookup=true

如果这些参数缺失,需要修改API Server的静态Pod配置文件(通常在/etc/kubernetes/manifests/kube-apiserver.yaml),添加对应参数后重启API Server。

4. 验证修复效果

执行以下命令查看组件状态是否恢复正常:

kubectl get pods -n kube-system
# 查看flannel日志是否还有Unauthorized错误
kubectl logs kube-flannel-ds-amd64-<新生成的pod名称> -n kube-system

内容的提问来源于stack exchange,提问作者sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:07:58