2.5. ポリシーコンプライアンス履歴 (テクノロジープレビュー)
ポリシーコンプライアンス履歴 API は、Red Hat Advanced Cluster Management for Kubernetes のポリシーコンプライアンスイベントをクエリー可能な形式で長期間保存する場合に使用できる、オプションのテクニカルプレビュー機能です。この API を使用すると、spec フィールドなどの追加の詳細を取得して、ポリシーを監査およびトラブルシューティングできます。また、ポリシーが無効化されたりクラスターから削除されたりしたときに、コンプライアンスイベントを取得できます。ポリシーコンプライアンス履歴 API は、監査とトラブルシューティングに役立つ、ポリシーコンプライアンスイベントのコンマ区切り値 (CSV) スプレッドシートを生成することもできます。
ポリシーコンプライアンス履歴 API は、さらなる監査とトラブルシューティングのために、ポリシーコンプライアンスイベントのコンマ区切り値 (CSV) スプレッドシートを生成することもできます。
2.5.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
ポリシーコンプライアンス履歴 API には、バージョン 13 以降の PostgreSQL サーバーが必要です。
Red Hat がサポートする方式は、
registry.redhat.io/rhel9/postgresql-15コンテナーイメージ、registry.redhat.io/rhel8/postgresql-13コンテナーイメージ、postgresql-serverRPM、またはpostgresql/serverモジュールの使用です。各方式のセットアップと設定は、該当する Red Hat 公式ドキュメントを確認してください。ポリシーコンプライアンス履歴 API は、あらゆる標準 PostgreSQL と互換性があり、Red Hat が公式にサポートする製品に限定されません。- この PostgreSQL サーバーには、Red Hat Advanced Cluster Management ハブクラスターからアクセスできる必要があります。PostgreSQL サーバーがハブクラスターの外部で実行されている場合は、ハブクラスターが PostgreSQL サーバーのポート 5432 に接続できるように、ルーティングとファイアウォールの設定を確認してください。このポートは、PostgreSQL 設定で上書きされている場合、異なる値である場合があります。
2.5.2. コンプライアンス履歴 API の有効化 リンクのコピーリンクがクリップボードにコピーされました!
ポリシーコンプライアンスイベントを API に記録するようにマネージドクラスターを設定します。これは、すべてのクラスターまたはクラスターのサブセットで有効にできます。以下の手順を実行します。
PostgreSQL サーバーをクラスター管理者として設定します。Red Hat Advanced Cluster Management ハブクラスターに PostgreSQL をデプロイした場合は、
psqlコマンドを使用するために PostgreSQL ポートを一時的にポート転送します。以下のコマンドを実行します。oc -n <PostgreSQL namespace> port-forward <PostgreSQL pod name> 5432:5432
oc -n <PostgreSQL namespace> port-forward <PostgreSQL pod name> 5432:5432Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のターミナルで、次のようなコマンドを使用して PostgreSQL サーバーにローカルで接続します。
psql 'postgres://postgres:@127.0.0.1:5432/postgres'
psql 'postgres://postgres:@127.0.0.1:5432/postgres'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の SQL ステートメントを使用して、Red Hat Advanced Cluster Management ハブクラスターのユーザーとデータベースを作成します。
CREATE USER "rhacm-policy-compliance-history" WITH PASSWORD '<replace with password>'; CREATE DATABASE "rhacm-policy-compliance-history" WITH OWNER="rhacm-policy-compliance-history";
CREATE USER "rhacm-policy-compliance-history" WITH PASSWORD '<replace with password>'; CREATE DATABASE "rhacm-policy-compliance-history" WITH OWNER="rhacm-policy-compliance-history";Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーコンプライアンス履歴 API にこのデータベースを使用するには、
governance-policy-databaseSecretリソースを作成します。以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Red Hat Advanced Cluster Management がインストールされている namespace を追加します。デフォルトでは、Red Hat Advanced Cluster Management は
open-cluster-managementnamespace にインストールされます。 - 2
- PostgresQL サーバーのホスト名を追加します。PostgreSQL サーバーを Red Hat Advanced Cluster Management ハブクラスターにデプロイし、クラスターの外部に公開されていない場合は、ホスト値に
Serviceオブジェクトを使用できます。形式は<service name>.<namespace>.svcです。このアプローチは、Red Hat Advanced Cluster Management ハブクラスターのネットワークポリシーに依存することに注意してください。 - 3
- PostgreSQL サーバーの TLS 証明書に署名した証明機関の証明書ファイルを
caデータフィールドに指定する必要があります。この値を指定しない場合は、それに応じて sslmode 値を変更する必要があります。ただし、これはデータベース接続のセキュリティーが低下するため、推奨しません。
Red Hat Advanced Cluster Management ハブクラスターの復元操作のために
Secretリソースをバックアップするには、cluster.open-cluster-management.io/backupラベルを追加します。以下のコマンドを実行します。oc -n open-cluster-management label secret governance-policy-database cluster.open-cluster-management.io/backup=""
oc -n open-cluster-management label secret governance-policy-database cluster.open-cluster-management.io/backup=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL 接続をさらにカスタマイズするには、
connectionURLデータフィールドを直接使用し、PostgreSQL 接続 URI の形式で値を指定します。パスワード内の特殊文字は URL エンコードする必要があります。1 つの方法として、Python を使用してパスワードの URL エンコード形式を生成する方法があります。たとえば、パスワードが$uper<Secr&t%>の場合は、次の Python コマンドを実行して出力%24uper%3CSecr%26t%25%3Eを取得します。python -c 'import urllib.parse; import sys; print(urllib.parse.quote(sys.argv[1]))' '$uper<Secr&t%>'
python -c 'import urllib.parse; import sys; print(urllib.parse.quote(sys.argv[1]))' '$uper<Secr&t%>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow governance-policy-databaseSecretを作成した後、コマンドを実行してポリシーコンプライアンス履歴 API をテストします。OpenShiftRouteオブジェクトが同じ namespace に自動的に作成されます。Red Hat Advanced Cluster Management ハブクラスターのルートが信頼できる証明書を利用していない場合は、curl コマンドで-kフラグを指定して TLS 検証をスキップすることもできます。ただし、これは推奨されません。curl -H "Authorization: Bearer $(oc whoami --show-token)" \ "https://$(oc -n open-cluster-management get route governance-history-api -o jsonpath='{.spec.host}')/api/v1/compliance-events"curl -H "Authorization: Bearer $(oc whoami --show-token)" \ "https://$(oc -n open-cluster-management get route governance-history-api -o jsonpath='{.spec.host}')/api/v1/compliance-events"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功すると、curl コマンドは次のメッセージのような値を返します。
{"data":[],"metadata":{"page":1,"pages":0,"per_page":20,"total":0}}{"data":[],"metadata":{"page":1,"pages":0,"per_page":20,"total":0}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功しないと、curl コマンドは次の 2 つのメッセージのいずれかを返す可能性があります。
{"message":"The database is unavailable"}{"message":"The database is unavailable"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow {"message":"Internal Error"}{"message":"Internal Error"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow メッセージを受け取った場合は、次のコマンドを使用して、
open-cluster-managementnamespace 内の Kubernetes イベントを表示します。oc -n open-cluster-management get events --field-selector reason=OCMComplianceEventsDBError
oc -n open-cluster-management get events --field-selector reason=OCMComplianceEventsDBErrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow イベントから
governance-policy-propagatorログを表示する指示を受け取った場合は、次のコマンドを実行します。oc -n open-cluster-management logs -l name=governance-policy-propagator -f
oc -n open-cluster-management logs -l name=governance-policy-propagator -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザー、パスワード、またはデータベースが正しく指定されていないことを示すエラーメッセージが表示される場合があります。次のメッセージの例を参照してください。
2024-03-05T12:17:14.500-0500 info compliance-events-api complianceeventsapi/complianceeventsapi_controller.go:261 The database connection failed: pq: password authentication failed for user "rhacm-policy-compliance-history"
2024-03-05T12:17:14.500-0500 info compliance-events-api complianceeventsapi/complianceeventsapi_controller.go:261 The database connection failed: pq: password authentication failed for user "rhacm-policy-compliance-history"Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
次のコマンドを使用して、
governance-policy-databaseSecretリソースを正しい PostgreSQL 接続設定で更新します。
oc -n open-cluster-management edit secret governance-policy-database
oc -n open-cluster-management edit secret governance-policy-databaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.3. コンプライアンス履歴 API URL を設定する リンクのコピーリンクがクリップボードにコピーされました!
マネージドクラスターで機能を有効にするには、ポリシーコンプライアンス履歴 API URL を設定します。以下の手順を実行します。
次のコマンドを使用して、ポリシーコンプライアンス履歴 API の外部 URL を取得します。
echo "https://$(oc -n open-cluster-management get route governance-history-api -o=jsonpath='{.spec.host}')"echo "https://$(oc -n open-cluster-management get route governance-history-api -o=jsonpath='{.spec.host}')"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は、次の情報のようになり、Red Hat Advanced Cluster Management ハブクラスターのドメイン名を含んでいます。
https://governance-history-api-open-cluster-management.apps.openshift.redhat.com
https://governance-history-api-open-cluster-management.apps.openshift.redhat.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のような
AddOnDeploymentConfigオブジェクトを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
valueパラメーター値は、コンプライアンス履歴の外部 URL に置き換えます。
-
2.5.3.1. すべてのマネージドクラスターで有効にする リンクのコピーリンクがクリップボードにコピーされました!
すべてのマネージドクラスターでコンプライアンス履歴 API を有効にして、マネージドクラスターからのコンプライアンスイベントを記録します。以下の手順を実行します。
次のコマンドを使用して、
governance-policy-frameworkClusterManagementAddOnオブジェクトがAddOnDeploymentConfigを使用するように設定します。oc edit ClusterManagementAddOn governance-policy-framework
oc edit ClusterManagementAddOn governance-policy-frameworkCopy to Clipboard Copied! Toggle word wrap Toggle overflow spec.supportedConfigs配列を追加または更新します。リソースの設定は次のようになります。- group: addon.open-cluster-management.io resource: addondeploymentconfigs defaultConfig: name: governance-policy-framework namespace: open-cluster-management- group: addon.open-cluster-management.io resource: addondeploymentconfigs defaultConfig: name: governance-policy-framework namespace: open-cluster-managementCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.3.2. 単一のマネージドクラスターを有効にする リンクのコピーリンクがクリップボードにコピーされました!
単一のマネージドクラスターでコンプライアンス履歴 API を有効にして、マネージドクラスターからのコンプライアンスイベントを記録します。以下の手順を実行します。
マネージドクラスター namespace で、
governance-policy-frameworkManagedClusterAddOnリソースを設定します。次のコマンドを使用して、Red Hat Advanced Cluster Management ハブクラスターから次のコマンドを実行します。oc -n <manage-cluster-namespace> edit ManagedClusterAddOn governance-policy-framework
oc -n <manage-cluster-namespace> edit ManagedClusterAddOn governance-policy-frameworkCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
<manage-cluster-namespace>プレースホルダーは、有効にするマネージドクラスターの名前に置き換えます。
-
spec.configs配列を追加または更新し、次の例のようなエントリーを含めます。- group: addon.open-cluster-management.io resource: addondeploymentconfigs name: governance-policy-framework namespace: open-cluster-management
- group: addon.open-cluster-management.io resource: addondeploymentconfigs name: governance-policy-framework namespace: open-cluster-managementCopy to Clipboard Copied! Toggle word wrap Toggle overflow 設定を確認するには、マネージドクラスター上のデプロイメントで
--compliance-api-urlコンテナー引数が使用されていることを確認します。以下のコマンドを実行します。oc -n open-cluster-management-agent-addon get deployment governance-policy-framework -o jsonpath='{.spec.template.spec.containers[1].args}'oc -n open-cluster-management-agent-addon get deployment governance-policy-framework -o jsonpath='{.spec.template.spec.containers[1].args}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は次の例のような内容になります。
["--enable-lease=true","--hub-cluster-configfile=/var/run/klusterlet/kubeconfig","--leader-elect=false","--log-encoder=console","--log-level=0","--v=-1","--evaluation-concurrency=2","--client-max-qps=30","--client-burst=45","--disable-spec-sync=true","--cluster-namespace=local-cluster","--compliance-api-url=https://governance-history-api-open-cluster-management.apps.openshift.redhat.com"]
["--enable-lease=true","--hub-cluster-configfile=/var/run/klusterlet/kubeconfig","--leader-elect=false","--log-encoder=console","--log-level=0","--v=-1","--evaluation-concurrency=2","--client-max-qps=30","--client-burst=45","--disable-spec-sync=true","--cluster-namespace=local-cluster","--compliance-api-url=https://governance-history-api-open-cluster-management.apps.openshift.redhat.com"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいポリシーコンプライアンスイベントが、すべてポリシーコンプライアンス履歴 API に記録されます。
特定のマネージドクラスターのポリシーコンプライアンスイベントが記録されていない場合は、影響を受けるマネージドクラスターの
governance-policy-frameworkログを表示します。oc -n open-cluster-management-agent-addon logs deployment/governance-policy-framework -f
oc -n open-cluster-management-agent-addon logs deployment/governance-policy-framework -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のメッセージに類似したログメッセージが表示されます。
message値が空の場合は、ポリシーコンプライアンス履歴 API の URL が正しくないか、ネットワーク通信の問題が発生しています。024-03-05T19:28:38.063Z info policy-status-sync statussync/policy_status_sync.go:750 Failed to record the compliance event with the compliance API. Will requeue. {"statusCode": 503, "message": ""}024-03-05T19:28:38.063Z info policy-status-sync statussync/policy_status_sync.go:750 Failed to record the compliance event with the compliance API. Will requeue. {"statusCode": 503, "message": ""}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーコンプライアンス履歴 API URL が正しくない場合は、次のコマンドを使用してハブクラスターの URL を編集します。
oc -n open-cluster-management edit AddOnDeploymentConfig governance-policy-framework
oc -n open-cluster-management edit AddOnDeploymentConfig governance-policy-frameworkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記: ネットワーク通信の問題が発生した場合は、ネットワークインフラストラクチャーに基づいて問題を診断する必要があります。
2.5.4. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- ポリシーコンプライアンス履歴 API (テクノロジープレビュー) を参照してください。