kube-apiserver から kubelet へのアクセス権を設定する
kubectl
や他Client toolではkube-apiserverへリクエストを投げます。kube-apiserver
ではetcdに格納された情報を基に各worker node(の kubelet
) とやりとりする必要があります。(例えばexec,top,logsなど)
kube-apiserver
から kubelet
の必要なリソースへのアクセス権限を付与する必要があります。
手順
-
ClusterRole
system:kube-apiserver-to-kubelet
を作成rbac.authorization.kubernetes.io/autoupdate
annotations- 起動するたびに、APIサーバーはデフォルトのClusterRoleを不足している権限で更新し、 デフォルトのClusterRoleBindingを不足しているsubjectsで更新します。 これにより、誤った変更をクラスタが修復できるようになり、 新しいKubernetesリリースで権限とsubjectsが変更されても、 RoleとRoleBindingを最新の状態に保つことができます。
kubernetes.io/bootstrapping: rbac-defaults
labels- k8sの既定クラスタロールと既定ロールバインドであることを示す
cat << EOF | kubectl apply --kubeconfig admin.kubeconfig -f - --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:kube-apiserver-to-kubelet annotations: rbac.authorization.kubernetes.io/autoupdate: "true" labels: kubernetes.io/bootstrapping: rbac-defaults rules: - apiGroups: - "" resources: - nodes/proxy - nodes/stats - nodes/log - nodes/spec - nodes/metrics verbs: - "*" EOF
-
Kubernetes
ユーザへsystem:kube-apiserver-to-kubelet
ClusterRoleを紐付けるroleRef
で紐付けたRoleを指定する-
subjects
でRoleを紐付けるAccountを指定するcat << EOF | kubectl apply --kubeconfig admin.kubeconfig -f - --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:kube-apiserver namespace: "" roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:kube-apiserver-to-kubelet subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: Kubernetes EOF
- この紐付けが正しくない、もしくは未設定の場合、token付きでkubectlを利用した場合に以下エラーとなる
Error from server (Forbidden): Forbidden (user=Kubernetes, verb=get, resource=nodes, subresource=proxy) ( pods/log kube-proxy)
- この紐付けが正しくない、もしくは未設定の場合、token付きでkubectlを利用した場合に以下エラーとなる