"El panel de control ClusterRoleBinding" "no es válido: roleRef: valor no válido" al implementar la interfaz de usuario web

9

Estoy tratando de implementar la interfaz de usuario web de Kubernetes como se describe aquí: https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

La configuración de mi sistema es la siguiente:

$ 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"}

Después de iniciar el clúster minukube minikube start, creé una cuenta de servicio y ClusterRoleBinding como se describe aquí: 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

Ahora ejecuto:

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

o

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

y obtenga el siguiente resultado:

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

¿Qué pasó y cómo solucionarlo?

Skyblade
fuente

Respuestas:

1

El problema es que te perdiste esta nota:

NOTA: la apiVersión del recurso ClusterRoleBinding puede diferir entre las versiones de Kubernetes.

Antes de Kubernetes v1.8, la apiVersion era rbac.authorization.k8s.io/v1beta1.

Esto debería resolver este problema.

Editar1:

Este tema habla del mismo problema. específicamente este comentario. habla sobre

Los enlaces de roles son inmutables

Porque aquí está

dashboard-adminuser.yaml establece roleRef.

y

El archivo yaml que está aplicando más adelante tiene roleRef en el mismo espacio de nombres.

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
fuente
Mi versión de kubernetes es 1.16.2, por lo que puedo usar rbac.authorization.k8s.io/v1. También verifiqué kubectl api-versionscuál me mostró ambas rbac.authorization.k8s.io/v1y rbac.authorization.k8s.io/v1beta1, por lo tanto, no es el caso.
Skyblade
Después de su edición, encontré el archivo Léame del proyecto del tablero con las instrucciones de implementación: github.com/kubernetes/dashboard . Son ligeramente diferentes de los documentos oficiales de kubernetes.io. Pude iniciar el proceso de IU web sin errores, aunque tengo otro problema que me impide iniciar sesión. Entonces, acepto tu respuesta como correcta. ¡Gracias!
Skyblade
10

El error "no puede cambiar roleRef" se refería al hecho de que ClusterRoleBinding ya existía.

Intente eliminar el panel de kubernetes ClusterRoleBinding existente

Ejecute a continuación para eliminar existente:

kubectl delete clusterrolebinding kubernetes-dashboard

Después de eso intente instalar de nuevo. Háganos saber si eso resuelve el problema.

Umesh Kumhar
fuente
3
Ejecuté este comando kubectl delete clusterrolebinding kubernetes-dashboard, kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yamly aún obtengo el mismo error.
Skyblade
1
¡Esta fue la solución para mí!
Jean-Paul
Todavía recibo este error. Yo uso este manifiesto: raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc2/aio/…
Mohammad Alavi
1

También obtengo este error, resuelto ejecutando el tablero a través de minikube:

minikube dashboard

Salida:

🤔  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
fuente
Sí, funciona, pero mi objetivo era configurarlo manualmente usando la guía sin depender de la implementación de minikube.
Skyblade
0

Recién reproducido.

1) espacio de nombres creado, ServiceAccount y ClusterRolebinding

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) aplicarlo

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

3) Instalar el tablero de instrumentos

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
fuente
-1

Correr:

kubectl eliminar clusterrolebinding kubernetes-dashboard

... DESPUÉS del comando apply -f, no antes.

usuario13047220
fuente