Kubernetes 대시 보드-로그인 후 알 수없는 서버 오류


9

Kubespray를 통해 Kubernetes를 성공적으로 배포했으며 모든 것이 잘 작동하는 것 같습니다. kubectl을 통해 클러스터에 액세스하고 노드, 포드, 서비스, 비밀 등을 나열 할 수 있습니다. 또한 새로운 리소스를 적용 할 수 있으며 대시 보드 엔드 포인트가 대시 보드 로그인 페이지를 제공합니다.

다른 서비스 계정 (기본, kubernetes-dashboard, kubernetes-admin 등)의 토큰으로 로그인했습니다 ... 예를 들어 모든 로그인마다 kubespray 대시 보드 경고 금지 팝업 에 설명 된 것과 동일한 팝업이 표시됩니다 .

따라서 설명대로 기본 서비스 계정에 대한 클러스터 역할 바인딩을 적용했습니다. 기본 계정 토큰으로 지금 로그인하면

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

나중에 로그인 페이지로 리디렉션됩니다. 를 통해 대시 보드에 연결하면 동일한 동작 kubectl proxy입니다. 액세스는 퍼블릭 클러스터 IP를 통한 HTTPS 및 프록시를 통한 HTTP입니다

Kubernetes 1.16.2 및 최신 Kubespray 마스터 커밋 18d19d9e를 사용하고 있습니다.

편집 : 클러스터를 파괴하고 다시 프로비저닝하여 새로운 Kubespray 프로비저닝 인스턴스를 확보하여 모든 단계를 결정 론적으로 만들고 추가 정보를 추가했습니다.

kubectl -n kube-system logs --follow kubernetes-dashboard-556b9ff8f8-jbmgg -- 로그인 시도 중 나에게

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.

대시 보드가 작동하는 이상한 해결 방법을 찾았 지만 프로덕션에서는 사용할 수 없으며 누군가가 이것을 설명 할 수 있습니다.

  1. 서비스 계정을 예로 들어 보겠습니다 kube-system:default(참고 : cluster-admin이 시점에는이 계정이 할당되지 않았습니다)
  2. 나는 그것의 토큰을 얻고 그것에 로그인
  3. 대시 보드에는 "금지 된 팝업"이 표시됩니다.
  4. 여전히 로그인 한 상태에서 kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=kube-system:default
  5. 대시 보드 세션을 유지하는 브라우저 탭을 새로 고칩니다. 전체가 제대로 표시됩니다.

따라서 로그 아웃하고 다시 로그인 할 수 없으므로 항상 clusterrolebinding을 삭제하고 로그인 한 다음 clusterrolebinding을 다시 적용해야합니다.

이것은 kubespray 프로비저닝 클러스터와 밀접한 관련이있는 것으로 보이므로 kubespray로이를 재현 할 수있는 사람이 있습니까?


Kubernetes 대시 보드 포드의 로그와 로그인에 사용중인 서비스 계정 토큰을 공유 할 수 있습니까?
Umesh Kumhar

배포 yaml과 시도한 단계를 공유하십시오
P Ekambaram

답변:


7

인증서를 사용하여 연결하려면 인증서가 system : masters 그룹에 있어야합니다. "Subject : O = system : masters, CN ="

토큰을 만든 다음 인증서 대신 토큰을 사용할 수도 있습니다.

클러스터 역할이 그룹이 아닌 "서비스 계정"에 바인딩되어있을 수 있습니다. yaml 파일에서 그룹을 확인해야합니다. 서비스 계정에 액세스 토큰이 있으므로이 인증서를 사용하여 인증서 대신 인증하십시오.

이것을 사용하여 토큰을 생성하고 사용하십시오.

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

토큰:

현재 사용중인 인증서 대신 해당 토큰을 사용하여 자신을 인증하도록 kubeconfig를 업데이트하면 해당 클러스터 관리자 서비스 계정으로 성공적으로 인증되어야합니다.

Kubernetes RBAC-추가 권한 부여 시도 금지


"cluster-admin"이 정의되어 있지 않으므로 "default"네임 스페이스에서 "default"serviceaccount의 토큰을 반환합니다. "-모든 네임 스페이스"를 추가하더라도 Kubespray는 클러스터 관리자 서비스 계정을 프로비저닝하지 않은 것 같습니다. 일반적으로 말하자면 : 토큰을 사용하여 해당 토큰에 바인딩 된 특정 서비스 계정으로 인증하는 것을 알고 있습니다. 불행하게도, 난 내가 clusterrolebinding를 정의하는 경우에도, 내 서비스 계정 작업을하지 않습니다
위르겐 Zornig에게

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.