Kubernetes 1.18.2集群启动出现Unauthorized错误的排查求助
问题分析与解决方案
从你贴出的所有组件日志来看,核心问题是系统组件的ServiceAccount无法通过Kubernetes API Server的认证——不管是flannel、coredns还是metrics-server,都报了Unauthorized错误,这说明这些组件没有获得足够的权限去访问集群的API服务,或者集群的认证机制本身存在配置异常。
可能的触发原因
- RBAC权限绑定缺失:flannel、coredns这类系统组件需要对应的ClusterRole和ClusterRoleBinding来赋予它们访问API的权限,如果这些绑定没有正确创建,就会直接触发认证失败。
- 集群初始化配置遗漏:如果是用kubeadm初始化的集群,可能初始化时没指定flannel需要的
--pod-network-cidr参数,或者后续部署组件时没有带上完整的RBAC配置。 - 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
相关产品推荐
相关产品推荐

