Kubernetes ダッシュボードとは?使い方を解説
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
Code language: JavaScript (javascript)
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
…
Code language: JavaScript (javascript)
Kubernetes ダッシュボードへのアクセス方法
次に、クラスターにローカルでアクセスする方法について見てみましょう。ダッシュボードは次の場所にあります:
これは、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}}"
Code language: JavaScript (javascript)
ダッシュボードにアクセスするには、トークンをコピーして貼り付けます。
図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
Code language: JavaScript (javascript)
チェーン内の証明書が信頼されていないため、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/
Code language: HTML, XML (xml)
サービス定義またはイングレスコントローラを使用してダッシュボードを公開することもできます。
ダッシュボードの既存のサービスにパッチを適用して、ノードポートを公開できます。
$ 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を使いこなすなら、まずダッシュボードを実際に使って操作を覚えていきましょう。