前置き
1.7系まではkubectl proxy
コマンドを実行し、ブラウザで127.0.0.1:8001/ui
にアクセスすることで簡単にWebUIを利用することができました。
しかし、Kubernetes 1.8系から認証システムが入っており、認証を通さなければWebUIを利用することができなくなりました。
WebUIアクセス時に以下のような認証画面が表示されるようになっています。
権限は細かく分かれており、デフォルトで以下のような種類があります。
$ kubectl -n kube-system get secret
NAME TYPE DATA AGE
attachdetach-controller-token-cdqt4 kubernetes.io/service-account-token 3 45m
certificate-controller-token-7qjc4 kubernetes.io/service-account-token 3 45m
cloud-provider-token-gn4gq kubernetes.io/service-account-token 3 45m
clusterrole-aggregation-controller-token-tl2wc kubernetes.io/service-account-token 3 45m
cronjob-controller-token-prhf8 kubernetes.io/service-account-token 3 45m
daemon-set-controller-token-rr99v kubernetes.io/service-account-token 3 45m
default-token-xbqb8 kubernetes.io/service-account-token 3 45m
deployment-controller-token-76t44 kubernetes.io/service-account-token 3 45m
disruption-controller-token-ttfnq kubernetes.io/service-account-token 3 45m
endpoint-controller-token-7q884 kubernetes.io/service-account-token 3 45m
event-exporter-sa-token-6n4c6 kubernetes.io/service-account-token 3 45m
fluentd-gcp-token-c77bf kubernetes.io/service-account-token 3 45m
generic-garbage-collector-token-pk9j7 kubernetes.io/service-account-token 3 45m
heapster-token-kgzhn kubernetes.io/service-account-token 3 45m
horizontal-pod-autoscaler-token-cfm5c kubernetes.io/service-account-token 3 45m
job-controller-token-tmdx5 kubernetes.io/service-account-token 3 45m
kube-dns-autoscaler-token-m59qq kubernetes.io/service-account-token 3 45m
kube-dns-token-g9bb9 kubernetes.io/service-account-token 3 45m
kubernetes-dashboard-certs Opaque 0 45m
kubernetes-dashboard-key-holder Opaque 2 45m
kubernetes-dashboard-token-kw59t kubernetes.io/service-account-token 3 45m
metadata-proxy-token-s8f5v kubernetes.io/service-account-token 3 45m
metrics-server-token-w9j4f kubernetes.io/service-account-token 3 45m
namespace-controller-token-9qddf kubernetes.io/service-account-token 3 45m
node-controller-token-7nf8h kubernetes.io/service-account-token 3 45m
persistent-volume-binder-token-gjn6g kubernetes.io/service-account-token 3 45m
pod-garbage-collector-token-whp67 kubernetes.io/service-account-token 3 45m
replicaset-controller-token-b2tcl kubernetes.io/service-account-token 3 45m
replication-controller-token-7pl4w kubernetes.io/service-account-token 3 45m
resourcequota-controller-token-sqqg7 kubernetes.io/service-account-token 3 45m
route-controller-token-894rl kubernetes.io/service-account-token 3 45m
service-account-controller-token-5jhjb kubernetes.io/service-account-token 3 45m
service-controller-token-xgdwx kubernetes.io/service-account-token 3 45m
statefulset-controller-token-q47bt kubernetes.io/service-account-token 3 45m
ttl-controller-token-8rcs5 kubernetes.io/service-account-token 3 45m
例えば、deployment-controller
権限でログインする方法は、まず以下のようにtokenを取得します。
# 上のリストからdeployment-controller-xxxxxとなっているものを指定する
kubectl -n kube-system describe secret deployment-controller-token-76t44
Name: deployment-controller-token-76t44
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=deployment-controller
kubernetes.io/service-account.uid=bde9a663-3429-11e8-92ba-42010a92006a
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1115 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZXBsb3ltZW50LWNvbnRyb2xsZXItdG9rZW4tNzZ0NDQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVwbG95bWVudC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYmRlOWE2NjMtMzQyOS0xMWU4LTkyYmEtNDIwMTBhOTIwMDZhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRlcGxveW1lbnQtY29udHJvbGxlciJ9.C-V8qYwHJ1lnDTSjoRFyMSyFMKMTOcNNFFsujOjnQsts7ov54Mt4M8L9_QjyRXTvnI_jSSCjq5IFcXY2W_oLbqY8f5nCO2uwAcYDPF3YRSx0Qf5lk56FQ2kuIyMSmFutwKaHbgrEK0j3XyruCeGyy4Ych_MPmeJUKWvImrwubDsIFxYinvjdzEiWjc3CSByWYTqCyhdV1ovicWXJQIBsaU5PLxCpOi2uK4hSlcGT15OApy8pKVvx45E37qSbVSL5IgplkZ8DOZyOynxlLDFlANIAivs4MrnWMUI4xhUjRlqyWBNLwDchrkbyqjKFORmBjnsMxHL3FqXkXYDHwdqq0w
表示されたTokenを入力してSIGN IN
を選択します。
すると以下のようにログインができます。
しかし、警告が画面上部に出ています。
ここにはdeployment-controller
権限では閲覧できない内容がある旨が表示されています。
警告の解消方法
2つの方法があります。
-
https://github.com/kubernetes/dashboard/wiki/Access-control の
Admin privileges
の箇所に書いてある方法で、ログインをSKIPできるようにしてしまう方法(認証システムを無効化するのでセキュリティリスクあり) - 管理者権限を作り、管理者権限のTokenを使ってログインする方法
ここでは後者の方法を説明します。
サービスアカウントの作成
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
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
上記のファイルを用意し、以下のコマンドでデプロイします。
$ kubectl apply -f service-account.yaml
そうすると以下のようにadmin-user-token-xxxxx
が出現します。
$ $ kubectl -n kube-system get secret
NAME TYPE DATA AGE
admin-user-token-h5t5t kubernetes.io/service-account-token 3 40m
attachdetach-controller-token-cdqt4 kubernetes.io/service-account-token 3 56m
certificate-controller-token-7qjc4 kubernetes.io/service-account-token 3 56m
cloud-provider-token-gn4gq kubernetes.io/service-account-token 3 56m
clusterrole-aggregation-controller-token-tl2wc kubernetes.io/service-account-token 3 56m
cronjob-controller-token-prhf8 kubernetes.io/service-account-token 3 56m
daemon-set-controller-token-rr99v kubernetes.io/service-account-token 3 56m
default-token-xbqb8 kubernetes.io/service-account-token 3 56m
deployment-controller-token-76t44 kubernetes.io/service-account-token 3 56m
disruption-controller-token-ttfnq kubernetes.io/service-account-token 3 56m
endpoint-controller-token-7q884 kubernetes.io/service-account-token 3 56m
event-exporter-sa-token-6n4c6 kubernetes.io/service-account-token 3 55m
fluentd-gcp-token-c77bf kubernetes.io/service-account-token 3 55m
generic-garbage-collector-token-pk9j7 kubernetes.io/service-account-token 3 56m
heapster-token-kgzhn kubernetes.io/service-account-token 3 56m
horizontal-pod-autoscaler-token-cfm5c kubernetes.io/service-account-token 3 56m
job-controller-token-tmdx5 kubernetes.io/service-account-token 3 56m
kube-dns-autoscaler-token-m59qq kubernetes.io/service-account-token 3 55m
kube-dns-token-g9bb9 kubernetes.io/service-account-token 3 55m
kubernetes-dashboard-certs Opaque 0 56m
kubernetes-dashboard-key-holder Opaque 2 56m
kubernetes-dashboard-token-kw59t kubernetes.io/service-account-token 3 55m
metadata-proxy-token-s8f5v kubernetes.io/service-account-token 3 55m
metrics-server-token-w9j4f kubernetes.io/service-account-token 3 55m
namespace-controller-token-9qddf kubernetes.io/service-account-token 3 56m
node-controller-token-7nf8h kubernetes.io/service-account-token 3 56m
persistent-volume-binder-token-gjn6g kubernetes.io/service-account-token 3 56m
pod-garbage-collector-token-whp67 kubernetes.io/service-account-token 3 56m
replicaset-controller-token-b2tcl kubernetes.io/service-account-token 3 56m
replication-controller-token-7pl4w kubernetes.io/service-account-token 3 56m
resourcequota-controller-token-sqqg7 kubernetes.io/service-account-token 3 56m
route-controller-token-894rl kubernetes.io/service-account-token 3 56m
service-account-controller-token-5jhjb kubernetes.io/service-account-token 3 56m
service-controller-token-xgdwx kubernetes.io/service-account-token 3 56m
statefulset-controller-token-q47bt kubernetes.io/service-account-token 3 56m
ttl-controller-token-8rcs5 kubernetes.io/service-account-token 3 56m
あとはdeployment-controller
のときの同じ方法でTokenを取得し、ログインします。
無事、警告が解消されました。
これで、どのリソースも閲覧することができるようになります。
お疲れ様でした。