投稿日:2020年10月7日
Kubernetesダッシュボードはリソースの作成、管理、そしてKubernetesの勉強に非常に便利です。この記事ではKubernetesの環境にKubernetesダッシュボードをインストールし、サービスアカウントの作成、そしてログインするまでを詳しく解説しています。
公式の解説
ダッシュボードは、WebベースのKubernetesユーザーインターフェイスです。ダッシュボードを使用して、コンテナ化されたアプリケーションをKubernetesクラスターにデプロイしたり、コンテナ化されたアプリケーションをトラブルシューティングしたり、クラスターリソースを管理したりすることができます。ダッシュボードを使用して、クラスター上で実行されているアプリケーションの概要を把握したり、個々のKubernetesリソース(Deployments、Jobs、DaemonSetsなど)を作成または修正したりすることができます。たとえば、Deploymentのスケール、ローリングアップデートの開始、Podの再起動、デプロイウィザードを使用した新しいアプリケーションのデプロイなどが可能です。
簡単に言うとKubernetesでリソースの作成や管理などをブラウザで簡単に行える機能です。見た目でわかりやすく表示してくれるためKubernetesの勉強にも便利に使うことができると思います。
この記事は以下の環境で実行されています。
まずは公式が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ファイルをkubectlのapplyコマンドで作成する方法があります。
今回は繰り返し使うことを前提として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にします。自分が管理しやすいように自分の名前など好きに置き換えてください。
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の付与では対象を指定してあげる必要があります。サービスアカウントを指定するには以下の情報を使います。
作成するRoleには管理者ということでadmin-userという名前をつけることにします。実際の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をブラウザから開いてみましょう。
次のようなページが表示されるはずです。
【トークン】にチェックを入れて先程の値をペーストしてログインします。
ダッシュボードにログインできます。