Policy Controller から Namespace を除外する

このページでは、Policy Controller で除外する Namespace の構成方法について説明します。

除外する Namespace では、Policy Controller を使用したアドミッション Webhook の適用対象から Namespace は除外されますが、違反があれば今後も監査で報告されます。Namespace を構成しない場合は、gatekeeper-system Namespace のみが、Policy Controller アドミッション Webhook の適用対象外として事前構成されます。

除外する Namespace を構成する

除外する Namespace を構成すると、admission.gatekeeper.sh/ignore ラベルを適用して、Policy Controller アドミッション Webhook の適用から Namespace を除外できます。除外可能な Namespace を後で削除しても、Policy Controller は Namespace から admission.gatekeeper.sh/ignore ラベルを削除しません。

Namespace を適用の対象外にする

Namespace の除外は Policy Controller のインストール中またはインストール後に行えます。次のプロセスは、インストール後に Namespace を除外する方法を示しています。

コンソール

  1. Google Cloud コンソールで、[体制の管理] セクションの GKE Enterprise [ポリシー] ページに移動します。

    [ポリシー] に移動

  2. [設定] タブのクラスタ テーブルで、[構成を編集] 列にある [編集] を選択します。
  3. [Policy Controller の構成を編集] メニューを開きます。
  4. [名前空間の除外] フィールドに、有効な名前空間のリストを入力します。これらの名前空間内のオブジェクトは、すべてのポリシーで無視されます。現時点で名前空間が存在している必要はありません。
  5. [Save Changes] を選択します。

gcloud Policy Controller

Admission Webhook によって適用から除外される名前空間のリストに名前空間を追加するには、次のコマンドを実行します。

  gcloud container fleet policycontroller update \
    --memberships=MEMBERSHIP_NAME \
    --exemptable-namespaces=[NAMESPACE_LIST]

次のように置き換えます。

  • MEMBERSHIP_NAME: 名前空間を除外する登録済みクラスタのメンバーシップ名。複数のメンバーシップをカンマで区切って指定できます。
  • NAMESPACE_LIST: Policy Controller の適用対象から除外する名前空間のカンマ区切りリスト。

このコマンドは、Admission Webhook からのみリソースを除外します。リソースは引き続き監査されます。代わりに、名前空間を監査から除外するには、ポリシー バンドルレベルで除外を設定します。

  gcloud container fleet policycontroller content bundles set BUNDLE_NAME \
    --memberships=MEMBERSHIP_NAME \
    --exempted-namespaces=[NAMESPACE_LIST]

次のように置き換えます。

  • BUNDLE_NAME は、除外された名前空間で更新するポリシー バンドルの名前に置き換えます。
  • MEMBERSHIP_NAME: 名前空間を除外する登録済みクラスタのメンバーシップ名。複数のメンバーシップをカンマで区切って指定できます。
  • NAMESPACE_LIST: Policy Controller の適用対象から除外する名前空間のカンマ区切りリスト。

gcloud ConfigManagement

  1. Namespace の適用を解除するには、次のように spec.policyController.exemptableNamespaces に Namespace の名前を追加します。

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        exemptableNamespaces: ["NAMESPACE_NAME"]
    ...
    

    NAMESPACE_NAME は、適用から除外する Namespace の名前に置き換えます。

    複数の Namespace を除外することもできます。たとえば、Namespace not-applicablealso-not-applicable を追加するには、次のマニフェストを適用します。

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        exemptableNamespaces: ["not-applicable","also-not-applicable"]
    ...
    
  2. 変更を apply-spec.yaml ファイルに追加します。

     gcloud beta container fleet config-management apply \
         --membership=MEMBERSHIP_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    次のように置き換えます。

    • MEMBERSHIP_NAME: この構成を適用する登録済みクラスタを追加します。Google Cloud Console にクラスタを登録した場合、メンバーシップ名はクラスタの名前と同じになります。
    • CONFIG_YAML: apply-spec.yaml ファイルのパスを追加します。
    • PROJECT_ID: プロジェクト ID を追加します。
  3. 除外可能な Namespace にラベルを付けて、Policy Controller のアドミッション Webhook でその内容が適用されないようにします。

    kubectl label namespace NAMESPACE_NAME "admission.gatekeeper.sh/ignore=true"
    

    NAMESPACE_NAME は、適用から除外する Namespace の名前に置き換えます。

適用から除外する Namespace

これらは、Google Kubernetes Engine(GKE)および関連プロダクトで作成される Namespace です。望ましくない影響を避けるために、適用から除外することもできます。

- anthos-creds
- anthos-identity-service
- apigee
- apigee-system
- asm-system
- capi-kubeadm-bootstrap-system
- capi-system
- cert-manager
- cnrm-system
- config-management-monitoring
- config-management-system
- gke-connect
- gke-gmp-system
- gke-managed-cim
- gke-managed-filestorecsi
- gke-managed-metrics-server
- gke-managed-system
- gke-system
- gmp-public
- gmp-system
- hnc-system
- istio-system
- kube-node-lease
- kube-public
- kube-system
- poco-trial
- resource-group-system
- vm-system