CoreOS上Kubernetes 1.10.1集群执行kubectl logs提示需凭据求助
解决Kubectl Logs认证失败问题
Hey,我之前也碰到过一模一样的问题,咱们一步步把它搞定!你的CoreOS上K8s集群状态看起来都正常,就是kubectl logs报认证错误,这大概率是kubectl使用的配置文件缺少有效凭据或者权限不足导致的,下面是具体的排查修复步骤:
步骤1:先确认当前kubectl的配置文件
kubectl默认读取~/.kube/config作为配置文件,你可以先检查下当前的配置情况:
# 查看是否设置了KUBECONFIG环境变量 echo $KUBECONFIG # 如果没有输出,直接查看默认配置文件内容 cat ~/.kube/config
重点看配置里的users段落,有没有token、client-certificate这类认证字段——要是空的或者字段无效,肯定会触发认证失败。
步骤2:快速修复(Master节点上操作)
如果你是在集群的master节点上操作,直接用Kubernetes生成的管理员配置文件替换掉当前用户的配置就行:
# 复制master节点的默认admin配置文件 sudo cp /etc/kubernetes/admin.conf ~/.kube/config # 修改配置文件权限,确保当前用户能正常读取 sudo chown $(id -u):$(id -g) ~/.kube/config
执行完之后再试试kubectl logs pod-nginx2-689b9cdffb-qrpjn,应该就能正常拉取日志了。
步骤3:普通用户权限配置(非Master节点)
如果是在普通节点或者客户端机器上操作,需要创建一个有权限查看日志的ServiceAccount并绑定对应权限:
- 新建一个YAML文件(比如
log-reader.yaml),内容如下:
apiVersion: v1 kind: ServiceAccount metadata: name: log-reader namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: log-reader-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view # view角色包含查看Pod日志的基础权限 subjects: - kind: ServiceAccount name: log-reader namespace: default
- 应用这个配置到集群:
kubectl apply -f log-reader.yaml
- 获取这个ServiceAccount的认证token:
# 先拿到关联的secret名称 SECRET_NAME=$(kubectl get sa log-reader -o jsonpath='{.secrets[0].name}') # 解码token内容 TOKEN=$(kubectl get secret $SECRET_NAME -o jsonpath='{.data.token}' | base64 -d)
- 用token测试日志命令:
kubectl --token=$TOKEN logs pod-nginx2-689b9cdffb-qrpjn
如果正常,你可以把这个token添加到本地~/.kube/config的users段里,以后就不用每次手动加--token参数了。
额外检查点
- 要是你用的是证书认证,记得检查证书是否过期:
openssl x509 -in ~/.kube/client.crt -text -noout | grep Not
如果证书过期,需要重新生成客户端证书并更新kubeconfig。
- 测试当前用户的权限是否足够:
kubectl auth can-i get pods/logs
如果返回no,说明当前用户/ServiceAccount没有查看日志的权限,需要调整RBAC绑定规则。
内容的提问来源于stack exchange,提问作者Ronak Pandya
相关产品推荐
相关产品推荐

