この投稿は、Vagrantの仮想サーバーで構築したK8sクラスタの3回目で、ダッシュボードのセットアップ方法についてのメモです。
1回目、2回目のリンクを以下にあげておきますので、必要に応じて参照いただければ幸いです。
Kubernetes Dashboadは、セキュリティや表示機能で開発が続いていますが、これらに関する複数の古いドキュメントも残っていますから、適切な参照先を選ばないと時間を無駄にしてしまいます。 そこで、参考までに、今回参照した資料と役に立たなかった資料を列挙しておきます。GitHubに置かれているドキュメントは、最新の状態になっている様です。
セットアップ時に参照した資料URL:
- https://github.com/kubernetes/dashboard
- https://github.com/kubernetes/dashboard/wiki/Creating-sample-user
セットアップの参考にならなかった資料のURL:
- https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
- https://kubernetes-v1-4.github.io/docs/user-guide/ui/
仮想サーバ K8s1 ポートフォワード設定
k8sのポッドネットワーク上のIPアドレスでリッスンしているダッシュボードのウェブページを、Vagrant のホストであるMacからアクセスできる様にするために、下記のVagrantfileの16行目の様に、ゲスト(仮想サーバー)の8001番ポートとホスト(Mac)の8001番ポートを対応させます。これによって、Macのブラウザで、https://localhost:8001/ をアクセスすると、仮想サーバーの8001番ポートへフォワードされる様になります。
13 public_ip = "192.168.1.#{i+90}"
14 s.vm.network :public_network, ip: public_ip, bridge: "en0: Ethernet"
15 if i == 1 then
16 s.vm.network :forwarded_port, host: 8001, guest: 8001
17 end
ダッシュボードのインストール
次に、kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
によって、ダッシュボードをデプロイします。 この操作は、https://github.com/kubernetes/dashboard にガイドされています。
vagrant@k8s1:/vagrant/yaml$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
secret "kubernetes-dashboard-certs" created
serviceaccount "kubernetes-dashboard" created
role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
deployment.apps "kubernetes-dashboard" created
service "kubernetes-dashboard" created
管理ユーザーとロールの作成
ダッシュボードにアクセスする権限を持ったユーザーを作成するために、次の2つのYAMLファイルを適用します。 これらのYAMLファイルは、https://github.com/kubernetes/dashboard/wiki/Creating-sample-user
にガイドされています。
ダッシュボードユーザーを作るYAML
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
ロール(権限)を与えるYAML
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
上記2つのYAMLを マスターノード k8s1 で kubectlを実行して、適用します。
vagrant@k8s1:/vagrant/yaml$ kubectl create -f CreateServiceAccount.yaml
serviceaccount "admin-user" created
vagrant@k8s1:/vagrant/yaml$ kubectl create -f CreateClusterRoleBinding.yaml
clusterrolebinding.rbac.authorization.k8s.io "admin-user" created
管理ユーザーのトークンの表示
次に、前述のYAML適用で生成された管理ユーザーのトークンを表示して、ログイン時にコピペして利用できる様にします。 トークンは、token:
の次から始まる文字列です。この表示は、メモ帳などに保存しておいて、ダッシュボードにログインする場合に、毎回利用します。
vagrant@k8s1:/vagrant/yaml$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-w4w7w
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=admin-user
kubernetes.io/service-account.uid=1c934b99-4230-11e8-a350-02399910d15e
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXc0dzd3Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxYzkzNGI5OS00MjMwLTExZTgtYTM1MC0wMjM5OTkxMGQxNWUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.cu-yNdS7dFbVm_aJkAU_Q2PIshwlXAlO54Gjm3Vhm5gHZxbN6Kr_JGJ9b0pYmmBIuj1Pml0MfErh_AtceTtQZnrCdjJCR8WJG8I4HtJLk-BYloNU8GJ95gOuKQ0kVMpJ8R4uHGHgjwOkLzI_r9x2mquID6TEtPxfEWDqQSdXzzBq4oPe0RhTUE4p9QKm14W3H9BPUXui880HpuX84aKER5_3MQc2xmFnTrkZUq4QQKc2zgyrjjaEEsyAI1m9oPwzW-IRCiKTMkwqKIN5JJ1f3H1WowAt8LtYydex7-_bQkd-9N1Oe6uLSHAIjyq1DcOVF8Ww7ylMZb6ANEWBHiTrng
vagrant@k8s1:/vagrant/yaml$
kubectl プロキシの設定
ダッシュボードのポッドは、ポッドネットワーク(10.244.0.0/16)上のIPアドレスで、リッスンしています。 このポッドネットワークをk1s1の8001番ポートに中継(プロキシ)するために、次のコマンドを実行します。 このコマンドは、コントロール-Cで停止するまで、プロキシとして機能します。
vagrant@k8s1:~$ kubectl proxy --address="0.0.0.0" -p 8001 --accept-hosts='^*$' -n kube-system
Starting to serve on [::]:8001
コマンドのオプションの説明は、https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#proxy
にあります。
ダッシュボードへのログイン
過去のバージョンでは、http://localhost:8001/ui/
とされていましたが、v1.10では廃止となっており、次のアドレスでアクセスします。
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
ブラウザでアクセスすると、次のウィンドが表示されます。 Tokenをクリックして、Enter token
に、先に表示したトークンをコピペして、SIGN IN
をクリックします。
ダッシュボードの表示
ログインに成功すると、次の様なダッシュボードが表示されます。
ダッシュボードの利用方法は、説明が無くても、直感的に判る様になっていますが、https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/ を参照すると、助けになると思います。
ダッシュボードの機能追加
ダッシュボードのスクリーンショットの中には、次の様に、CPU usage, Memory usage が表示されていますが、これまでのセットアップではグラフがありません。 これには、Heapster という名前のメトリックス・コレクターを設定する必要があります。 設定ガイドは、https://github.com/kubernetes/dashboard/wiki/Integrations にあります。
まとめ
Vagrantの環境で構築したk8sクラスタに、ダッシュボードをデプロイして、ホストのブラウザからアクセスできる事を確認しました。 また、CPUとメモリのグラフを表示するためには、Heapsterの設定が必要な事がわかりました。 そして、設定を進めるにあたり、必要な資料は、Github https://github.com/kubernetes/dashboard にあるものが、最も最新であることも解りました。