“O painel de controle de cluster ClusterRoleBinding” “é inválido: roleRef: valor inválido” ao implantar a interface da Web

9

Estou tentando implantar a interface do usuário da Web do Kubernetes, conforme descrito aqui: https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

Minha configuração do sistema é a seguinte:

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

Depois de iniciar o cluster do minukube minikube start, criei uma conta de serviço e ClusterRoleBinding conforme descrito aqui: 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

Agora eu executo:

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

ou

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

e obtenha a seguinte saída:

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

O que aconteceu e como corrigi-lo?

Skyblade
fonte

Respostas:

1

problema é que você perdeu esta nota:

NOTA: a apiVersion do recurso ClusterRoleBinding pode diferir entre as versões do Kubernetes.

Antes do Kubernetes v1.8, a apiVersion era rbac.authorization.k8s.io/v1beta1.

Isso deve resolver esse problema.

Edit1:

esse problema fala sobre o mesmo problema. especificamente este comentário. fala sobre

As ligações de função são imutáveis

Porque aqui está

dashboard-adminuser.yaml define roleRef.

e

O arquivo yaml que você está aplicando posteriormente possui roleRef no mesmo espaço para nome.

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
fonte
Minha versão do kubernetes é a 1.16.2, para que eu possa usar rbac.authorization.k8s.io/v1. Eu também verifiquei o kubectl api-versionsque me mostrou os dois rbac.authorization.k8s.io/v1e rbac.authorization.k8s.io/v1beta1, portanto, não é o caso.
Skyblade
Após a sua edição, encontrei o leia-me do projeto do painel com as instruções de implantação: github.com/kubernetes/dashboard . Eles são um pouco diferentes dos documentos oficiais do kubernetes.io. Consegui iniciar o processo de interface do usuário da Web sem erros, embora tenha outro problema que me impede de fazer login nele. Então, eu aceito sua resposta como correta. Obrigado!
Skyblade 5/12/19
10

O erro "não pode alterar roleRef" estava se referindo ao fato de que o ClusterRoleBinding já existia.

Tente excluir o painel de kubernetes ClusterRoleBinding existente

Execute abaixo para excluir os existentes:

kubectl delete clusterrolebinding kubernetes-dashboard

Depois disso, tente instalar novamente. Informe-nos se isso resolver o problema.

Umesh Kumhar
fonte
3
Corri esse comando kubectl delete clusterrolebinding kubernetes-dashboard, em seguida, kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yamle ainda obter o mesmo erro.
Skyblade
1
Esta foi a solução para mim!
21419 Jean-Paul
Eu ainda recebo esse erro. Eu uso este manifesto: raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc2/aio/…
Mohammad Alavi
1

Também estou recebendo esse erro, resolvido executando o painel pelo minikube:

minikube dashboard

Resultado:

🤔  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
fonte
Sim, funciona, mas meu objetivo era configurá-lo manualmente usando o guia, sem depender da implementação do minikube.
Skyblade 14/01
0

Apenas reproduzido.

1) espaço para nome criado, ServiceAccount e 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) aplique

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

3) Instale o painel

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

Corre:

kubectl delete clusterrolebinding kubernetes-dashboard

... APÓS o comando apply -f, não antes.

user13047220
fonte