Kubernetes Dashboard インストール & Unknown error (200): Http failure during parsing for https://xxxx.xx/api/v1/csrftoken/login エラーの原因

Jul 28, 2024, 10:06 PM

helm で Kubernetes Dashboard をインストールしたときに、
Unknown error (200): Http failure during parsing for https://xxxx.xx/api/v1/csrftoken/login
というエラーにかなり悩まされたので、インストールの手順とエラーの原因についてまとめていきます。

Kubernetes Dashboard のインストール

基本的な流れは
https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
です。

リポジトリを追加

# helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

インストール

# helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

admin-user 作成

# nano admin-user.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard

# kubectl apply -f admin-user.yaml


Kubernetes Dashboard にアクセスする (port-forward)

# kubectl port-forward -n kubernetes-dashboard svc/kubernetes-dashboard-kong-proxy --address 0.0.0.0 8443:443
上記を実行後、
https://{masterノードのID}:8443
にアクセスします。


このような画面が表示されます。

トークンの取得

マスターノードで
# kubectl -n kubernetes-dashboard create token admin-user

eyJhbGciOiJSUzI1NiIsImtpZCI6InZzWTBnQVpqUERVZUJ5ZTQ5TEUycDlfbkI5YnN0...
とトークンが表示されますので、コピーしてログインします。

この手順では、
Unknown error (200): Http failure during parsing for https://xxxx.xx/api/v1/csrftoken/login
エラーは発生しません

Kubernetes Dashboard にアクセスする (Service 経由)

さて、ここがエラー発生ポイントです。
# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard-api ClusterIP 11.1.83.7 <none> 8000/TCP 136m
kubernetes-dashboard-auth ClusterIP 11.1.173.182 <none> 8000/TCP 136m
kubernetes-dashboard-kong-manager NodePort 11.1.77.59 <none> 8002:30230/TCP,8445:32605/TCP 136m
kubernetes-dashboard-kong-proxy ClusterIP 11.1.152.238 <none> 443/TCP 136m
kubernetes-dashboard-metrics-scraper ClusterIP 11.1.154.41 <none> 8000/TCP 136m
kubernetes-dashboard-web ClusterIP 11.1.168.94 <none> 8000/TCP 136m
古いバージョンの Kubernetes Dashboard を使ったことがある方は、kubernetes-dashboard-web にアクセスしたくなります。
これが、
Unknown error (200): Http failure during parsing for https://xxxx.xx/api/v1/csrftoken/login
このエラーの原因です。
最新の Kubernetes Dashboard では、kong が採用されており、結論、kubernetes-dashboard-kong-proxy にアクセスする必要があります。

# kubectl get svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard -o yaml > dashboard-svc.yaml
# nano dashboard-svc.yaml

  type: ClusterIP
status:
loadBalancer: {}
  type: LoadBalancer
status:
loadBalancer: {}

# kubectl apply -f dashboard-svc.yaml



Cloudflare Tunnels で、外からアクセスできるようにする


HTTPS を選択

URLに
kubernetes-dashboard-kong-proxy.kubernetes-dashboard.svc.cluster.local
と入力

TLSを展開して No TLS VerifyOn にして保存

ブラウザでアクセスすると

DashBoard にアクセスできます🍻

ロングタームトークンの生成&取得

上述のトークン取得方法で取得できるトークンは、具体的な期間はわかりませんが、利用できる期限が設定されています。
安全ではあるのですが、毎回発行するのが面倒です。なので、長期(おそらく無制限)のトークンを生成します。
詳細は
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
の「Getting a long-lived Bearer Token for ServiceAccount」にかかれています。

# nano dashboard-admin-user.yaml

apiVersion: v1
kind: Secret
metadata:
name: admin-user
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token

# kubectl apply -f dashboard-admin-user.yaml

# kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d

eyJhbGciOiJSUzI1NiIsImtpZCI6InZzWTBnQVpqUERVZUJ5ZTQ5TEUycDlfbkI5YnN0Q...
↑をブラウザに保存するなりしてください。私は、1Password に保存しています
GlusterFSで構築したファイルシステムを2つのNFSサーバーで公開し、Keepalivedを使用してフェイルオーバー機能を実装する方法
ベクトルデータベース Weaviate (GPU使用) を Jetson Orin Nano NX 16G で動かす (v1.26.1)