説明
ワークロードの securityContext.sysctls とノードの許可設定で unsafe sysctl を使用すると、Pod 間の分離やノードの安定性に影響する場合があります。一般的なアプリケーションでは、使用する Kubernetes と Linux カーネルのバージョンでサポートされる安全な sysctl を優先してください。
unsafe sysctl は既定で無効であり、対象ノードで明示的に許可する必要があります。従来の PodSecurityPolicy の allowedUnsafeSysctls も許可範囲を広げます。PSP は Kubernetes 1.21 で非推奨となり、1.25 で削除されたため、現在のクラスターでは Pod Security Admission などのアドミッションポリシーで制限してください。
想定される影響
- 不適切なカーネル設定がコンテナーの動作やノードの安定性に影響する場合があります。
- 同じノードの別の Pod が、リソース不足や分離の弱体化の影響を受ける可能性があります。
- 許可されていない sysctl を要求する Pod は起動できず、サービスの開始に失敗する場合があります。
対処方法
- 不要な unsafe sysctl の要求と許可設定を削除してください。安全な sysctl でも、対応バージョンと必要な値を確認してください。
- 例外が不可欠な場合は影響を検証し、専用ノードとスケジューリングの制限で使用範囲を絞ってください。
- 変更後に Pod の起動、リソース使用量、他のワークロードの正常動作を確認してください。
例
次の例は Deployment の sysctl 設定を比較します。イメージと実行コマンドは実際のアプリケーションに合わせて設定してください。
変更前
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-app
spec:
selector:
matchLabels:
app: test-app
template:
metadata:
labels:
app: test-app
spec:
securityContext:
sysctls:
- name: kernel.sem
value: "128 32768 128 4096"
containers:
- name: test-ubuntu
image: ubuntu
kernel.sem は unsafe sysctl です。ノードで明示的に許可しないと Pod は起動しません。許可する前に、リソースと分離への影響を確認する必要があります。
変更後
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-app-neg
spec:
selector:
matchLabels:
app: test-app-neg
template:
metadata:
labels:
app: test-app-neg
spec:
securityContext:
sysctls:
- name: kernel.shm_rmid_forced
value: "0"
- name: net/ipv4/tcp_syncookies
value: "1"
containers:
- name: test-ubuntu
image: ubuntu
どちらも Kubernetes の安全な sysctl の一覧に含まれる設定です。名前に / を使う表記は Kubernetes 1.25 以降でサポートされます。値がアプリケーションの要件に合っていることも確認してください。