Content
Kubernetes ダッシュボードは、管理者が基本的な操作タスクを実行し、クラスターイベントを確認できる Web ベースの UI です。ダッシュボードは、クラスターの表示と監視、マニフェストの送信、ログの検査、システム情報の取得のためのクイックツールとして使用できます。
この補足記事では、Kubernetes ダッシュボードについて深く掘り下げ、インストール方法、クラスターの内部と外部からアクセスする方法、リモートで管理する方法について説明します。
理解を深めるには、Kubernetes クラスターにアクセスできる必要があります。Kind を使用すると、テスト目的でローカル Kubernetes クラスターを作成できます(指示に従って、サンプルクラスターをインストールしてデプロイします)。または、Digital Ocean や GCloud などのマネージドサービスを使用して、実際の例をシミュレートすることもできます。
それでは始めましょう。
Kubernetes ダッシュボードの基本
Kubernetes ダッシュボードは、公式の Kubernetes チームによって管理されており、クラスターにデプロイできる汎用 Web アプリケーションです。これは、フロントエンドとバックエンドの 2 つの主要コンポーネントで構成されています。
ダッシュボードはクラスターの Web ビューとして機能し、簡単な管理タスクに使用できます。公式マニフェストを適用することでデプロイできます:
$ 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 では、通常のユーザーと、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 では、すべての警告を受け入れると続行できます。
認証のスキップ
特定の引数を使用して 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 ダッシュボードは、クラスターの状態をすばやく監視し、マニフェストを適用するための優れたツールです。デプロイとアクセスは比較的簡単で、数分でプロのように小規模のクラスターのデプロイ管理を開始できます。