Kubernetesダッシュボード-ログイン後の不明なサーバーエラー


9

私はKubespray経由でKubernetesを正常にデプロイしましたが、すべてが正常に動作しているようです。kubectlを介してクラスターにアクセスし、ノード、ポッド、サービス、シークレットなどを一覧表示できます。新しいリソースを適用することも可能で、ダッシュボードエンドポイントはダッシュボードログインページを取得します。

さまざまなサービスアカウント(デフォルト、kubernetes-dashboard、kubernetes-admin、...)のトークンを使用してログインしました...ログインするたびに、たとえば、kubesprayダッシュボード警告禁止ポップアップで説明されているのと同じポップアップが表示されます。

そのため、説明したようにデフォルトのサービスアカウントにclusterrolebindingを適用しました。デフォルトのアカウントトークンでログインすると、

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」サービスアカウントのトークンが返されます。「--all-namespaces」を追加した場合でも、Kubesprayはcluster-adminサービスアカウントをプロビジョニングしなかったようです。一般的に言えば、トークンを使用して、そのトークンにバインドされている特定のサービスアカウントとして認証されることを知っています。残念ながら、私はclusterrolebindingを定義した場合でも、私のサービスアカウントの作業を取得していない
ユルゲン・Zornigに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.