テックカリキュラム

API ServerフラグとAdmission Plugin設定 ── KubernetesのAdmission制御を司る内部メカニズム

API ServerフラグとAdmission Plugin設定 ── KubernetesのAdmission制御を司る内部メカニズム

はじめに

Kubernetesのセキュリティ・ガバナンスを理解するには、単にWebhookやPSA(Pod Security Admission)を知るだけでは不十分です。 実際には、Kubernetes API Serverが複数のAdmission Pluginsを組み合わせて動作し、それらの有効化はAPI Serverフラグによって制御されています。

今回の記事では、以下の観点からAPI ServerフラグとAdmission Pluginの設定・内部構造を詳細に解説します。

  • API ServerのAdmission Plugin有効化フラグ
  • Admission chain(順序)の内部動作
  • PodSecurity(PSA)の有効化方法
  • WebhookのEnablementとConfigurationフロー
  • プラグイン間の依存関係と注意点

1. Admission Pluginsとは?

Admission Pluginsは、Kubernetes API Serverがリクエストを処理する際に実行するミドルウェア的な検証ステップです。

プラグインの種類

  • Validating Plugins(拒否可能)
  • Mutating Plugins(オブジェクト書き換え)

例:代表的なAdmission Plugins

  • PodSecurity(PSA)
  • MutatingAdmissionWebhook
  • ValidatingAdmissionWebhook
  • NamespaceLifecycle
  • LimitRanger
  • ResourceQuota

これらは API Server 起動時のフラグで有効化されます。


2. API Serverフラグ:Admission関連の基本設定

API Serverの主要なAdmission制御フラグは以下です:

 --enable-admission-plugins --disable-admission-plugins --admission-control-config-file 

例:Kubeadm環境での起動設定

通常、以下のファイルに設定します:

/etc/kubernetes/manifests/kube-apiserver.yaml 

抜粋:

... spec: containers: - command: - kube-apiserver - --enable-admission-plugins=PodSecurity,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,LimitRanger,ResourceQuota - --admission-control-config-file=/etc/kubernetes/admission/config.yaml ... 

3. Pod Security Admission(PSA)の内部Enablement

PSAは Kubernetes v1.23+ で追加された Built-in Admission Plugin です。

有効化フラグ:

 --enable-admission-plugins=PodSecurity 

PSAが有効になったAPI Serverは NamespaceのPSSラベルを参照し、PodのSpecをチェックします。

PSAは以下の順序で必ず実行される

 Mutating Webhooks → PodSecurity → Validating Webhooks 

この順序は固定で、ユーザーが変更することはできません。


4. Admission chain の内部順序

Kubernetesでは Admission Plugins が以下の順序で実行されます:

Mutatingフェーズ

 1. NamespaceLifecycle 2. MutatingAdmissionWebhook 3. (他のMutating Plugins) 

Validatingフェーズ

 1. PodSecurity 2. ValidatingAdmissionWebhook 3. ResourceQuota 4. (他のValidating Plugins) 

この順序はクラスタのセキュリティ挙動に大きく影響します。


5. Webhookの有効化に必要なフラグ

Webhookを有効化するには、以下のAdmission Pluginsが必要です:

 --enable-admission-plugins=MutatingAdmissionWebhook,ValidatingAdmissionWebhook 

同時に、API Serverは TLS を要求するため、証明書も必要です。

実際の設定例:

 --admission-control-config-file=/etc/kubernetes/admission/webhook-config.yaml --client-ca-file=/etc/kubernetes/pki/ca.crt 

Webhookを使用しないと Gatekeeper・Kyverno は動作しません。


6. admission-control-config-file の詳細

Webhookの失敗時挙動などは設定ファイルで定義します。

apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration plugins: - name: ValidatingAdmissionWebhook configuration: apiVersion: apiserver.config.k8s.io/v1 kind: WebhookAdmission timeoutSeconds: 5 failurePolicy: Fail 

設定可能項目:

  • timeoutSeconds
  • failurePolicy
  • matchPolicy
  • namespaceSelector

7. disable-admission-plugins の注意点

以下のプラグインは絶対に無効化してはいけません:

  • NamespaceLifecycle
  • ServiceAccount
  • NodeRestriction
  • LimitRanger
  • ResourceQuota

これらを disable するとクラスタが壊れます。

例(悪い例):

 --disable-admission-plugins=NamespaceLifecycle # 絶対ダメ! 

8. API Serverフラグとコンポーネントの依存関係

Admission Plugins は API Server に完全依存します。Controller Manager や Scheduler では設定しません。

依存関係まとめ:

機能依存コンポーネント
PSAAPI Server
WebhookAPI Server(TLS必須)
ResourceQuotaAPI Server + Controller Manager
Defaulting(mutate)API Server

9. 実務での推奨設定まとめ

本番クラスタでは以下が必須です:

 --enable-admission-plugins=PodSecurity,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,LimitRanger,ResourceQuota,ServiceAccount,NodeRestriction --admission-control-config-file=/etc/kubernetes/admission/config.yaml --client-ca-file=/etc/kubernetes/pki/ca.crt 

さらに:

  • PSA → ベースラインセキュリティ
  • Webhook(Gatekeeper/Kyverno) → 拡張ルール
  • ResourceQuota → 資源制限
  • LimitRanger → defaultリソース制限

つまり、API Serverフラグはクラスタガバナンスの根幹です。


まとめ

  • Admission PluginsはAPI Serverのミドル層として動作
  • フラグでEnable/Disable可能(依存関係に要注意)
  • PSS / PSAはBuilt-in Pluginとして固定順序で実行
  • WebhookはMutating→PSA→Validatingの順序で評価
  • 設定ファイルでtimeout・failurePolicyを制御可能

API Serverフラグを理解することで、Kubernetesセキュリティの全体像が一段深く見えるようになります。