如何在当前情况下登录到K8s代理

44次阅读
没有评论

问题描述

在过去,当我运行kubectl proxy时,我可以立即登录到http://localhost:8001,但现在会显示登录提示。当点击“跳过”时,会显示以下消息:

configmaps is forbidden: User “system:serviceaccount:kube-system:kubernetes-dashboard” cannot list configmaps in the namespace “default”: Unknown user “system:serviceaccount:kube-system:kubernetes-dashboard”

尝试解决问题
当复制kubeconfig时,登录也会失败。

解决方案

请注意以下操作可能存在版本差异及修改前做好备份。

最佳解决方案

确认Kubernetes版本及RBAC设置

首先,确保你的Kubernetes版本是否高于1.8,因为从1.8版本开始,RBAC(Role-Based Access Control)已默认启用。接下来,我们需要解决RBAC权限的问题,因为错误消息表明Kubernetes Dashboard服务帐户没有在默认命名空间中列出configmaps的权限。默认情况下,RBAC是拒绝所有的。

创建ClusterRoleBinding

为了授予Dashboard完整的管理员权限,你可以创建以下ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system

将上述内容保存为dashboard-rolebinding.yaml,然后在集群中创建它:

kubectl create -f dashboard-rolebinding.yaml

重要提示:在执行此操作之前,请确保从外部保护好你的Dashboard。否则,任何人都可以完全访问你的集群。以下是一篇关于保护Kubernetes Dashboard的优秀文章,来自Heptio,由Joe Beda本人编写:https://blog.heptio.com/on-securing-the-kubernetes-dashboard-16b09b1b7aca

这个解决方案将授予Kubernetes Dashboard完整的cluster-admin权限,但请注意这可能会增加安全风险。在进行任何更改之前,请务必详细了解安全性和权限方面的知识。

其他解决方案

如果你不想直接授予Dashboard完整的管理员权限,你可以根据实际需求调整权限设置,以更精细的方式控制访问。你可以查阅Kubernetes官方文档以获取更多关于RBAC的信息。

这些解决方案应该能够帮助你解决在当前情况下登录到Kubernetes代理的问题。记得在操作之前备份重要数据,并在修改权限设置时格外小心。

请根据你的实际需求和安全策略,选择最适合的解决方案来解决这个问题。

正文完