このトピックでは、Tanzu Kubernetes Grid (TKG) によって展開されたワークロード クラスタを保護するようにポッド セキュリティ アドミッション (PSA) コントローラを構成する方法について説明します。
Kubernetes v1.23 以降を実行しているクラスタまたはクラスタ内の名前空間の場合、TKG はポッド セキュリティ アドミッション (PSA) コントローラを介して、privileged、baseline、restricted タイプのポッド セキュリティ ポリシーの適用をサポートします。
Kubernetes の PSA コントローラを使用すると、次の 2 つの軸に沿ってワークロード セキュリティ ポリシーを構成できます。
privileged、baseline、restricted となります。warn は警告を出力し、audit は監査ログ エントリを追加し、enforce はポッドの作成をブロックします。PSA コントローラは、特定の名前空間またはクラスタ全体で動作するように構成できます。たとえば、クラスタを構成して、baseline ポッドがセキュリティ ポリシーに違反した場合は監査ログをトリガし、restricted ポッドがポリシーに違反している場合はそれをブロックすることができます。
詳細については、Kubernetes ドキュメントの「ポッドのセキュリティ標準」を参照してください。
PSA システムは、Kubernetes v1.25 リリース ノートで説明されるように、Kubernetes v1.21 で廃止され、v1.25 で削除されたポッドのセキュリティ ポリシー (PSP) を置き換えます。
ノードの PSP は、Kubernetes において廃止されたことを踏まえて、TKG v2.1 では廃止になりました。ポッドを PSP から PSA コントローラに移行する方法については、「PodSecurityPolicy から組み込みのポッド セキュリティ アドミッション コントローラへの移行」を参照してください。
TKG ワークロード クラスタのデフォルトの PSA 設定は、実行している Kubernetes バージョンによって異なります。
warn モードと audit モード:restrictedenforce モード:設定なしwarn モードと audit モード:baselineenforce モード:設定なしTKG 2.3、v2.2、および v2.1 でネイティブの Kubernetes バージョンを実行しているクラスタのデフォルトの PSA 設定では、ポリシー違反に関する警告が生成されても、PSP から PSA への移行中にポッドが引き続き実行されるようにします。
TKG v2.2 以降では、すべての内部 TKG コンポーネントが PSA の restricted プロファイルに準拠します。
クラスタ全体の PSA を使用して新しいクラスタを構成することも、既存のクラスタの PSA を変更することもできます。
新しいワークロード クラスタにクラスタ全体の PSA を構成するには、クラスタ構成ファイルの POD_SECURITY_STANDARD_DEACTIVATED を false に設定し、他の POD_SECURITY_STANDARD_* 変数を「構成ファイル変数リファレンス」の「ポッドのセキュリティ標準」の表に従って設定します。
POD_SECURITY_STANDARD_DEACTIVATEDPOD_SECURITY_STANDARD_AUDITPOD_SECURITY_STANDARD_WARNPOD_SECURITY_STANDARD_ENFORCEまた、「クラスベースのクラスタを作成する」で説明されている 2 段階のプロセスの手順 1 としてクラスタ マニフェストを生成し、次に以下の「既存のクラスベース クラスタの PSA の変更」に従って Cluster 仕様の podSecurityStandard 変数値を編集してから、手順 2 でクラスタを作成することもできます。
既存のクラスベースのクラスタの PSA 構成を変更するには、次の手順を実行します。
エディタで Cluster オブジェクト仕様を開きます。
kubectl edit -namespace NAMESPACE CLUSTER
spec.topology.variables の下の podSecurityStandard ブロックの値を編集します。
- name: podSecurityStandard
value:
deactivated: DEACTIVATED
audit: AUDIT-PROFILE
enforce: ENFORCE-PROFILE
warn: WARN-PROFILE
auditVersion: AUDIT-VERSION
enforceVersion: ENFORCE-VERSION
warnVersion: WARN-VERSION
exemptions:
namespaces: [EXEMPT-NS]
ここで、
DEACTIVATED はクラスタ全体の PSA を適用する場合は false、それ以外の場合は true です。AUDIT-PROFILE、ENFORCE-PROFILE、WARN-PROFILE は各モードの PSA プロファイルで、"privileged"、"baseline"、または "restricted" のいずれかになります。デフォルトは "privileged" です。VERSION 値は、3 つのモードの Kubernetes バージョンです("v1.26" など)。EXEMPT-NS は、PSA コントロールから除外する名前空間のカンマ区切りのリストです。注:システム名前空間
kube-systemおよびtkg-systemは常に PSA コントロールから除外されます。
Cluster オブジェクト仕様を適用すると、変更はクラスタの制御プレーン ノードにロールアウトされます。既存のレガシー クラスタの PSA 構成を変更するには、次の手順を実行します。
現在の AdmissionConfiguraton 仕様ファイルを KubeadmControlPlane オブジェクトから取得し、ローカルに保存します。例:
kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
admission-config.yaml ファイルを新しい構成に編集します。たとえば、次の例では、enforce を baseline に設定し、audit モードと warn モードを restricted のままにします。
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "baseline"
enforce-version: "v1.24"
audit: "restricted"
audit-version: "v1.24"
warn: "restricted"
warn-version: "v1.24"
exemptions:
usernames: []
runtimeClasses: []
namespaces: ["kube-system", "tkg-system"]
KubeadmControlPlane オブジェクト仕様を編集し、spec.kubeadmConfigSpec.files の配列エントリを新しい構成ファイルに置き換えます。
KubeadmControlPlane オブジェクト仕様を適用すると、変更はクラスタの制御プレーン ノードにロールアウトされます。
PSA を追加または変更する前に、PSA のクラスタまたは名前空間内のすべての既存のワークロードが新しいポリシー設定に準拠していることを確認することで、予期しないダウンタイムを回避します。
既存の名前空間で実行されているポッドが特定のポリシーに準拠しているかどうかを評価するには、kubectl label --overwrite --dry-run=server を実行します。
kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>
同じ情報は、ポッド セキュリティ アドミッションの audit モードを構成するときに監査ログに書き込まれます。または、リソースをクラスタに適用して warn モードを構成するときに提供されます。
ポッド セキュリティのさまざまなプロファイルに関する最新情報は、Kubernetes のドキュメントで確認できます。