KubernetesnのNode Authorization

KubernetesのNode Authorizationについて調べただけの、ただのメモです
(kubeadmのドキュメント見てて利用を推奨みたいなことが書いてあったので調べてみた)

Node Autorizationの概要

基本は参考記事で上げた

に紹介されている通りNode (Kubelet) の権限管理をより厳密に行う機能よう

Node Authorizationを有効にしていない場合はどうなってるのかというとDesign Proposalを見ると以下のようになってる

1.6以降、kubeletにはすべてのNodeオブジェクトとPodオブジェクトへの読み取り/書き込みアクセス権があり、すべてのSecret、ConfigMap、PersistentVolumeClaim、PersistentVolumeオブジェクトへの読み取りアクセス権があります。つまり、ノードを危険にさらすと、他のノード、他のノードに属するポッドの変更、およびノー​​ドのポッドに関係のない機密データへのアクセスを許可する認証情報にアクセスできるようになります。

(Design Proposalの内容をGoogle翻訳にかけただけ)

有効にした場合は参考記事でも紹介していただいてる通り

ノードオーソライザー

  • デフォルトのRBAC system:nodeクラスターの役割と同じ固定ポリシーを使用して、識別可能なノードからのリクエストを承認します
  • シークレット、configmap、persistentvolumeclaim、およびpersistentvolumeアクセスをさらに制限して、リクエストを行うノードにバインドされたポッドが参照するオブジェクトの読み取りのみを許可する

ノード入場

  • 識別可能なノードを、自身のノードAPIオブジェクトのみを変更できるように制限する
  • 識別可能なノードを、自分自身にバインドされたミラーポッドを作成できるように制限する
  • 識別可能なノードを、自身にバインドされたミラーポッドのみを変更できるように制限する
  • 識別可能なノードが、APIオブジェクト(シークレット、configmaps、サービスアカウント、永続的なボリュームクレーム)を参照するミラーポッドを作成できないように制限する

追加のAPI検証

  • ノードにバインドされていないミラーポッドを拒否する
  • ミラーポッドアノテーションを削除するポッドの更新を拒否する

となっている(↑もDesign ProposalをGoogle翻訳にかけただけ)

API ServerのデフォルトAuthorization Mode

調べた限りkube-apiserver側でのAuthorization Modeのデフォルト値というのはなさそうな印象(多分)

じゃあkubeadmだとどういうふうに設定されるのかと思って見た所

  • RBAC
  • Node

の2種類だった
https://github.com/kubernetes/kubernetes/blob/release-1.19/cmd/kubeadm/app/phases/controlplane/manifests.go#L222-L225

つまりkubeadmでKubernetesクラスターを構築した際、手動でAuthorization Modeの設定値を変えない限りはデフォルトでNode Autorizationが有効になるよう
(kubeadmでデフォルト有効にしてるということはいろんなクラウドプロバイダーでも普通は有効になってる気がする)

--

--

https://github.com/bells17

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store