Pulpit nawigacyjny Kubernetes - Nieznany błąd serwera po zalogowaniu

9

Udało mi się wdrożyć Kubernetes za pośrednictwem Kubespray i wszystko wydaje się działać dobrze. Jestem w stanie uzyskać dostęp do klastra za pośrednictwem kubectl i wyświetlić listę węzłów, zasobników, usług, tajemnic i tak dalej. Możliwe jest również zastosowanie nowych zasobów, a punkt końcowy pulpitu nawigacyjnego daje mi stronę logowania do pulpitu nawigacyjnego.

Logowałem się przy użyciu tokenów różnych kont serwisowych (domyślnie, kubernetes-dashboard, kubernetes-admin, ...) ... przy każdym logowaniu otrzymuję takie same wyskakujące okienka, jak opisano na przykład w ostrzeżeniu o zakazie wyskakujących okienek na pulpicie kubespray .

Zastosowałem więc klastrowanie do domyślnego konta usługi zgodnie z opisem. Kiedy loguję się teraz przy użyciu domyślnego tokena konta, dostaję tylko

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

pole, które następnie przekierowuje mnie na stronę logowania. To samo zachowanie, jeśli połączę się z Dashboard poprzez kubectl proxy. Dostęp jest HTTPS przez publiczny adres IP klastra, a także HTTP przez proxy

Używam Kubernetes 1.16.2 i najnowszego głównego zatwierdzenia Kubespray 18d19d9e

EDYCJA: Zniszczyłem i ponownie uruchomiłem klaster, aby uzyskać nową instancję z obsługą Kubespray, aby wszystkie kroki były deterministyczne, dodając więcej informacji ...

kubectl -n kube-system logs --follow kubernetes-dashboard-556b9ff8f8-jbmgg -- podczas próby logowania daje mi

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.

Znalazłem dziwne obejście, aby uruchomić pulpit nawigacyjny , ale nie jest to przydatne dla nas w produkcji, być może ktoś może to wyjaśnić:

  1. Biorę na przykład rachunek serwisowy kube-system:default(uwaga: ten NIE jest przypisany cluster-adminw tym momencie
  2. Dostaję jego token i loguję się za jego pomocą
  3. Pulpit nawigacyjny oczywiście pokazuje mi „zabronione wyskakujące okienka”
  4. Gdy jestem jeszcze zalogowany, biegnę kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=kube-system:default
  5. Odświeżam kartę przeglądarki, która przechowuje moją sesję pulpitu nawigacyjnego ... i voila, wszystko pokazuje się poprawnie.

Dlatego nie jestem w stanie się wylogować i zalogować ponownie, zawsze muszę usunąć wiązanie klastrów, zalogować się, a następnie ponownie zastosować wiązanie klastrów.

Wydaje się, że jest to silnie powiązane z klastrami wyposażonymi w kubespray, więc czy ktoś jest w stanie to odtworzyć za pomocą kubespray?

Jürgen Zornig
źródło
Czy możesz udostępnić dzienniki pulpitu nawigacyjnego Kubernetes i tokena konta usługi, którego używasz do logowania?
Umesh Kumhar,
udostępnić yaml wdrażania i kroki, które próbowałeś
P Ekambaram

Odpowiedzi:

7

Jeśli używasz certyfikatu do połączenia, certyfikat powinien znajdować się w systemie: grupa mistrzów Więc dołącz „Temat: O = system: mistrzowie, CN =”

Możesz także utworzyć Token, a następnie użyć tokena zamiast certyfikatu:

Może istnieć możliwość, że rola klastra jest powiązana z „kontem usługi”, ale nie z grupą. Powinieneś sprawdzić grupę w pliku yaml. Twoje konto usługi ma token dostępu, użyj go do uwierzytelnienia zamiast certyfikatu.

Użyj tego, aby utworzyć token i użyj go.

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

znak:

Zaktualizuj kubeconfig, aby uwierzytelnić się przy użyciu tego tokena, zamiast certyfikatu, którego obecnie używasz, i powinieneś zostać pomyślnie uwierzytelniony jako konto usługi administratora klastra.

Kubernetes RBAC - zabroniona próba przyznania dodatkowych uprawnień

redhatvicky
źródło
Zwraca mi to token „domyślnego” konta usługi w „domyślnej” przestrzeni nazw, ponieważ nie zdefiniowano żadnego „administratora-klastra”. Nawet gdy dodam „--all-namespaces”, wydaje się, że Kubespray nie zapewnił konta usługi klastra-administratora Ogólnie mówiąc: Jestem świadomy użycia tokenów do uwierzytelnienia jako określonego konta usługi powiązanego z tym tokenem. Niestety nie mogę uruchomić mojego konta usługi, nawet jeśli zdefiniuję wiązanie klastra
Jürgen Zornig
5

W porządku, wydaje się, że jest to błąd, który został wydany w numerze repozytorium Kubespray Github # 5347

Jürgen Zornig
źródło