Painel Kubernetes - Erro desconhecido do servidor após o login


9

Implantei com sucesso o Kubernetes via Kubespray e tudo parece funcionar bem. Eu posso acessar o cluster via kubectl e listar nós, pods, serviços, segredos e assim por diante. Também é possível aplicar novos recursos e o ponto final do painel me fornece a página de login do painel.

Eu entrei com tokens de contas de serviço diferentes (padrão, kubernetes-dashboard, kubernetes-admin, ...) ... a cada login, recebo os mesmos pop-ups descritos no painel do kubespray, alertando pop - ups proibidos, por exemplo.

Por isso, apliquei a associação de rolos para a conta de serviço padrão, conforme descrito. Quando faço login agora com o token da conta padrão, recebo apenas uma

Unknown Server Error (404)
the server could not find the requested resource
Redirecting to previous state in 3 seconds...

caixa que me redireciona para a página de login depois. É o mesmo comportamento se eu conectar ao Dashboard viakubectl proxy . O acesso é HTTPS sobre um IP de cluster público e também HTTP sobre proxy

Estou usando o Kubernetes 1.16.2 e o Kubespray master mais recente, commit 18d19d9e

EDIT: destruí e reprovisionei o cluster para obter uma nova instância provisionada pelo Kubespray para tornar todas as etapas determinísticas, adicionando mais informações ...

kubectl -n kube-system logs --follow kubernetes-dashboard-556b9ff8f8-jbmgg -- durante uma tentativa de login me dá

2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/csrftoken/login request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 POST /api/v1/login request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/login/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/csrftoken/token request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 POST /api/v1/token/refresh request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/login/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/csrftoken/token request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 POST /api/v1/token/refresh request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/overview/default?filterBy=&itemsPerPage=10&name=&page=1&sortBy=d,creationTimestamp request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 Getting config category
2019/12/16 12:35:03 Getting discovery and load balancing category
2019/12/16 12:35:03 Getting lists of all workloads
2019/12/16 12:35:03 the server could not find the requested resource
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 404 status code
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 Getting pod metrics
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Incoming HTTP/2.0 GET /api/v1/systembanner request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Incoming HTTP/2.0 GET /api/v1/login/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Incoming HTTP/2.0 GET /api/v1/rbac/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:12 Metric client health check failed: the server could not find the requested resource (get services heapster). Retrying in 30 seconds.
2019/12/16 12:35:42 Metric client health check failed: the server could not find the requested resource (get services heapster). Retrying in 30 seconds.

Eu encontrei uma solução alternativa estranha para fazer o painel funcionar , mas isso não é útil para nós na produção, talvez alguém possa explicar isso:

  1. Tomo, por exemplo, a conta de serviço kube-system:default(Nota: este NÃO está atribuído cluster-adminneste momento
  2. Eu recebo seu token e logon com isso
  3. O painel obviamente mostra os "pop-ups proibidos"
  4. Enquanto ainda estiver logado, corro kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=kube-system:default
  5. Eu atualizo a guia do navegador que mantém minha sessão no painel ... e pronto, tudo aparece corretamente.

Portanto, não consigo fazer logout e logon novamente, sempre tenho que excluir a associação de rolos do cluster, fazer login e depois aplicar a associação de rolos do cluster novamente.

Isso parece estar fortemente relacionado aos clusters provisionados pelo kubespray, para que alguém possa reproduzir isso com o kubespray?


Você pode compartilhar os logs do pod do painel do Kubernetes e qual token da conta de serviço que você está usando para fazer login?
Umesh Kumhar

compartilhar os yamls de implantação e os passos que você já tentou
P Ekambaram

Respostas:


7

Se você estiver usando um certificado para conectar-se, o certificado deve estar no sistema: grupo de mestres Portanto, inclua o "Assunto: O = sistema: mestres, CN ="

Você também pode criar um token e, em seguida, usar o token em vez do certificado:

Pode haver uma possibilidade de que sua função de cluster esteja vinculada a "Conta de Serviço", mas não ao seu grupo. Você deve verificar seu grupo no arquivo yaml. Sua conta de serviço possui um token de acesso, use-o para autenticar em vez do seu certificado.

Use isso para criar um token e usá-lo.

kubectl describe secret $(kubectl get secret | grep cluster-admin | awk '{print $1}')

símbolo:

Atualize o kubeconfig para se autenticar usando esse token, em vez do certificado que você está usando no momento, e você deve ser autenticado com êxito como essa conta de serviço de administrador de cluster.

Kubernetes RBAC - tentativa proibida de conceder privilégios extras


Isso me retorna o token da conta de serviço "padrão" no espaço de nome "padrão", pois nenhum "administrador de cluster" está definido. Mesmo quando adiciono "--all-namespaces", ao que parece, o Kubespray não provisionou uma conta de serviço de administrador de cluster. De um modo geral: conheço o uso de tokens para autenticar como uma conta de serviço específica que está vinculada a esse token. Infelizmente, minha conta de serviço não funciona, mesmo se eu definir a vinculação de cluster
Jürgen Zornig

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.