< 一覧に戻る

Kubernetes ダッシュボードとは?使い方を解説

Kubernetes ダッシュボードは、管理者が基本的な操作タスクを実行し、クラスターイベントを確認できる Web ベースの UI です。ダッシュボードは、クラスターの表示と監視、マニフェストの送信、ログの検査、システム情報の取得のためのクイックツールとして使用できます。

Published Date: Jan 15, 2023
この記事の内容
This is the block containing the component that will be injected inside the Rich Text. You can hide this block if you want.
Hassaan qaiser bKfkhVRAJTQ unsplash

Kubernetes におけるダッシュボードは、クラスターにデプロイできる汎用Webアプリケーションです。フロントエンドとバックエンドの2つの主要コンポーネントで構成されています。クラスターのWebビューとしても機能し、簡単な管理タスクにも使用可能です。

この記事では、Kubernetes ダッシュボードについて深く掘り下げ、インストール方法、クラスターの内部と外部からアクセスする方法、リモートで管理する方法について説明します。

なお、この記事で紹介する方法を実行するには、Kubernetes クラスターにアクセスできる環境の用意が前提となります。たとえば、Kindを使用すると、テスト目的でローカル Kubernetes クラスターを作成可能です。指示に従って、サンプルクラスターをインストールしてデプロイしましょう。または、Digital Ocean や GCloud などのマネージドサービスを使って、実際の例をシミュレートすることもできます。

関 連 記 事

Kubernetesとは?Kubernetesセキュリティ
の基礎
Kubernetesアーキテクチャの
設計方法
AWSのEKS
(Elastic Kubernetes Service)
Kubernetesの
クラスターとは?
Kubernetes のノードとは?KubernetesのPodとは?KubernetesのHelmとは?クラウドセキュリティと
ランタイムインサイト

Kubernetes ダッシュボードとは

Kubernetes ダッシュボードとは、管理者が基本的な操作タスクを実行し、クラスターイベントを確認できるWebベースのUIです。公式のKubernetesチームによって管理されています。

ダッシュボードは、Kubernetesのクイックツールとして、クラスターの表示と監視、マニフェストの送信、ログの検査、システム情報の取得に利用可能。クラスターで実行中のアプリケーションの概要を把握したり、コンテナ化したアプリケーションのトラブルシューティングをおこなったりなど、幅広く活用することができます。

Kubernetes ダッシュボードのデプロイ方法

Kubernetesダッシュボードをデプロイするには、公式マニフェストを適用する方法があります。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml


namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

Helm を使う場合は、Kubernetesダッシュボードの Helm チャートも活用できます。

インストールすると、kubernetes-dashboard ネームスペースの下にいくつかのリソース、シークレット、サービスアカウントが作成されます。次のコマンドで、作成されたすべてのリソースを検査可能です。

$ kubectl get all -n kubernetes-dashboard

NAME READY STATUS RESTARTS AGE
pod/dashboard-metrics-scraper-c45b7869d-9kbcs 1/1 Running 0 4m5s
pod/kubernetes-dashboard-764b4dd7-4qhx5 1/1 Running 0 4m5s

Kubernetes ダッシュボードへのアクセス方法

次に、クラスターにローカルでアクセスする方法について見てみましょう。ダッシュボードは次の場所にあります:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy

これは、Kubernetes でプロキシ経由でサービスにアクセスするための標準的な規則に従います。

この URL にアクセスするには、リバースプロキシとして機能できるモードで kubectl ツールを実行する必要があります。これは、ローカルマシンからクラスターの内部サービスに安全にアクセスできるように設計された Kubernetes の機能です。

$ kubectl proxy &

プロキシ経由でサービスに接続する場合、HTTP 接続のみが許可されます。localhost と 127.0.0.1 以外のドメインからサインインすることはできません。

次に、URL に移動しましょう。

ログインするための認証方法を選択するよう求められます。シークレットトークンまたは kubeconfig のいずれかを使用可能です。

図 1. Kubernetes ダッシュボードのログイン

認証とトークンの仕組み

Kubernetesダッシュボードにおける、認証とトークンの仕組みを説明します。

通常のユーザーと、Kubernetes によって管理されるサービスアカウントの 2 種類のユーザーがリソースにアクセスできます。

通常のユーザーは、管理アクセス資格情報を持つ定義済みのユーザーです。このユーザーは API 経由で追加できないため、このカテゴリは、外部の独立したサービスによって管理されているユーザー用に予約されています。たとえば、LDAP を使用して通常のユーザーをプロビジョニングできます。

これに対し、サービスアカウントは、Kubernetes が管理および制御するユーザーです。リクエストを確認するには、新しいサービスアカウントの作成時にプロビジョニングされる署名付きトークンを使用できます。

名前と(オプションで)秘密キーを指定して、新しいサービスアカウントを作成可能です。Kubernetes では、そのサービスアカウントのシークレットに署名して保存でき、ログインする際に必要となります。

ダッシュボードのログイン方法

ダッシュボードにログインするには、まず管理ユーザーサービスアカウントを作成し、次に ServiceAccount トークン値を照会します。

$ cat sa-admin-user.yml
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 sa-admin-user.yml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

$ kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/kubernetes-dashboard -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

ダッシュボードにアクセスするには、トークンをコピーして貼り付けます。

図2. Kubernetes ダッシュボード

ダッシュボードにアクセスできたら、色々と操作してみましょう。各種機能を覚えるには実際に使ってみるのが近道です。

代替のアクセス方法

代替方法として、ポートフォワーディングを使うことでも、ダッシュボードにアクセスできます。これにより、デフォルトで HTTPS 接続のみが許可される形です。ダッシュボードマニフェストは、ポート 8443 を公開するサービスを使用するため、そのマッピングを使う必要があります。

$ kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443

Forwarding from 127.0.0.1:8080 -> 8443
Forwarding from [::1]:8080 -> 8443

チェーン内の証明書が信頼されていないため、Chrome では https://localhost:8080/ へのアクセスが許可されないことに注意してください。ダッシュボードのデフォルトの証明書をインポートしていないと、ブロックされます。Firefox では、すべての警告を受け入れると続行できます。

チェーン内の証明書が信頼されていないため、Chromeでは https://localhost:8080/ へのアクセスが許可されないことに注意しましょう。ダッシュボードのデフォルトの証明書をインポートしていないと、ブロックされます。

Firefoxでは、すべての警告を受け入れると続行できます。

認証のスキップ

特定の引数を使用してkubernetes-dashboardアプリケーションを再デプロイすることで、skip-login を有効にすることもできます。これはダッシュボードで実行できます。このネームスペースでkubernetes-dashboardデプロイを見つけ、次に示すようにリソース定義を編集します。

図3. skip-login の有効化

再デプロイしたら、ダッシュボードからログアウトし、再度ログインしてみてください。認証をスキップしてダッシュボードに直接移動するオプションが表示されるはずです。

ただし、この方法でログインすると、デフォルトのアクセス資格情報しか得られず、デフォルトでは大きく制限されます。

注意: Kubernetes の一部の以前のバージョン(1.10.1 より前)では、この方法にはセキュリティの脆弱性(CVE-2018-18264)があり、認証をスキップした後にクラスター内でシークレットを読み取ることができました。これは後のバージョンでパッチが適用されましたが、同様のイベントを早期に軽減するには、監視特権エスカレーションソリューションを導入することをお勧めします。

Kubernetes ダッシュボードでのログ確認方法

ダッシュボードページには、ログを監視・確認するためのオプションがいくつかあります。その方法を解説しましょう。
対応するアイコン(上部のサイドバー)をクリックすると、関連するリソース(Pod、ジョブ、ステートフルセットなど)を選択できます。

図4. ログのチェック

クラスターの見出しの下にあるイベントも確認可能です。

図5. イベントの確認

kubectl ツールでは、両方のタイプの情報を返すこともできますが、UI には、読みやすい形式で表示されることにも注意しましょう。

Kubernetes ダッシュボードの公開

ダッシュボードを公開するには、アクセス許可に関する設定をおこなわなくてはなりません。

現在の例では、ダッシュボードにローカルでのみアクセスできます。外部 IP からダッシュボードへのアクセスを許可するには、いくつかの方法があります。

たとえば、kube API のノードを公開すると、次の URL を使用してダッシュボードにアクセスできます。

https://<master-ip>:<apiserver-port>/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

サービス定義またはイングレスコントローラを使用してダッシュボードを公開することもできます。

ダッシュボードの既存のサービスにパッチを適用して、ノードポートを公開できます。

$ kubectl --namespace kubernetes-dashboard patch svc kubernetes-dashboard -p '{"spec": {"type": "NodePort"}}'

$ kubectl get svc -n kubernetes-dashboard kubernetes-dashboard -o jsonpath="{.spec.ports[0].nodePort}"
32418%

これにより、https://NODE_HOST:NODE_PORT を使用してダッシュボードにアクセスできます。ただし、安全性を確保するには、通常はダッシュボードを公開せずに、プロキシ経由でアクセスしてください。

まとめ

Kubernetesダッシュボードは、クラスターの状態をすばやく監視し、マニフェストを適用するために優れたツールです。

デプロイとアクセスは比較的簡単で、数分でプロのように小規模のクラスターのデプロイ管理を開始できます。Kubernetesを使いこなすなら、まずダッシュボードを実際に使って操作を覚えていきましょう。

FAQs

No items found.

セキュリティ専門家とともに、
クラウドを防御する正しい方法を試してみよう