我正在尝试运行Kubernetes仪表板。我已经按照official wiki中的步骤进行操作。
列出kube系统吊舱,我明白了:
kubectl get pods -n kube-system
kubernetes-dashboard-head-7478c547df-8bmxf 0/1 CrashLoopBackOff 1 12s
重新启动此Pod会导致相同的崩溃。在日志中,它似乎已崩溃是因为:
kubectl logs -n kube-system kubernetes-dashboard-head-7478c547df-8bmxf
2019/02/26 23:15:57 Starting overwatch
2019/02/26 23:15:57 Using namespace: kube-system
2019/02/26 23:15:57 Using in-cluster config to connect to apiserver
2019/02/26 23:15:57 Using secret token for csrf signing
2019/02/26 23:15:57 Initializing csrf token from kubernetes-dashboard-csrf secret
panic: secrets "kubernetes-dashboard-csrf" is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard-head" cannot get secrets in the namespace "kube-system": RBAC: role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal-head" not found
我不完全了解。来自命名空间容器serviceaccounts
的{{1}}:
kubernetes-dashbaord-head
由于kubectl get serviceaccounts -n kube-system
kubernetes-dashboard-head 1 8h
中的serviceaccount
(与“用户”相同吗?)在命名空间serviceaccounts
下的kube-system
中列出,为什么它不能从该命名空间获取秘密? / p>
在向RBAC: role.rbac.authorization.k8s.io ... not found
发帖的情况下,这与此issue相关吗?
这是minikube
上的不是。
答案 0 :(得分:2)
首先,您的案例与无关。这就是您遇到的类似错误。
您需要具有可能没有的适当的Role和RoleBinding,这就是为什么会出现此错误的原因。 您可以使用以下命令进行验证:
kubectl get role,rolebinding -n kube-system |grep kubernetes-dashboard-minimal-head
如果您从安装指南中查看Kubernetes仪表板的最新部署issue文件,则将在下方找到Role和RoleBinding资源。
# ------------------- Dashboard Role & Role Binding ------------------- #
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubernetes-dashboard-minimal-head
namespace: kube-system
rules:
# Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.
- apiGroups: [""]
resources: ["secrets"]
verbs: ["create"]
...
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-dashboard-minimal-head
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: kubernetes-dashboard-minimal-head
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-head
namespace: kube-system
但是我不确定您是如何部署部署的,因此建议您通过以下方式删除部署yaml文件
kubectl delete -f <your-deployment-file.yaml>
然后最新申请,其中包括仪表板的角色和RoleBindings
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard-head.yaml
然后您可以通过以下方式再次进行验证:
kubectl get role,rolebinding -n kube-system |grep kubernetes-dashboard-minimal-head
当然要检查一下您的吊舱。 我希望它会有用
答案 1 :(得分:1)
错误提示secrets "kubernetes-dashboard-csrf" is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard-head" cannot get secrets in the namespace "kube-system": RBAC: role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal-head" not found
时,您正在kubernetes-dashboard-head
命名空间的kube-system
serviceaccount下运行k8s-dashboard pod。并且服务帐户无权访问get/list
秘密kubernetes-dashboard-csrf
。
现在要解决此问题,您需要授予访问权限以获取该机密。您可以通过两种方式完成此操作:1.允许仪表板以cluster-admin
角色运行。2.仅允许它在该命名空间中获取该秘密。
从安全角度来看,第二个选择是很多。为此,您需要按以下方式添加/编辑绑定到此服务帐户(kubernetes-dashboard-head)的clusterrole(可能是clusterrole,因为您要查看/编辑整个集群的对象):
- apiGroups:
- ""
resourceNames:
- kubernetes-dashboard-csrf
resources:
- secrets
verbs:
- get
- list
- create
- update