"Das ClusterRoleBinding" -Kubernetes-Dashboard "ist ungültig: roleRef: Ungültiger Wert" bei der Bereitstellung der Web-Benutzeroberfläche

9

Ich versuche, die Kubernetes-Web-Benutzeroberfläche wie hier beschrieben bereitzustellen: https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

Meine Systemkonfiguration lautet wie folgt:

$ uname -a
Linux debian 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux

$ /usr/bin/qemu-system-x86_64 --version
QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg-8+deb10u3)
Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers

$ minikube version
minikube version: v1.5.2
commit: 792dbf92a1de583fcee76f8791cff12e0c9440ad-dirty

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:23:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:09:08Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

Nach dem Start des Minukube-Clusters habe minikube startich ein Dienstkonto und ClusterRoleBinding erstellt, wie hier beschrieben: https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

$ nano dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
$ kubectl apply -f dashboard-adminuser.yaml
$ nano dashboard-adminuser.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
$ kubectl apply -f dashboard-adminuser.yaml

Jetzt führe ich aus:

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommended.yaml

oder

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml

und erhalten Sie die folgende Ausgabe:

namespace/kubernetes-dashboard configured
serviceaccount/kubernetes-dashboard configured
service/kubernetes-dashboard configured
secret/kubernetes-dashboard-certs configured
secret/kubernetes-dashboard-csrf configured
secret/kubernetes-dashboard-key-holder configured
configmap/kubernetes-dashboard-settings configured
role.rbac.authorization.k8s.io/kubernetes-dashboard configured
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard configured
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard configured
deployment.apps/kubernetes-dashboard configured
service/dashboard-metrics-scraper configured
deployment.apps/dashboard-metrics-scraper configured
The ClusterRoleBinding "kubernetes-dashboard" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"ClusterRole", Name:"kubernetes-dashboard"}: cannot change roleRef

Was ist passiert und wie kann man das beheben?

Skyblade
quelle

Antworten:

1

Problem ist, dass Sie diesen Hinweis verpasst haben:

HINWEIS: Die APIVersion der ClusterRoleBinding-Ressource kann zwischen den Kubernetes-Versionen unterschiedlich sein.

Vor Kubernetes v1.8 war die API-Version rbac.authorization.k8s.io/v1beta1.

Dies sollte dieses Problem lösen.

Edit1:

In dieser Ausgabe geht es um dasselbe Problem. speziell dieser Kommentar. redet über

Rollenbindungen sind unveränderlich

Ursache hier ist

dashboard-adminuser.yaml setzt roleRef.

und

Die Yaml-Datei, die Sie später anwenden, hat roleRef im selben Namespace.

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: kubernetes-dashboard
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard
Devidas
quelle
Meine Kubernetes-Version ist 1.16.2, also kann ich verwenden rbac.authorization.k8s.io/v1. Ich habe auch überprüft, kubectl api-versionswas mir beides gezeigt hat rbac.authorization.k8s.io/v1und rbac.authorization.k8s.io/v1beta1, also ist es nicht der Fall.
Skyblade
Nach Ihrer Bearbeitung fand ich die Readme-Datei für das Dashboard-Projekt mit den Bereitstellungsanweisungen: github.com/kubernetes/dashboard . Sie unterscheiden sich geringfügig von den offiziellen Dokumenten von kubernetes.io. Ich konnte den Web-UI-Prozess ohne Fehler starten, obwohl ich ein anderes Problem habe, das mich daran hindert, mich anzumelden. Also akzeptiere ich Ihre Antwort als richtig. Vielen Dank!
Skyblade
10

Der Fehler "roleRef kann nicht geändert werden" bezog sich auf die Tatsache, dass die ClusterRoleBinding bereits vorhanden war.

Versuchen Sie, das vorhandene ClusterRoleBinding- Kubernetes-Dashboard zu löschen

Führen Sie unten aus, um vorhandene zu löschen:

kubectl delete clusterrolebinding kubernetes-dashboard

Versuchen Sie danach erneut zu installieren. Lassen Sie uns wissen, ob das Problem dadurch behoben wird.

Umesh Kumhar
quelle
3
Ich habe diesen Befehl kubectl delete clusterrolebinding kubernetes-dashboarddann ausgeführt kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yamlund immer noch den gleichen Fehler erhalten.
Skyblade
1
Das war die Lösung für mich!
Jean-Paul
Ich bekomme immer noch diesen Fehler. Ich benutze dieses Manifest: raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc2/aio/…
Mohammad Alavi
1

Ich erhalte auch diesen Fehler, der durch Ausführen des Dashboards durch minikube behoben wurde:

minikube dashboard

Ausgabe:

🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
🎉  Opening http://127.0.0.1:34653/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
surfealokesea
quelle
Ja, es funktioniert, aber mein Ziel war es, es manuell mithilfe des Handbuchs einzurichten, ohne auf die Implementierung von minikube angewiesen zu sein.
Skyblade
0

Gerade reproduziert.

1) Namespace, ServiceAccount und ClusterRolebinding erstellt

cat dashboard-adminuser.yaml 
---
apiVersion: v1
kind: Namespace
metadata:
  name: kubernetes-dashboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

2) wende es an

kubectl apply -f dashboard-adminuser.yaml 
namespace/kubernetes-dashboard created
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user unchanged

3) Installieren Sie das Dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard unchanged
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
VKR
quelle
-1

Lauf:

kubectl Clusterclolebinding löschen kubernetes-dashboard

... NACH dem Befehl apply -f, nicht vorher.

user13047220
quelle