helm で Kubernetes Dashboard をインストールしたときに、
Unknown error (200): Http failure during parsing for https://xxxx.xx/api/v1/csrftoken/login
というエラーにかなり悩まされたので、インストールの手順とエラーの原因についてまとめていきます。
Kubernetes 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 作成
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 Verify
を On
にして保存
ブラウザでアクセスすると
DashBoard にアクセスできます🍻
ロングタームトークンの生成&取得
上述のトークン取得方法で取得できるトークンは、具体的な期間はわかりませんが、利用できる期限が設定されています。
安全ではあるのですが、毎回発行するのが面倒です。なので、長期(おそらく無制限)のトークンを生成します。
詳細は
の「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
に保存しています