デフォルトポッドセキュリティ標準

この文書は、RKE2がデフォルトで安全でありながら、オペレーターに最大の構成柔軟性を提供するために、`PodSecurityStandards`と`NetworkPolicies`をどのように構成するかを説明します。

バージョンゲート

この文書はRKE2 v1.25以降に適用されます。RKE2 v1.24以前のデフォルトポリシー情報については、ポッドセキュリティポリシーのドキュメントを参照してください。

ポッドセキュリティ標準

Kubernetesバージョンv1.25.0から、ポッドセキュリティポリシー(PSP)はKubernetesから完全に削除され、 ポッドセキュリティアドミッション(PSA)に置き換えられます。デフォルトのポッドセキュリティアドミッション設定ファイルは、起動時にクラスターに追加されます。

`profile: cis`または`profile: cis-1.23`設定で実行している場合:

  • RKE2は、設定ファイルを介して制限されたポッドセキュリティ標準を適用し、クラスター全体で`restricted`モードを強制しますが、システムポッドの正常な動作を確保するために`kube-system`、cis-operator-system、および`tigera-operator`のネームスペースには例外を設けます。

`profile`設定なしで実行している場合:

  • RKE2は、設定ファイルを介して制限のないポッドセキュリティ標準を適用し、クラスター全体で`privileged`モードを強制し、クラスター内のすべてのポッドに完全に制限のないモードを許可します。

RKE2はこの設定ファイルを`/etc/rancher/rke2/rke2-pss.yaml`に配置します。設定ファイルの内容は、RKE2を起動したCISモードによって異なります:

  • CISモード

    apiVersion: apiserver.config.k8s.io/v1
    kind: AdmissionConfiguration
    plugins:
    - name: PodSecurity
      configuration:
        apiVersion: pod-security.admission.config.k8s.io/v1beta1
        kind: PodSecurityConfiguration
        defaults:
          enforce: "restricted"
          enforce-version: "latest"
          audit: "restricted"
          audit-version: "latest"
          warn: "restricted"
          warn-version: "latest"
        exemptions:
          usernames: []
          runtimeClasses: []
          namespaces: [kube-system, cis-operator-system, tigera-operator]
  • 非CISモード

    apiVersion: apiserver.config.k8s.io/v1
    kind: AdmissionConfiguration
    plugins:
    - name: PodSecurity
      configuration:
        apiVersion: pod-security.admission.config.k8s.io/v1beta1
        kind: PodSecurityConfiguration
        defaults:
          enforce: "privileged"
          enforce-version: "latest"
        exemptions:
          usernames: []
          runtimeClasses: []
          namespaces: []

この設定ファイルを配置した後、RKE2は次のフラグ`--admission-control-config-file`を使用してkube-apiserverを起動し、これはPSA設定ファイルのパスに設定されます。

デフォルトのポッドセキュリティ標準設定ファイルを上書きしたい場合は、`pod-security-admission-config-file: <path-to-custom-psa-config-file>`をRKE2設定ファイルに渡すことができます。

ネットワークポリシー

RKE2が`profile: cis-1.23`パラメータで実行されると、kube-systemkube-public、および`default`のネームスペースに2つのネットワークポリシーを適用し、関連するアノテーションを適用します。これらのポリシーとアノテーションに対しても、PSPと同じ論理が適用されます。起動時に、各ネームスペースのアノテーションの存在が確認され、存在する場合、RKE2は何のアクションも取らない。アノテーションが存在しない場合、RKE2はポリシーの存在を確認し、存在する場合は再作成します。

最初に適用されるポリシーは、ネットワークトラフィックをネームスペース自体のみに制限することです。以下を参照してください。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  managedFields:
  - apiVersion: networking.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:spec:
        f:ingress: {}
        f:policyTypes: {}
  name: default-network-policy
  namespace: default
spec:
  ingress:
  - from:
    - podSelector: {}
  podSelector: {}
  policyTypes:
  - Ingress

次に適用されるポリシーは、kube-system ネームスペースに対して行われ、DNSトラフィックを許可します。以下を参照してください。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  managedFields:
  - apiVersion: networking.k8s.io/v1
    fieldsV1:
      f:spec:
        f:ingress: {}
        f:podSelector:
          f:matchLabels:
        f:policyTypes: {}
  name: default-network-dns-policy
  namespace: kube-system
spec:
  ingress:
  - ports:
    - port: 53
      protocol: TCP
    - port: 53
      protocol: UDP
  podSelector:
    matchLabels:
  policyTypes:
  - Ingress

RKE2は、すべてのビルトインネームスペースに`default-network-policy`ポリシーと`np.rke2.io`アノテーションを適用します。kube-system ネームスペースには、さらに`default-network-dns-policy`ポリシーと`np.rke2.io/dns`アノテーションが適用されます。

システムに現在展開されているネットワークポリシーを表示するには、以下のコマンドを実行してください:

kubectl get networkpolicies -A