Policy Controller のインストール

このページでは、Policy Controller をインストールする方法について説明します。Policy Controller は、セキュリティ、規制、ビジネスルールに関連するポリシーへのクラスタの遵守を確認、監査、適用する Kubernetes アドミッション コントローラです。

始める前に

作業を始める前に、次のことを確認してください。

  • この手順で使用する gcloudgsutilkubectlnomos コマンドを含む Cloud SDK をインストールして初期化します。Cloud Shell を使用する場合、Cloud SDK がプリインストールされています。

  • Anthos Config Management を使用して Policy Controller をインストールするには、Anthos の使用権が必要です。詳細については、Anthos の設定をご覧ください。

  • Config Sync がインストール済みの 1.14.x 以降のバージョンの Kubernetes を実行しているクラスタがあります。1.14.x よりも前のバージョンの Kubernetes で Policy Controller が実行されているように見える場合もありますが、プロダクトは正しく動作しません。

Policy Controller のインストール

次の手順に沿って、Anthos Config Management を構成し、Policy Controller の動的アドミッション コントローラをクラスタにインストールします。

Console

Cloud Console で Policy Controller を構成するには、次の手順を行います。

  1. Google Cloud Console の Anthos Config Management メニューにアクセスします。

    Anthos Config Management メニューにアクセス

  2. Policy Controller を有効にするクラスタを選択し、[設定] をクリックします。

  3. [クラスタ用の ACM 設定] 見出しをクリックします。

  4. [Policy Controller] 見出しで、[Policy Controller を有効にする] チェックボックスをオンにします。

    1. 一般的なポリシータイプの制約テンプレートのライブラリをインストールする場合は、[デフォルトのテンプレート ライブラリをインストールする] チェックボックスをオンのままにします。
    2. [監査間隔] フィールドで、連続する同期の間隔(秒)を選択します。デフォルトは 60 秒です。監査間隔を 0 に設定すると、監査は無効になります。
    3. [名前空間の除外] フィールドに、有効な名前空間のリストを入力します。これらの名前空間内のオブジェクトは、すべてのポリシーで無視されます。現時点で名前空間が存在する必要はありません。
    4. [現在評価されているオブジェクト以外のオブジェクトを参照する制約テンプレートの使用能力を有効にする] チェックボックスをオンにして、参照の制約を有効にします。参照の制約について詳しくは、参照制約の有効化をご覧ください。
  5. [完了] をクリックします。Anthos Config Management メニューに戻ります。

gcloud

次の手順に沿って、Anthos Config Management を構成し、Policy Controller の動的アドミッション コントローラをクラスタにインストールします。

デフォルトでは、Policy Controller は一般的なポリシータイプの制約テンプレートのライブラリをインストールします。制約テンプレートのインストールをスキップするには、マニフェストの templateLibraryInstalled で始まる行のコメント化を解除します。

  1. Anthos Config Management の構成ファイル内で spec.policyController オブジェクト内の enabled の値を true に設定します。

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # Uncomment to enable support for referential constraints
        # referentialRulesEnabled: true
        # Uncomment to disable audit, adjust value to set audit interval
        # auditIntervalSeconds: 0
        # Uncomment to log all denies and dryrun failures
        # logDeniesEnabled: true
        # Uncomment to exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
      # ...other fields...
    

    参照制約のサポートは、デフォルトで無効になっています。有効にする前に、結果整合性に関する注意事項を必ず理解してください。

  2. config-management.yaml ファイルを適用します。

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    以下のように置き換えます。

    • CLUSTER_NAME: この構成を適用する登録済みクラスタを追加します。
    • CONFIG_YAML: config-management.yaml ファイルのパスを追加します。
    • PROJECT_ID: プロジェクト ID を追加します。

Pod が作成され、Policy Controller が制約の確認と適用を開始します。

kubectl

デフォルトでは、Policy Controller は一般的なポリシータイプの制約テンプレートのライブラリをインストールします。制約テンプレートのインストールをスキップするには、マニフェストの templateLibraryInstalled で始まる行のコメント化を解除します。

  1. Anthos Config Management の構成ファイル内で spec.policyController オブジェクト内の enabled の値を true に設定します。

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # Uncomment to enable support for referential constraints
        # referentialRulesEnabled: true
        # Uncomment to disable audit, adjust value to set audit interval
        # auditIntervalSeconds: 0
        # Uncomment to log all denies and dryrun failures
        # logDeniesEnabled: true
        # Uncomment to exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
      # ...other fields...
    

    参照制約のサポートは、デフォルトで無効になっています。有効にする前に、結果整合性に関する注意事項を必ず理解してください。

  2. kubectl apply を使用して構成を適用します。

    kubectl apply -f config-management.yaml
    

Pod が作成され、Policy Controller が制約の確認と適用を開始します。

限定公開クラスタへの Policy Controller のインストール

Google Kubernetes Engine(GKE)の限定公開クラスタに Policy Controller をインストールする場合は、追加の手順を行ってインストールを完了する必要があります。ファイアウォールは限定公開クラスタで、コントロール プレーンがポート 8443 のノードに到達することをブロックします。ポート 8443 は、コントロール プレーンが Policy Controller への接続を試みる場所です。ファイアウォール ルールを作成すると、コントロール プレーンがポート 8443(または他の任意のカスタムポート)に到達できるようになります。また、特権ポート 443 で Pod を実行させることもできます。詳細については、Gatekeeper ドキュメントの 限定公開 GKE クラスタノードで実行するをご覧ください。

インストールの確認

Policy Controller が正しくインストールされている場合、その Pod が実行されます。Pod が使用可能になるまでに Pod が数回再起動される場合があります。

Pod のステータスを表示するには、次のコマンドを実行します。

kubectl get pods -n gatekeeper-system

出力は次の例のようになります。

NAME                              READY   STATUS    RESTARTS   AGE
gatekeeper-controller-manager-0   1/1     Running   1          53s

制約テンプレート ライブラリはデフォルトでインストールされます。完了までに数分かかることがあります。テンプレート ライブラリがインストールされていることを確認するには、すべての ConstraintTemplate オブジェクトを一覧表示します。

kubectl get constrainttemplates

出力は次の例のようになります。

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

個々の制約テンプレートが正しくインストールされている場合、その status.created フィールドは true です。

Anthos Config Management を使用した Policy Controller の操作

Anthos Config Management は、Policy Controller の実行に不可欠なリソースを管理します。Anthos Config Management と Policy Controller の間の競合を避けるため、Anthos Config Management リポジトリに保存する内容に注意してください。

Policy Controller を使用する際は、次の点を考慮してください。

  • 制約テンプレート ライブラリを無効にしない限り、テンプレート ライブラリの一部でもある制約テンプレートを同期することはできません。

  • gatekeeper-system 名前空間に格納されている config リソースを同期するには、名前空間がリポジトリで未定義であるか、Anthos Config Management がインストールする構成に一致する必要があります。

  • 信頼できるソースのリポジトリから gatekeeper-system 名前空間を削除すると、Anthos Config Management で復元できない場合があります。復元するには、Policy Controller の有効な Webhook 構成を削除します。

制約テンプレート ライブラリの管理

制約テンプレート、制約テンプレートに関連付けられた制約、もしくは制約テンプレート ライブラリのアンインストールまたは再インストールについては、制約の作成をご覧ください。

名前空間への適用の除外

名前空間内のオブジェクトを無視するように Policy Controller を構成できます。詳細については、Policy Controller からの名前空間の除外をご覧ください。

Policy Controller のバージョンの表示

Gatekeeper ポリシー コントローラが使用しているバージョンを表示するには、次のコマンドを実行してイメージタグを表示します。

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

Anthos Config Management バージョン 1.3.2 以降では、Gatekeeper のビルドに使用される Git タグ(またはハッシュ)と Anthos Config Management のバージョン番号がイメージタグに次のように含まれます。

.../gatekeeper:version-number-git-tag.gbuild-number

たとえば、次のイメージの場合:

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 はバージョン番号です。
  • 480baacは Git タグです。
  • 0 はビルド番号です。

また、リリース バージョン マトリックスで、対応するマニフェスト、インストール、nomos バイナリ バージョンとともに、すべての Anthos Config Management バージョンのリストを確認できます。

Policy Controller のアップグレード

Anthos Config Management をアップグレードすると、Policy Controller がアップグレードされます。

Anthos Config Management をアップグレードするには、Google Cloud Console または kubectl を使用します。アップグレードを行う前に、リリースノートで具体的な手順をご確認ください。

Console

  1. Cloud Console で、Anthos Config Management のページに移動します。

    Anthos Config Management に移動

  2. アップグレードするクラスタを選択します。

  3. [構成] をクリックします。

  4. [クラスタの ACM 設定] をクリックします。

  5. [バージョン] プルダウンから、アップグレードするバージョンを選択します。

  6. [完了] をクリックします。

kubectl

登録されているクラスタごとに、以下のコマンドを実行します。

  1. 新しいバージョンの Anthos Config Management マニフェストと nomos コマンドをダウンロードします。

  2. Anthos Config Management マニフェストを適用します。

    kubectl apply -f config-management-operator.yaml
    

    このコマンドにより、Anthos Config Management イメージが更新されます。Kubernetes によって新しいバージョンが取得され、新しいバージョンを使用して Anthos Config Management Pod が再起動されます。Anthos Config Management が起動すると、新しいイメージにバンドルされたマニフェストのセットを適用する調整ループが実行されます。これにより、各コンポーネントの Pod が更新され、再起動されます。

  3. すべてのクライアントの nomos または nomos.exe コマンドを新しいバージョンに置き換えます。この変更により、nomos コマンドを実行して、登録済みのすべてのクラスタのステータスを確実に取得し、構成ファイルを検証できるようになります。

Policy Controller のアンインストール

クラスタから Policy Controller をアンインストールする手順は次のとおりです。

Console

クラスタで Policy Controller を無効にするには、次のタスクを実行します。

  1. Google Cloud Console の Anthos Config Management メニューにアクセスします。

    Anthos Config Management メニューにアクセス

  2. Policy Controller を無効にするクラスタを選択します。

  3. [構成] をクリックします。

  4. [クラスタ用の ACM 設定] 見出しをクリックします。

  5. [Policy Controller] で、[Policy Controller] チェックボックスをオフにします。

  6. [完了] をクリックします。

gcloud

Policy Controller をアンインストールするには:

  1. config-management.yaml ファイルで Anthos Config Management の構成を編集し、policyController.enabledfalse に設定します。

  2. config-management.yaml ファイルに変更を適用します。

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    以下のように置き換えます。

    • CLUSTER_NAME: この構成を適用する登録済みクラスタを追加します。
    • CONFIG_YAML: config-management.yaml ファイルのパスを追加します。
    • PROJECT_ID: プロジェクト ID を追加します。

Anthos Config Management が policycontroller.configmanagement.gke.io ファイナライザを削除すると、アンインストールは完了です。

kubectl

Policy Controller をアンインストールするには、config-management.yaml ファイルで Anthos Config Management の構成を編集し、policyController.enabledfalse に設定します。Anthos Config Management が policycontroller.configmanagement.gke.io ファイナライザを削除すると、アンインストールは完了です。

Anthos Config Management を完全にアンインストールする場合は、クラスタから Config Sync をアンインストールするをご覧ください。

次のステップ