Kubernetes the hard way を初学者目線で解説する ~ #10 RBAC for Kubelet Authorization


はじめに

30代未経験からエンジニアを目指して勉強中のYNと申します。
インフラ初学者の私ですが、Kubernetes the hard wayを進めるにあたって、インフラに関する基本的な知識を体系的に学ぶことができました。
そこで、初学者目線での学びなどを本記事にまとめておきたいと思います。

目次

こちらをご覧ください

API-serverからkubeletへのアクセス制御の設定

下図のように、API-serverからkubeletへのアクセス制御を行います。
参考

次の流れとなります。

  • (1) ClusterRoleを定義する
  • (2) ClusterRoleBindingで上記ClusterRoleをkube-apiserverにバインドする

ClusterRoleを定義する

API-serverからkubeletへ送られる一般的なリクエストの種類を定義しています。

master-1.node
cat <<EOF | kubectl apply --kubeconfig admin.kubeconfig -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:kube-apiserver-to-kubelet
rules:
  - apiGroups:
      - ""
    resources:
      - nodes/proxy
      - nodes/stats
      - nodes/log
      - nodes/spec
      - nodes/metrics
    verbs:
      - "*"
EOF

ClusterRoleBindingで上記ClusterRoleをkube-apiserverにバインドする

上記で定義したClusterRolekube-apiserverというuserに許可します。

master-1.node
cat <<EOF | kubectl apply --kubeconfig admin.kubeconfig -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
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: kube-apiserver
EOF