※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。

<前のページ
【解説】kubectlコマンドでyamlファイルからKubernetesオブジェクトを作成
次のページ>
【Kubernetes】redisのレプリケーションを実装する方法

Kubernetesダッシュボードのインストールからログインまで解説

kubernetes kubectl k8s kubernetesダッシュボード ダッシュボード サーバー開発

投稿日:2020年10月7日

このエントリーをはてなブックマークに追加
Kubernetesダッシュボードはリソースの作成、管理、そしてKubernetesの勉強に非常に便利です。この記事ではKubernetesの環境にKubernetesダッシュボードをインストールし、サービスアカウントの作成、そしてログインするまでを詳しく解説しています。

はじめに

Kubernetesダッシュボードとは?

公式の解説

ダッシュボードは、WebベースのKubernetesユーザーインターフェイスです。ダッシュボードを使用して、コンテナ化されたアプリケーションをKubernetesクラスターにデプロイしたり、コンテナ化されたアプリケーションをトラブルシューティングしたり、クラスターリソースを管理したりすることができます。ダッシュボードを使用して、クラスター上で実行されているアプリケーションの概要を把握したり、個々のKubernetesリソース(Deployments、Jobs、DaemonSetsなど)を作成または修正したりすることができます。たとえば、Deploymentのスケール、ローリングアップデートの開始、Podの再起動、デプロイウィザードを使用した新しいアプリケーションのデプロイなどが可能です。

簡単に言うとKubernetesでリソースの作成や管理などをブラウザで簡単に行える機能です。見た目でわかりやすく表示してくれるためKubernetesの勉強にも便利に使うことができると思います。

環境

この記事は以下の環境で実行されています。

  • OS:Ubuntu18.04LTS
  • kubectl :バージョン 1.19.0
  • Minikube :バージョン 1.13.1

実践

ダッシュボードを起動

まずは公式がweb上に公開しているKubernetesダッシュボードのyamlファイルをapplyします。

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

サービスアカウントの作成

サービスアカウントの作成について、説明の内容が少し上級者向けになっています!
説明は流し読みして、yamlの作成とコマンドの実行だけして次に進んでもOKです!

KubernetesダッシュボードはRBAC(Role Based Access Controll)で構成されているため、サービスアカウントを使用する必要があります。

サービスアカウントはkubectlコマンドで直に作成する方法と、yamlファイルをkubectlapplyコマンドで作成する方法があります。

今回は繰り返し使うことを前提としてyamlファイルのapplyで作成してみます。

作成するサービスアカウントはkubernetes-dashboardというnamespaceで作成します。
まずは現在どのようなサービスアカウントが存在しているのかを確認してみましょう。サービスアカウントはsecretsというリソースで管理されます。

ターミナル
$ kubectl get secrets -n kubernetes-dashbaord
default-token-q7bd9                kubernetes.io/service-account-token   3      5h35m
kubernetes-dashboard-certs         Opaque                                0      5h35m
kubernetes-dashboard-csrf          Opaque                                1      5h35m
kubernetes-dashboard-key-holder    Opaque                                2      5h35m
kubernetes-dashboard-token-6vvws   kubernetes.io/service-account-token   3      5h35m

サービスアカウント作成のyamlファイルを作成します。サービスアカウント名はmarsquaiにします。自分が管理しやすいように自分の名前など好きに置き換えてください。

service-account.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: marsquai
  namespace: kubernetes-dashboard

作成したyamlファイルをapplyします。

ターミナル
$ kubectl apply -f service-account.yml
serviceaccount/marsquai created

問題なく作成できたか確認してみましょう。

ターミナル
$ kubectl get secrets -n kubernetes-dashboard
default-token-q7bd9                kubernetes.io/service-account-token   3      5h35m
kubernetes-dashboard-certs         Opaque                                0      5h35m
kubernetes-dashboard-csrf          Opaque                                1      5h35m
kubernetes-dashboard-key-holder    Opaque                                2      5h35m
kubernetes-dashboard-token-6vvws   kubernetes.io/service-account-token   3      5h35m
marsquai-token-vnz2z               kubernetes.io/service-account-token   3      5h10m

問題なく作成できていることが確認できますね。

次にこのサービスアカウントに適切なRoleを付与します。Roleの付与では対象を指定してあげる必要があります。サービスアカウントを指定するには以下の情報を使います。

  • namespace:kubernetes-dashboard
  • name:marsquai

作成するRoleには管理者ということでadmin-userという名前をつけることにします。実際のyamlファイルは以下の様になります。

role-binding.yaml
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: marsquai
    namespace: kubernetes-dashboard

roleRefのディレクティブがこのRoleの権限を表しています。ここで指定しているcluster-adminはデフォルトで存在するRoleでクラスタ内の全てのリソースに対して全権限を持っています。

その下のsubjectsのディレクティブが対象のサービスアカウントを表しています。

これでサービスアカウントの作成は完了です。

さいごに今回作成したServiceAccountとRoleBindingの図を載せておきます。

▲作成したサービスアカウントについて

プロキシの起動

次にブラウザからアクセスできるようにプロキシを起動させます。

ターミナル
$ kubectl proxy

これでブラウザからKubernetesダッシュボードにアクセスできるようになりました。

ダッシュボードにログイン

Kubernetesダッシュボードはサービスアカウントの認証情報のトークンを利用してログインします。認証情報はサービスアカウントを作った際に付随して作成されています。

まずは作成したサービスアカウントになんというnameの認証情報がアタッチされているのか確認してみましょう。marsquaiのところはservice-account.yamlのnameで指定した値にそれぞれ置き換えてください。-nはnamespaceを指定するオプションです。

ターミナル
$ kubectl describe serviceaccounts -n kubernetes-dashboard marsquai
Name:                marsquai
Namespace:           kubernetes-dashboard
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   marsquai-token-vnz2z
Tokens:              marsquai-token-vnz2z
Events:              <none>

認証情報の名前はTokensの値です。

この認証情報がどんなトークンを持っているのか確認しましょう。
marsquai-token-vnz2zという値はそれぞれ出力されたTokensの値に置き換えてください。

ターミナル
$ kubectl describe secret marsquai-token-vnz2z -n kubernetes-dashboard
Name:         marsquai-token-vnz2z
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: marsquai
              kubernetes.io/service-account.uid: cd6f2a4a-4094-437c-bd82-5a787e079db7

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjFSamU2aDByb0xucTlrVGdUdnY5V2tpaV9wVGlCTWNVasdfasVpoV1dLT3JzNnMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJtYXJzcXVhaa10b2tlbi12bnoyeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291banQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJtYXJzcXVhaSIsImt1YmVfybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImNkNmYyYTRhLTQwOTQtNDM3Yy1iZDgyLTVhNzg3ZTA3OWRiNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDptYXJzcXVhaSJ9.uonYdHM1X6dxEAvmFJd8xQSwtbSFaPDqY1qMBEt5jVYtV4CEl4a_kJ5ErkuEixYa5zqEajn6ftEbNTty4NHWrBYFgXhD_dbEJRKRx_EMrC6fRsjGdqGi1RC5hqNbEv-exfdKm38U9h1jmGw_EWP0fnBgJ0YE5dGqWQ9Spv1kpwfMbSuLGHwQHnfPO1Rvg6cbyf3Ke1Rj3XoGjpn43Lq9AI49N6r9_izHXql8Iyf4K7HJr4_pzkuFc71WiEQTA_wQrYV-SXrvKw6Ni_VPf-f_RbtBcT8M06bt1qyp9C6IMyH1rSS6N2bnCkpVuEpyVsApxfnIB-v54sIhgDXH8FvrTg

出力されたtokenの値をコピーしてこの値を使ってダッシュボードにログインします。

次のURLをブラウザから開いてみましょう。

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

次のようなページが表示されるはずです。

【トークン】にチェックを入れて先程の値をペーストしてログインします。

ダッシュボードにログインできます。

▲kubernetesダッシュボードのホーム
このエントリーをはてなブックマークに追加

<前のページ
【解説】kubectlコマンドでyamlファイルからKubernetesオブジェクトを作成
次のページ>
【Kubernetes】redisのレプリケーションを実装する方法

関連記事

記事へのコメント