Kubernetes Dashboard完全ガイド:導入から便利機能までを解説

Kubernetes Dashboard完全ガイド:導入から便利機能までを解説

Kubernetesは、コンテナ化されたワークロードとサービスを宣言的構成と自動化によって管理するための、ポータブルで拡張可能なオープンソースプラットフォームです。大規模なアプリケーションを効率的に運用するためには不可欠なツールとなっています。しかし、Kubernetesの操作は基本的にコマンドラインツール(kubectl)を通じて行われるため、クラスターの状態を視覚的に把握したり、簡単な操作を行ったりする際には、少し敷居が高いと感じるかもしれません。

そこで登場するのが「Kubernetes Dashboard」です。これはKubernetesクラスターのための汎用WebベースUIであり、クラスターのリソース(アプリケーション、サービスのデプロイ状況、リソースの使用状況など)を視覚的に確認したり、簡単な管理操作(アプリケーションのデプロイ、Podの再起動、スケーリングなど)を行ったりすることを可能にします。

本記事では、Kubernetes Dashboardの導入方法から、安全なアクセス設定、主要な機能の使い方、そして便利な機能やセキュリティ上の考慮事項、トラブルシューティングまでを、約5000語のボリュームで詳細に解説します。Kubernetes初心者の方から、より効率的にクラスターを管理したい方まで、幅広い読者の方々がKubernetes Dashboardを最大限に活用できるようになることを目指します。

1. はじめに:Kubernetes Dashboardとは何か? なぜ使うのか?

Kubernetes Dashboardは、Kubernetesクラスターのリソースを管理・監視するための公式Webユーザーインターフェースです。CLIツールであるkubectlが強力なコマンドライン操作を提供する一方で、Dashboardは直感的で視覚的な操作を提供します。

Kubernetes Dashboardの主な役割:

  • クラスター状態の可視化: デプロイされているアプリケーション、稼働中のPod、サービスの公開状況、リソース(CPU, メモリ)の使用状況などを一目で確認できます。
  • リソースの管理: YAMLファイルやフォーム入力を使ってアプリケーションをデプロイしたり、既存のPodを再起動したり、Deploymentのレプリカ数を変更したりといった基本的な管理操作をGUIから実行できます。
  • 問題の診断: Podのログを確認したり、イベント情報を参照したりすることで、アプリケーションやクラスターに発生した問題の原因を特定する手助けとなります。

Dashboardを使うことのメリット:

  • 直感的な操作性: CLIに慣れていないユーザーでも、クラスターの状態を容易に把握し、基本的な操作を行うことができます。
  • 迅速な状況把握: クラスター全体の健全性やリソースの使用状況をダッシュボード形式で素早く確認できます。
  • 学習コストの低減: Kubernetesの学習初期段階において、各リソースの関係性や状態変化を視覚的に理解するのに役立ちます。

Dashboardを使うことのデメリット:

  • 機能の限定性: kubectlが提供する全ての高度な機能や詳細な設定オプションを網羅しているわけではありません。より複雑な操作や自動化にはkubectlやAPIの直接利用が必要です。
  • セキュリティリスク: 不適切な設定で使用すると、クラスター全体への不正アクセスを許してしまう可能性があります。特にインターネットに公開する場合は、厳重なセキュリティ対策が必須です。
  • パフォーマンス: 大規模なクラスターで多くのリソースを表示しようとすると、UIの応答性が低下することがあります。

Kubernetes Dashboardは、kubectlの代替というよりは、補完ツールとして位置づけるのが適切でしょう。日常的な監視や簡単な操作にはDashboardを使い、複雑な設定や高度なトラブルシューティングにはkubectlを使う、といった使い分けが効果的です。

2. Kubernetes Dashboardの概要

Kubernetes Dashboardは、Kubernetes APIと連携して動作するWebアプリケーションです。通常、Kubernetesクラスター内のPodとしてデプロイされ、Kubernetes APIサーバーを経由してクラスターの状態を取得したり、操作要求を送ったりします。

提供される機能の例:

  • 概要: クラスター全体のCPU/メモリ使用率、ノード数、Pod数、Namespace数などを表示。
  • ワークロード: Deployment, StatefulSet, DaemonSet, Podなどの一覧、詳細表示。各リソースのステータス(実行中、保留中、失敗など)、レプリカ数、関連するPod、イベント、ログなどを確認できます。スケーリング、ロールアウト、削除などの操作も可能です。
  • ServiceとDiscovery: Service (ClusterIP, NodePort, LoadBalancer, ExternalName), Ingressの一覧、詳細表示。エンドポイントやIngressルールなどを確認できます。
  • ストレージ: PersistentVolume (PV), PersistentVolumeClaim (PVC), StorageClassの一覧、詳細表示。ストレージの確保状況などを確認できます。
  • 設定: ConfigMap, Secretの一覧、詳細表示。Secretの値はデフォルトでは表示されませんが、設定によっては表示可能です(セキュリティリスクを伴います)。
  • RBAC: ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBindingの一覧、詳細表示。どのユーザー/サービスアカウントがどのリソースにどのような権限を持っているかを確認できます。
  • クラスター: Nodes, Namespacesの一覧、詳細表示。ノードのリソース使用状況、Pod配置状況、Namespaceの切り替えなどを実行できます。
  • リソース作成: YAMLファイルアップロードまたはフォーム入力による各種Kubernetesリソース(Deployment, Service, ConfigMapなど)の作成。

これらの機能により、クラスターの現状を把握し、日常的な管理タスクをGUIから効率的に実行できるようになります。

3. 導入準備

Kubernetes Dashboardを導入するには、いくつかの前提条件があります。

前提条件:

  • 動作するKubernetesクラスター: GKE, EKS, AKSなどのマネージドサービス、またはkubeadmなどで構築されたセルフホスト型のクラスターが必要です。
  • kubectlコマンド: クラスターと通信するためのkubectlコマンドラインツールが、Dashboardをデプロイするマシンにインストールされ、クラスターに接続可能な状態である必要があります。
  • ネットワーク接続: DashboardのPodがKubernetes APIサーバーと通信できる必要があります。通常、クラスター内部のネットワーク設定で問題ありません。また、Dashboardにアクセスするクライアントマシンから、Dashboardサービスが公開されるIPアドレスやポートに接続できる必要があります。

導入方法の選択肢:

Kubernetes Dashboardの導入方法はいくつかありますが、最も一般的で推奨されるのは、公式が提供するYAMLマニフェストファイルをkubectl applyコマンドで適用する方法です。その他の方法としては、Helmパッケージマネージャーを使用する方法などがありますが、本記事では公式マニフェストによる標準的な導入方法を中心に解説します。

4. Kubernetes Dashboardの導入手順

公式マニフェストファイルを使用する方法は非常に簡単です。以下の手順で行います。

ステップ 1: Dashboardマニフェストファイルのダウンロード(または直接適用)

Kubernetes Dashboardの公式GitHubリポジトリに、導入用のYAMLファイルが公開されています。最新版を使用するのが推奨されます。

“`bash

ファイルをダウンロードする場合

例: v2.7.0 の場合

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

もしくは、直接適用する場合 (推奨)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
“`

執筆時点での最新バージョン(v2.7.0)のURLを使用していますが、導入時にはKubernetes Dashboard公式リポジトリのreleasesページで最新の安定版を確認してください。通常、aio/deploy/recommended.yamlが推奨されるオールインワンのマニフェストファイルです。

このコマンドを実行すると、kubernetes-dashboardというNamespaceが作成され、その中にDashboardのDeployment、Service、Role、RoleBinding、ServiceAccount、Secretなどのリソースがまとめて作成されます。

ステップ 2: リソースの作成確認

kubectlコマンドを使って、Dashboard関連のリソースが正しく作成され、Podが起動しているかを確認します。Dashboardはデフォルトでkubernetes-dashboardというNamespaceにデプロイされます。

“`bash

kubernetes-dashboard Namespace内のPodを確認

kubectl get pods -n kubernetes-dashboard

出力例:

NAME READY STATUS RESTARTS AGE

dashboard-metrics-scraper-xxx-yyyy 1/1 Running 0 2m

kubernetes-dashboard-zzz-wwww 1/1 Running 0 2m

kubernetes-dashboard Namespace内のServiceを確認

kubectl get svc -n kubernetes-dashboard

出力例:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

dashboard-metrics-scraper ClusterIP 10.x.y.z 8000/TCP 2m

kubernetes-dashboard ClusterIP 10.a.b.c 443/TCP 2m

“`

STATUSRunningになっていれば、DashboardのPodは正常に起動しています。デフォルトでは、kubernetes-dashboard ServiceはClusterIPタイプとして作成されます。これは、クラスター内部からのみアクセス可能なIPアドレスを割り当てるタイプです。

5. Dashboardへのアクセス方法

DashboardのPodが起動したら、次はWebブラウザからアクセスするための方法を設定します。デフォルトのClusterIPサービスは外部から直接アクセスできないため、何らかの仕組みを使ってアクセスを可能にする必要があります。

Dashboardへのアクセス方法はいくつか選択肢があり、それぞれメリット・デメリットや推奨される用途が異なります。

方法 1: ローカルプロキシを使用する (kubectl proxy)

最も簡単で、開発や検証目的によく使われる方法です。kubectl proxyコマンドを使うと、ローカルマシンとKubernetes APIサーバーの間にプロキシを立て、特定のURLでDashboardにアクセスできるようになります。

  1. プロキシの起動: ターミナルで以下のコマンドを実行します。

    bash
    kubectl proxy

    このコマンドを実行したターミナルはそのままにしておきます。プロキシが起動し、ローカルマシンの特定のポート(デフォルトでは8001)でAPIサーバーへの接続を受け付けるようになります。

  2. Dashboardへのアクセス: Webブラウザで以下のURLにアクセスします。

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

    https:kubernetes-dashboard:の部分は、Dashboard Serviceの名前とポート名(またはポート番号)を指定しています。デフォルトのマニフェストでは、Service名はkubernetes-dashboard、HTTPSポートのポート名はhttpsです。

メリット:
* 設定が最も簡単。
* クラスター内部のServiceに安全にアクセスできる。

デメリット:
* kubectl proxyコマンドを実行しているターミナルを開きっぱなしにしておく必要がある。
* ローカルマシンからしかアクセスできない。
* HTTPS接続ではない (localhostへの接続なのでそれほど問題にならないことが多いが)。

推奨される用途: ローカルでの開発、テスト、学習目的。

方法 2: NodePortまたはLoadBalancer Serviceを使用する(非推奨)

kubernetes-dashboard ServiceのタイプをNodePortまたはLoadBalancerに変更することで、クラスター外部から直接アクセスできるようにする方法です。

  1. Service定義の編集: kubectl edit service kubernetes-dashboard -n kubernetes-dashboardコマンド、またはService定義のYAMLファイルを編集して、typeClusterIPからNodePortまたはLoadBalancerに変更します。

    “`yaml

    編集例 (NodePortに変更する場合)

    apiVersion: v1
    kind: Service
    metadata:
    labels:
    k8s-app: kubernetes-dashboard
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard
    spec:
    # ここを ClusterIP から NodePort に変更
    type: NodePort
    ports:
    – port: 443
    targetPort: 8443 # Dashboard Pod が待ち受けているポート
    nodePort: <任意のポート番号、または省略して自動割り当て> # 例: 30000-32767 の範囲
    protocol: TCP
    name: https
    selector:
    k8s-app: kubernetes-dashboard
    “`

    LoadBalancerタイプにすると、クラウドプロバイダーのロードバランサーがプロビジョニングされ、パブリックIPアドレスが割り当てられます。

  2. アクセス:

    • NodePortの場合: クラスターのノードのいずれかのパブリックIPアドレスまたはホスト名と、割り当てられたNodePort (kubectl get svc -n kubernetes-dashboardで確認できます) を使ってアクセスします。例: https://<node-ip>:<node-port>
    • LoadBalancerの場合: 割り当てられたEXTERNAL-IP (kubectl get svc -n kubernetes-dashboardで確認できます) とポート番号を使ってアクセスします。例: https://<external-ip>:443

メリット:
* kubectl proxyのようにターミナルを開きっぱなしにする必要がない。
* 外部からアクセス可能になる。

デメリット:
* セキュリティリスクが非常に高い: Dashboardを直接インターネットに公開することになり、認証を突破されるとクラスター全体が危険に晒されます。特にNodePortはクラスター内の全てのノードの指定ポートが開くため、推奨されません。
* LoadBalancerはコストがかかる場合があります。

推奨される用途: 非推奨です。特別な理由がない限り、この方法は避けるべきです。やむを得ず使用する場合は、ファイアウォール設定などでアクセス元IPを厳密に制限する必要があります。

方法 3: Ingressを使用する(推奨)

Ingressコントローラー(Nginx Ingress, Traefikなど)をクラスターに導入し、Ingressリソースを使ってDashboard Serviceを公開するのが、プロダクション環境で最も推奨される方法です。Ingressを使用することで、ドメイン名ベースのアクセス、TLS終端(HTTPS化)、パスベースルーティングなどを柔軟かつセキュアに設定できます。

  1. Ingressコントローラーの導入: まだ導入していない場合は、クラスターにIngressコントローラーを導入します。例えばNginx Ingressコントローラーは以下のコマンドで導入できます(バージョンによってURLは変わる可能性があります)。

    “`bash

    Nginx Ingress Controller の例

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
    “`

  2. Ingressリソースの作成: Dashboard Serviceへのルーティングを設定するIngressリソースを作成します。

    “`yaml

    dashboard-ingress.yaml

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: dashboard-ingress
    namespace: kubernetes-dashboard # Dashboard Service と同じ Namespace
    annotations:
    # 使用する Ingress Controller に応じたアノテーションが必要な場合があります
    # 例: Nginx Ingress Controller の場合
    # nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    # nginx.ingress.kubernetes.io/rewrite-target: /$1 # 必要に応じてパス書き換え
    spec:
    # ingressClassName: nginx # 使用する Ingress Controller のクラス名を指定 (k8s 1.18+)
    rules:
    – host: dashboard.yourdomain.com # Dashboard にアクセスするドメイン名
    http:
    paths:
    – path: / # アクセスパス
    pathType: Prefix # または ImplementationSpecific
    backend:
    service:
    name: kubernetes-dashboard # Dashboard Service の名前
    port:
    number: 443 # Dashboard Service のポート番号
    # TLS設定 (HTTPS化)
    tls:
    – hosts:
    – dashboard.yourdomain.com
    secretName: dashboard-tls-secret # TLS証明書を含む Secret の名前
    “`

    このIngress定義では、dashboard.yourdomain.comというドメインへのHTTPSアクセスを、kubernetes-dashboard Serviceのポート443にルーティングするように設定しています。dashboard-tls-secretは、事前に作成したTLS証明書(例えばLet’s Encryptなどで取得したもの)を含むKubernetes Secretです。

  3. Ingressリソースの適用: 作成したYAMLファイルを適用します。

    bash
    kubectl apply -f dashboard-ingress.yaml

  4. DNS設定: Ingressコントローラーに割り当てられた外部IPアドレス(またはホスト名)に、設定したドメイン名(例: dashboard.yourdomain.com)のDNSレコード(AレコードまたはCNAMEレコード)を設定します。

  5. アクセス: Webブラウザで設定したドメイン名(例: https://dashboard.yourdomain.com/)にアクセスします。

メリット:
* セキュアなHTTPS接続が可能。
* ドメイン名でアクセスできるため分かりやすい。
* パスベースルーティングなど、高度なルーティング設定が可能。
* 他のアプリケーションと同じIngressコントローラーで管理できる。

デメリット:
* Ingressコントローラーの導入・設定が必要。
* TLS証明書の準備が必要。

推奨される用途: プロダクション環境。セキュアなアクセスを確保したい場合。

6. 認証・認可の設定(非常に重要)

Kubernetes Dashboardは、デフォルトでは認証を要求しません。しかし、これはAPIサーバーへのアクセスを許可しているクラスター内部からのアクセスを想定しているためです。外部からアクセス可能にする場合は、必ず認証と認可を設定する必要があります。 設定しないと、誰でもDashboardを通じてクラスター内のリソースを操作できるようになり、極めて危険です。

Dashboardへのログイン方法は、主に以下の2つです。

  1. Token (トークン): サービスアカウントに紐づくトークンを使用します。
  2. KubeConfig (kubeconfig): kubectlコマンドが使用する設定ファイルを使用します。

公式の推奨設定では、Token認証を使用し、アクセス権限はRBAC (Role-Based Access Control) によって制御します。デフォルトで作成されるServiceAccountやSecretは、クラスター全体への管理者権限を持つトークンを含む可能性があるため、そのまま使用することは極めて危険です。 Dashboard専用の、最小限の権限のみを持つサービスアカウントを作成し、そのトークンを使用することが推奨されます。

以下に、Dashboard専用のサービスアカウントと、必要な権限のみを付与するRBAC設定の例を示します。

ステップ 1: Dashboard用のサービスアカウント作成

“`yaml

dashboard-adminuser.yaml (ServiceAccount)

apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user # 任意の名前
namespace: kubernetes-dashboard # Dashboard がデプロイされている Namespace
“`

この例では、kubernetes-dashboard Namespaceにadmin-userという名前のサービスアカウントを作成します。

ステップ 2: サービスアカウントに権限を付与するRoleBinding/ClusterRoleBindingの作成

サービスアカウントには、デフォルトではほとんど権限がありません。Dashboardからリソースを参照・操作できるようにするためには、適切なRole(Namespace内の権限)やClusterRole(クラスター全体の権限)を割り当てたRoleBindingまたはClusterRoleBindingを作成する必要があります。

権限に関する重要な注意点:

  • クラスター全体への読み取り専用権限: クラスター全体のDeployment, Pod, Serviceなどを参照できるようにしたいが、変更はさせたくない場合に使用します。
  • 特定のNamespaceへの管理者権限: 特定のNamespace内のリソースに対して、参照・変更・削除などの全権限を与えたい場合に使用します。
  • クラスター全体への管理者権限: クラスター全体のリソースに対して全権限を与えます。これは非常に危険であり、特別な理由がない限り絶対に使用すべきではありません。 デフォルトで付属しているkubernetes-dashboardサービスアカウントは、しばしばこの管理者権限を持つように設定されていますが、外部公開時にはそのトークンをそのまま使用しないでください。

ここでは例として、クラスター全体への読み取り専用権限を付与する設定と、クラスター全体への管理者権限(危険性を強調) を付与する設定の両方を示します。

例 1: クラスター全体への読み取り専用権限を付与

この設定では、クラスター内のほぼ全てのリソースを参照できますが、変更・削除はできません。監視目的などに適しています。

“`yaml

dashboard-readonly-clusterrolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user-readonly # 任意の名前
subjects:
– kind: ServiceAccount
name: admin-user # 作成したサービスアカウントの名前
namespace: kubernetes-dashboard # サービスアカウントの Namespace
roleRef:
kind: ClusterRole
name: view # 標準で存在する、クラスター全体の読み取り権限を持つ ClusterRole
apiGroup: rbac.authorization.k8s.io
“`

viewという名前のClusterRoleは、Kubernetesに標準で用意されているRoleで、ほとんど全ての種類のオブジェクトに対してget, list, watch (参照) 権限を持ちます。

例 2: クラスター全体への管理者権限を付与(非推奨・危険!)

この設定では、Dashboardからクラスター内のあらゆるリソースを作成、更新、削除できてしまいます。不用意にインターネットに公開した場合、クラスターが完全に侵害されるリスクがあります。

“`yaml

dashboard-admin-clusterrolebinding.yaml (危険なので注意!)

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user-cluster-admin # 任意の名前
subjects:
– kind: ServiceAccount
name: admin-user # 作成したサービスアカウントの名前
namespace: kubernetes-dashboard # サービスアカウントの Namespace
roleRef:
kind: ClusterRole
name: cluster-admin # 標準で存在する、クラスター全体の管理者権限を持つ ClusterRole
apiGroup: rbac.authorization.k8s.io
“`

cluster-adminという名前のClusterRoleは、クラスター内の全てのリソースに対する全権限(*)を持ちます。この権限を付与したトークンは、クラスターのrootパスワードのようなものです。取り扱いには最大の注意を払ってください。

推奨される設定:

多くの場合、特定のNamespaceに対する管理者権限や、クラスター全体への読み取り専用権限など、最小限の権限を付与するのがベストプラクティスです。上記のview ClusterRoleを使った読み取り専用設定は比較的安全です。もし特定のNamespaceでPodの再起動やスケーリングを行いたい場合は、そのNamespaceに限定したRoleを作成し、ServiceAccountとRoleBindingを作成することになります。

ステップ 3: 作成したリソースの適用

作成したYAMLファイルをkubectl applyコマンドで適用します。

“`bash
kubectl apply -f dashboard-adminuser.yaml

読み取り専用権限を付与する場合:

kubectl apply -f dashboard-readonly-clusterrolebinding.yaml

管理者権限を付与する場合(危険!):

kubectl apply -f dashboard-admin-clusterrolebinding.yaml

“`

ステップ 4: サービスアカウントのトークンを取得する

作成したサービスアカウントに紐づくトークンを取得します。Kubernetes 1.24以降では、サービスアカウントに紐づくSecret(トークンを保持するオブジェクト)が自動的に作成されなくなりました。代わりに、ServiceAccountオブジェクトにトークンコントローラーが自動的に生成する署名付きトークンが紐づけられます。

kubectlコマンドを使ってトークンを取得します。

“`bash

ServiceAccount名と Namespace を指定してトークンを取得

例: ServiceAccount名が admin-user、Namespaceが kubernetes-dashboard の場合

kubectl create token admin-user -n kubernetes-dashboard

出力例:

eyJhbGciOiJIUzI1NiI… (長い文字列)

“`

この出力される長い文字列が、Dashboardログイン時に使用するトークンです。このトークンは有効期限があります。

Kubernetes 1.24より前のバージョンや、特定の環境設定によっては、サービスアカウント作成時に対応するSecretが自動的に作成される場合があります。その場合は、以下の手順でトークンを取得します。

“`bash

1. ServiceAccountに紐づくSecretの名前を取得

kubectl get serviceaccount admin-user -n kubernetes-dashboard -o yaml

出力例(関連部分のみ):

secrets:

– name: admin-user-token-xxxxx # この名前を控える

2. Secretからトークンを取得

取得したSecret名を指定

kubectl get secret admin-user-token-xxxxx -n kubernetes-dashboard -o jsonpath='{.data.token}’ | base64 –decode

出力例:

eyJhbGciOiJIUzI1NiI… (長い文字列)

“`

どちらの方法で取得したトークンも、Dashboardのログイン画面で使用します。

ステップ 5: Dashboardにログインする

Dashboardにアクセスすると、ログイン画面が表示されます。「トークン」を選択し、取得したトークン文字列を貼り付けて「サインイン」ボタンをクリックします。

正しく認証されると、Dashboardのトップ画面が表示されます。ここで表示・操作できるリソースは、ステップ 2でサービスアカウントに付与した権限によって決まります。読み取り専用権限であれば、ほとんどのリソースを参照できますが、作成や削除などの操作は権限エラーで失敗します。管理者権限の場合は、全ての操作が可能です。

セキュリティのベストプラクティス:

  • 最小権限の原則: Dashboardに付与する権限は、必要最低限に限定してください。特にcluster-admin権限は極力避けるべきです。
  • トークンの管理: 取得したトークンは機密情報として厳重に管理してください。安易に共有したり、公開リポジトリに含めたりしないでください。
  • HTTPS接続の必須化: 外部からアクセスする場合は、必ずIngressなどを使ってHTTPS接続を設定してください。平文での通信は盗聴のリスクがあります。
  • アクセス元の制限: ファイアウォール設定などで、Dashboardへのアクセス元IPアドレスを特定のネットワークに限定することを強く推奨します。
  • 定期的な監査: RBAC設定やサービスアカウントの権限を定期的に見直し、不要な権限が付与されていないか確認してください。

7. Kubernetes Dashboardの主要機能解説

Dashboardにログインすると、様々な情報が表示され、操作が可能になります。主要な機能を見ていきましょう。

ログイン後の画面左側にナビゲーションメニューがあります。ここで表示される項目は、ログインしたユーザー/サービスアカウントに付与されている権限によって異なります。

  • Overview (概要): クラスター全体のリソース使用状況、ノードの状態、Namespace数などを一目で確認できます。Metrics Serverが導入されていると、CPUやメモリの使用率グラフが表示されます。
  • Workloads (ワークロード): アプリケーションを実行する主要なリソースが表示されます。
    • Deployments: アプリケーションの宣言的な更新を管理します。一覧、ステータス(実行中、更新中、失敗など)、レプリカ数、関連Pod、イベントなどを確認できます。GUIからスケーリング(レプリカ数の変更)、ロールアウト(イメージバージョンの更新)、再起動、削除が可能です。
    • Replica Sets: Deploymentによって管理されることが多いですが、独立してPodのレプリカ数を保証します。
    • Stateful Sets: 永続的な識別子を持つPodのセットを管理します。データベースなど状態を持つアプリケーションに使用されます。
    • Daemon Sets: 各ノードにPodのコピーを1つずつ実行します。ログコレクターや監視エージェントなどに使用されます。
    • Jobs: バッチ処理など、一度だけ実行して完了するタスクを管理します。
    • Cron Jobs: スケジュールに基づいてJobを実行します。
    • Pods: Kubernetesで実行される最小の実行単位です。一覧、ステータス、所属するNode、IPアドレス、イベント、コンテナログなどを確認できます。Podの詳細画面から、ログのストリーミング表示、Execコマンドの実行(ターミナルを開く)、Podの削除などが可能です。
  • Service and Discovery (ServiceとDiscovery): サービスを公開したり、Pod間通信を可能にしたりするリソースが表示されます。
    • Services: Podへの安定したアクセスを提供します(ClusterIP, NodePort, LoadBalancerなど)。エンドポイント、関連するPod、ポートマッピングなどを確認できます。
    • Ingresses: HTTP/Sトラフィックをクラスター内のServiceにルーティングします。ルール、バックエンドServiceなどを確認できます。
  • Storage (ストレージ): アプリケーションが使用する永続ストレージ関連のリソースが表示されます。
    • Persistent Volumes (PVs): クラスターが利用可能な物理ストレージの断片を定義します。
    • Persistent Volume Claims (PVCs): アプリケーションが要求するストレージのリソースを定義します。PVCとPVのマッチング状況を確認できます。
    • Storage Classes: 動的なPVプロビジョニングのための設定を定義します。
  • Config and Storage (設定とストレージ): アプリケーションの設定や機密情報を管理するリソースが表示されます。(ナビゲーションメニューの分類はバージョンによって異なる場合があります。StorageがConfigと統合されていることもあります。)
    • Config Maps: アプリケーションの非機密な設定データをキー-バリュー形式で保存します。内容を確認できます。
    • Secrets: アプリケーションの機密情報(パスワード、トークン、SSHキーなど)を保存します。デフォルトでは値はマスクされていますが、設定によっては表示可能です。表示する場合はセキュリティリスクを理解してください。
  • RBAC (Role-Based Access Control): アクセス制御に関連するリソースが表示されます。
    • Service Accounts: プロセスがKubernetes APIと通信する際に使用するIDです。
    • Roles / ClusterRoles: リソースに対する操作権限(get, list, create, update, deleteなど)の集合を定義します。
    • Role Bindings / Cluster Role Bindings: サービスアカウントやユーザー/グループにRole/ClusterRoleを関連付け、権限を付与します。
  • Cluster (クラスター): クラスター全体の構成要素が表示されます。
    • Nodes: クラスターを構成するワーカーマシンです。状態、リソース使用状況、Pod配置状況などを確認できます。ノードのリソース枯渇状況などが把握できます。
    • Namespaces: クラスター内のリソースを論理的に分割するための仮想クラスターです。Namespaceを切り替えることで、表示されるリソースをフィルターできます。新しいNamespaceを作成することも可能です。

リソース作成機能:

Dashboardの右下にある「+」ボタンをクリックすると、YAMLファイルまたはフォーム入力で新しいリソースを作成できます。Deployment, Service, ConfigMap, Secretなど、主要なリソースタイプを選択して作成ウィザードまたはYAMLエディタが開きます。これは、簡単なアプリケーションを試しにデプロイしたい場合などに便利です。

8. 便利な機能と高度な利用

Kubernetes Dashboardには、日常的な運用やトラブルシューティングに役立つ便利な機能があります。

  • リソース使用状況のグラフ表示 (Metrics Serverとの連携): Overview画面やNodesの詳細画面でCPUやメモリの使用率グラフを表示するには、クラスターにMetrics Serverが導入されている必要があります。Metrics ServerはKubernetes公式のコンポーネントで、kubeletからメトリクスを収集し、Metrics APIを通じてこれらの情報を提供します。DashboardはこのAPIを利用してグラフを描画します。Metrics Serverは以下のコマンドで導入できます(バージョンによってURLは変わる可能性があります)。

    bash
    kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

    Metrics Serverが正常にデプロイされ、データ収集が始まると、Dashboardでリソース使用率のグラフが表示されるようになります。
    * ログのストリーミング表示: Podの詳細画面から、実行中のコンテナの標準出力・標準エラー出力をリアルタイムで確認できます。アプリケーションの動作確認やエラー原因の特定に非常に役立ちます。
    * PodへのExec接続: Podの詳細画面からターミナルを開き、Pod内のコンテナに直接コマンドを実行できます。コンテナ内部のファイルシステムを確認したり、簡単な診断コマンドを実行したりするのに便利です。ただし、この機能を使用するには、ブラウザからDashboard Pod、そして対象Podのkubeletへの接続が必要です。また、ログインしているサービスアカウントにExec権限が付与されている必要があります。
    * イベントログの確認: 各リソース(Pod, Deployment, Nodeなど)の詳細画面には、「Events」セクションがあります。ここには、そのリソースに発生したイベント(例: Podのスケジューリング、イメージのプル、コンテナの起動/停止、ノードのステータス変更など)が時系列で表示されます。トラブルシューティング時に、何が起こったのかを把握するために非常に重要です。Overview画面やNamespaceのフィルタリングを使って、クラスター全体や特定のNamespaceのイベントをまとめて確認することも可能です。
    * YAMLエディタ機能: リソースの作成・編集時に、GUIフォームだけでなくYAMLエディタも利用できます。これにより、詳細な設定や、GUIでサポートされていないフィールドの設定も可能です。
    * Namespaceフィルター: 画面上部のドロップダウンリストからNamespaceを選択することで、表示されるリソースを特定のNamespaceに絞り込むことができます。特定のアプリケーションやチームに関連するリソースのみを表示したい場合に便利です。
    * リソースのフィルタリング・ソート: 各一覧画面では、名前やラベルなどでリソースをフィルターしたり、各列(ステータス、作成日時など)でソートしたりできます。

9. セキュリティに関する考慮事項

前述した認証・認可の設定の重要性を再度強調しつつ、Kubernetes Dashboardを使用する上でのセキュリティリスクと対策について、さらに詳しく解説します。

リスク:

  • 不正アクセスによるクラスターの侵害: 最も深刻なリスクです。認証が不十分なDashboardが外部からアクセス可能な状態になっている場合、攻撃者は容易にクラスターに侵入し、機密情報の窃盗、リソースの破壊、マルウェアの実行など、あらゆる悪意のある操作を行うことができます。特に、cluster-admin権限を持つアカウントでDashboardにログインされてしまうと、クラスター全体が完全に掌握されます。
  • 機密情報の漏洩: Secretsの内容をDashboardで表示可能に設定している場合、権限を持つユーザーによってパスワードやAPIキーなどの機密情報が閲覧されるリスクがあります。
  • サービス拒否 (DoS): Dashboard自体が攻撃を受け、正しく機能しなくなる可能性があります。
  • 内部犯行: 適切に権限を分離せず、多くのユーザーが管理者権限でDashboardにアクセスできる状態になっていると、意図的または偶発的な操作ミスによってクラスターに損害を与えるリスクが高まります。

対策:

  • 強力な認証・認可設定の必須化:
    • インターネットへの直接公開を避ける: NodePortLoadBalancerで直接インターネットに公開するのは極力避けてください。推奨されるのは、Ingress + HTTPS + 認証による公開です。
    • 最小権限の原則に基づいたRBAC設定: Dashboardにログインするサービスアカウントには、必要最低限の権限のみを付与してください。参照のみで十分な場合はview ClusterRoleを、特定のNamespaceで操作が必要な場合はそのNamespaceに限定したRoleBindingを使用します。cluster-admin権限を付与したトークンの使用は、管理者自身がローカルからアクセスする場合など、極めて限定的な状況に留めるべきです。
    • トークンの安全な管理: ログインに使用するトークンは、パスワードと同様に機密情報として扱い、漏洩しないように管理してください。
    • KubeConfig認証のリスク: kubeconfigファイルにはクラスターへの認証情報が含まれるため、これをDashboardの認証に使用する場合も、そのファイル自体に付与されている権限とファイル自体の管理に注意が必要です。
  • HTTPS接続の使用: 外部からアクセスする場合は、必ずTLS終端(HTTPS化)を設定してください。Ingressコントローラーを使用するのが一般的な方法です。これにより、通信経路上での情報の盗聴を防ぎます。
  • アクセス元の制限: ファイアウォールやセキュリティグループ設定などで、Dashboardへのアクセス元IPアドレスを、信頼できるネットワーク(社内ネットワーク、VPN接続元など)に限定してください。
  • Secrets表示設定の確認: Dashboardの設定でSecretsの内容が表示可能になっていないか確認し、表示が必要な場合でもアクセス権限を厳密に管理してください。
  • 監査ログの有効化と監視: Kubernetes APIサーバーの監査ログを有効にし、Dashboardからの操作を含むAPI呼び出しが記録されるように設定します。不審な操作があった場合に検知できるように、監査ログの監視体制を構築することも重要です。
  • 定期的なアップデート: Kubernetes Dashboardや関連コンポーネント(Ingressコントローラー、Metrics Serverなど)は定期的にアップデートし、既知の脆弱性を修正してください。
  • 代替ツールの検討: セキュリティ要件が非常に厳しい場合や、より高度なアクセス制御が必要な場合は、サードパーティ製のGUIツールや、Kubernetesに統合されたプラットフォーム(OpenShift, Rancherなど)のUIの方が、より洗練された認証・認可機能や監査機能を提供している場合があります。

Kubernetes Dashboardは便利なツールですが、適切にセキュリティ設定を行わないと重大なセキュリティリスクとなります。特にプロダクション環境で外部公開する場合は、これらのセキュリティ対策を怠らないようにしてください。

10. トラブルシューティング

Kubernetes Dashboardの導入や利用中に発生しうる一般的な問題と、そのトラブルシューティング方法を解説します。

問題 1: Dashboardにアクセスできない

  • Dashboard Podが起動しているか確認:
    bash
    kubectl get pods -n kubernetes-dashboard

    STATUSRunning以外(Pending, Error, ImagePullBackOffなど)の場合は、Podの起動に問題があります。

    • Pending: スケジューリングできない(リソース不足、ノードにテイントがあるなど)。kubectl describe pod <pod-name> -n kubernetes-dashboardで原因を確認。
    • ImagePullBackOff: コンテナイメージをプルできない(イメージ名の間違い、レジストリへのアクセス権限不足など)。ログやイベントを確認。
    • Error: コンテナ実行時のエラー。ログを確認。kubectl logs <pod-name> -n kubernetes-dashboard
  • Dashboard Serviceが存在するか確認:
    bash
    kubectl get svc -n kubernetes-dashboard

    kubernetes-dashboardという名前のServiceがあるか確認。
  • アクセス方法に応じた確認:
    • kubectl proxyを使用している場合: kubectl proxyコマンドが実行中か、ローカルマシンのファイアウォールがポート8001をブロックしていないか確認。URLが正しいか(特にhttps:の部分)確認。
    • NodePortを使用している場合: ServiceのタイプがNodePortになっているか、割り当てられたNodePortを確認。ノードのIPアドレスやファイアウォール設定を確認。
    • LoadBalancerを使用している場合: ServiceのタイプがLoadBalancerになっているか、外部IPアドレスが割り当てられているか確認。クラウドプロバイダー側のロードバランサー設定やファイアウォールを確認。
    • Ingressを使用している場合: Ingressリソースが正しく設定されているか、Ingressコントローラーが正しく動作しているか確認。Ingressコントローラーのログを確認。DNS設定が正しいか確認。TLS証明書が有効か確認。
  • ファイアウォール: クラスターが動作しているネットワークや、アクセス元マシンのファイアウォールが、Dashboardへのアクセスに必要なポート(デフォルトではHTTPSの443または8443、NodePortのポート、Ingressが公開しているポートなど)をブロックしていないか確認。

問題 2: Dashboardにログインできない(認証エラー)

  • 使用しているトークンが正しいか確認: コピー&ペーストミスがないか確認。空白文字などが含まれていないか確認。
  • 使用しているトークンが有効か確認: トークンには有効期限があります。kubectl create tokenで新しくトークンを生成して試してください。
  • サービスアカウントが存在するか確認: kubectl get serviceaccount admin-user -n kubernetes-dashboardadmin-userはサービスアカウント名)で、使用しようとしているサービスアカウントが存在するか確認。
  • サービスアカウントに紐づくSecret/トークンが正しいか確認: Kubernetes 1.24未満の場合、ServiceAccountに紐づくSecretが正しく作成され、その中からトークンを取得しているか確認。Kubernetes 1.24以降の場合、kubectl create tokenコマンドが正しく動作しているか確認。
  • 認証設定の確認: Dashboard Podのログを確認して、認証に関するエラーが出力されていないか確認します。

問題 3: ログインできたが、リソースが表示されない/操作できない(認可エラー)

  • サービスアカウントに権限が付与されているか確認:
    • 使用しているサービスアカウント名とNamespaceを確認。
    • そのサービスアカウントに紐づくRoleBinding/ClusterRoleBindingが存在するか確認。kubectl get rolebindings,clusterrolebindings --all-namespaces -o wide | grep admin-useradmin-userはサービスアカウント名)などで確認できます。
    • RoleBinding/ClusterRoleBindingが参照しているRole/ClusterRoleが存在するか確認。
    • Role/ClusterRoleに、表示・操作したいリソースに対する適切な権限(get, list, watchなどの参照権限、create, update, deleteなどの操作権限)が付与されているか確認。kubectl get role <role-name> -o yaml -n <namespace>kubectl get clusterrole <clusterrole-name> -o yamlで確認できます。
    • 特に、表示したいリソースがClusterレベルのリソース(Nodes, PVs, ClusterRolesなど)の場合は、ClusterRoleBindingが必要です。
  • Namespaceの選択: 画面上部のNamespaceドロップダウンで「All namespaces」または対象のNamespaceが選択されているか確認。
  • Dashboard Podのログ: Dashboard Podのログに、UnauthorizedForbiddenなどの認可に関するエラーが出力されていないか確認します。

問題 4: リソース使用状況のグラフが表示されない

  • Metrics Serverが導入・稼働しているか確認:
    bash
    kubectl get pods -n kube-system | grep metrics-server

    Metrics ServerのPodがRunningになっているか確認します。Metrics Serverは通常kube-system Namespaceにデプロイされます。

    • Podが起動していない場合は、Podのイベントやログを確認して原因を特定します。
  • Metrics Server Serviceが存在するか確認:
    bash
    kubectl get svc -n kube-system | grep metrics-server

    metrics-serverという名前のServiceがあるか確認。
  • Metrics Serverがデータを収集できているか確認: Metrics Serverのログを確認して、ノードやPodからメトリクスを正常に収集できているか確認します。ファイアウォールなどによってkubeletへのアクセスがブロックされていないかなども原因となり得ます。
  • Kubernetes APIサーバーがMetrics APIを有効にしているか確認: 通常はデフォルトで有効ですが、まれに設定によって無効になっている場合があります。

11. Kubernetes Dashboardの代替・補完ツール

Kubernetesの管理・監視には、Kubernetes Dashboard以外にも様々なツールがあります。これらはDashboardの機能を補完したり、特定の用途に特化していたりします。

  • kubectl: Kubernetesの公式コマンドラインツールです。Dashboardではできない高度な操作、スクリプトによる自動化、一括操作などに不可欠です。Dashboardでクラスターの状態を確認し、詳細な操作やデバッグはkubectlで行うという使い分けが一般的です。
  • Lens: Kubernetesクラスターを管理するための強力なデスクトップアプリケーションです。複数のクラスターを管理でき、DashboardよりもリッチなUI、リソースの依存関係表示、ターミナル、ログ表示、Helm管理など、豊富な機能を提供します。Kubernetes Dashboardの機能を超えた、より包括的なデスクトップクライアントを求めるユーザーに適しています。
  • K9s: ターミナルベースのUIを提供するツールです。CLIの操作性に慣れているユーザーにとって、kubectlコマンドを覚える負担を軽減しつつ、クラスターのリソースをcursesベースのUIで素早く参照・操作できます。グラフィカルなDashboardよりも軽量で高速な操作が可能です。
  • Prometheus/Grafana: クラスターやアプリケーションのメトリクスを収集・可視化するための強力な組み合わせです。Dashboardのリソース使用率表示は基本的なものですが、PrometheusとGrafanaを組み合わせることで、より詳細な監視、アラート設定、カスタムダッシュボードの構築が可能になります。
  • クラウドプロバイダーの管理コンソール: GKE, EKS, AKSなどのマネージドKubernetesサービスでは、各クラウドプロバイダーが独自のWebコンソールを提供しています。これらのコンソールは、Kubernetesリソースの管理に加えて、クラウドサービス固有の機能(ロードバランサー設定、IAM連携、ロギング・モニタリング統合など)へのアクセスも提供します。Dashboardよりも機能が豊富で、セキュリティ設定も容易な場合があります。
  • その他のWebベースUI: OpenShift Console, Rancher UIなど、Kubernetesをベースとしたプラットフォームには独自のWeb UIが付属しており、より統合された管理機能を提供します。

Kubernetes Dashboardは手軽に導入できる公式UIとして有用ですが、これらの代替・補完ツールと組み合わせて使用することで、より効率的かつ高度なKubernetes運用が可能になります。

12. まとめ

Kubernetes Dashboardは、Kubernetesクラスターのリソースを視覚的に管理・監視するための公式Web UIです。クラスターの状態把握、アプリケーションの簡単なデプロイや操作、基本的なトラブルシューティングに役立ちます。

本記事では、Kubernetes Dashboardの導入手順から、kubectl proxy, NodePort/LoadBalancer, Ingressといった様々なアクセス方法、そして最も重要なセキュリティ設定である認証・認可(サービスアカウントとRBAC)について詳細に解説しました。特に、最小権限の原則に基づいたRBAC設定と、IngressによるHTTPSでの安全な公開の重要性を強調しました。

また、ワークロード、Service、ストレージ、設定、RBAC、クラスターといった主要な機能に加え、Metrics Serverとの連携によるリソース使用状況グラフ表示、ログのストリーミング、Exec接続、イベント確認といった便利な機能も紹介しました。

最後に、Dashboard利用におけるセキュリティリスクと対策を改めて確認し、一般的なトラブルシューティング方法や、Dashboardの代替・補完ツールについても触れました。

Kubernetes Dashboardは、CLI操作に不慣れなユーザーや、クラスターの状態を素早く把握したい場合に非常に有用なツールです。しかし、その利便性と引き換えにセキュリティリスクを伴う可能性があることを常に意識し、本記事で解説したセキュリティ対策(特にRBACによる最小権限の設定と、安全なアクセス方法の選択)を徹底することが、安全なKubernetes運用のためには不可欠です。

このガイドが、Kubernetes Dashboardを導入し、安全かつ効果的に利用するための一助となれば幸いです。Kubernetesの世界は日々進化していますが、Dashboardのようなツールを使いこなすことで、より快適にコンテナオーケストレーションの恩恵を享受できるようになるでしょう。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール