Unsafe sysctl を許可する Kubernetes 構成

Unsafe sysctl の許可を制限し、Pod の隔離とノードの安定性を保ってください。

説明

Unsafe sysctl は、カーネルの設定によって Pod の隔離やノードの安定性に影響する可能性があります。必要な性能調整でも、Kubernetes とカーネルのバージョンや、ほかのワークロードへの影響を確認してください。ポリシーで sysctl を許可することと、Pod が実際に値を設定することは異なります。

PodSecurityPolicy は Kubernetes v1.21 で非推奨となり、v1.25 で削除されました。現在のクラスターでは Pod Security Admission やポリシーエンジンで制限してください。

想定される影響

  • 不適切なカーネル調整によって、アプリケーションやノードが不安定になる可能性があります。
  • 隔離の条件によっては、ほかの Pod やノードのリソースに影響する可能性があります。

対処方法

  • 不要な allowed_unsafe_sysctls の許可を削除し、Pod では使用するバージョンで安全と分類された sysctl だけを使用してください。
  • 例外が必要な場合は実際の値と影響を確認し、kubelet の許可リストや専用ノードなどで利用範囲を限定してください。
  • 変更後にワークロードの動作とポリシーの適用を確認してください。

例

従来の PodSecurityPolicy の部分例です。その API とプロバイダーをサポートする過去の環境で、許可リストの違いを示しています。完全なポリシー定義ではありません。

変更前

hcl
resource "kubernetes_pod_security_policy" "policy" {
  metadata {
    name = "terraform-example"
  }

  spec {
    allowed_unsafe_sysctls = ["kernel.msg*"]
  }
}

kernel.msg* 系統の unsafe sysctl を許可します。このポリシー自体が sysctl の値を変更するわけではありません。

変更後

hcl
resource "kubernetes_pod_security_policy" "policy" {
  metadata {
    name = "terraform-example"
  }

  spec {
    privileged                 = false
    allow_privilege_escalation = false
  }
}

Unsafe sysctl の許可を削除しています。privileged と allow_privilege_escalation の制限は別の保護設定です。

参考資料