事象
ブラウザで以下のURLにアクセスします。
http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
そうすると
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "no endpoints available for service \"https:kubernetes-dashboard:\"",
"reason": "ServiceUnavailable",
"code": 503
}
というレスポンスが返ってきました。GCPの管理コンソールから gihyo のクラスタのワークロード kubernetes-dashboard を見ると、ステータスが NG になっており、ダッシュボード Does not have minimum availability というメッセージが表示されていました。
対処
自分のメールアドレスを管理者として登録
gcloudの認証が完了している前提になります。以下のコマンドを実行
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user $(gcloud config get-value account) clusterrolebinding.rbac.authorization.k8s.io/cluster-admin-binding created
管理者権限の追加
- service-account.yaml
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
ログイン時に管理者権限のトークンを発行
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-9dkb5
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=admin-user
kubernetes.io/service-account.uid=ab006c5f-3ce6-11e9-9e1c-42010a920134
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1119 bytes
namespace: 11 bytes
token:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....(略)
上記をすると、ログインできるようになりました。