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ć:
- Biorę na przykład rachunek serwisowy
kube-system:default
(uwaga: ten NIE jest przypisanycluster-admin
w tym momencie - Dostaję jego token i loguję się za jego pomocą
- Pulpit nawigacyjny oczywiście pokazuje mi „zabronione wyskakujące okienka”
- Gdy jestem jeszcze zalogowany, biegnę
kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=kube-system:default
- 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?
źródło
Odpowiedzi:
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.
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ń
źródło
W porządku, wydaje się, że jest to błąd, który został wydany w numerze repozytorium Kubespray Github # 5347
źródło