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. [Exempt namespaces] フィールドに、有効な Namespace のリストを入力します。これらの Namespace 内のオブジェクトは、すべてのポリシーで無視されます。この時点で Namespace が存在している必要はありません。
  5. [変更を保存] をクリックします。

gcloud Policy Controller

アドミッション Webhook によって適用から除外される Namespace のリストに Namespace を追加するには、次のコマンドを実行します。

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

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

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

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

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

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

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

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