このトピックでは、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
モード:restricted
enforce
モード:設定なしwarn
モードと audit
モード:baseline
enforce
モード:設定なし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_DEACTIVATED
POD_SECURITY_STANDARD_AUDIT
POD_SECURITY_STANDARD_WARN
POD_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 のドキュメントで確認できます。