Trending keywords: security, cloud, container,

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

SHARE:

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 createdCode 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 ダッシュボードへのアクセス方法

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

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}}"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 -> 8443Code 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を使いこなすなら、まずダッシュボードを実際に使って操作を覚えていきましょう。