2.5. 策略合规历史记录(技术预览)
如果您希望长期存储 Red Hat Advanced Cluster Management for Kubernetes 策略合规事件,策略合规历史记录 API 是一个可选的技术预览功能。您可以使用 API 获取额外详情,如 spec 字段来审核和排除您的策略,并在策略被禁用或从集群中删除时获取合规性事件。策略合规历史记录 API 也可以生成以逗号分隔的值(CSV)电子策略合规事件表,以帮助您进行审核和故障排除。
策略合规历史记录 API 也可以生成以逗号分隔的值(CSV)电子策略合规事件表,以进一步审核和故障排除。
2.5.1. 先决条件 复制链接链接已复制到粘贴板!
策略合规历史记录 API 需要版本 13 或更新版本上的 PostgreSQL 服务器。
一些红帽支持的选项包括使用
registry.redhat.io/rhel9/postgresql-15容器镜像、registry.redhat.io/rhel8/postgresql-13容器镜像、postgresql-serverRPM 或postgresql/server模块。查看适用于您选择的路径的有关设置和配置适用的官方红帽文档。策略合规历史记录 API 与任何标准 PostgreSQL 兼容,不受官方红帽支持的产品的限制。- 此 PostgreSQL 服务器必须可从 Red Hat Advanced Cluster Management hub 集群访问。如果 PostgreSQL 服务器在 hub 集群外部运行,请确保路由和防火墙配置允许 hub 集群连接到 PostgreSQL 服务器的端口 5432。如果在 PostgreSQL 配置中被覆盖,这个端口可能是不同的值。
2.5.2. 启用合规性历史记录 API 复制链接链接已复制到粘贴板!
配置受管集群,将策略合规事件记录到 API。您可以在所有集群或集群子集中启用它。完成以下步骤:
将 PostgreSQL 服务器配置为集群管理员。如果您在 Red Hat Advanced Cluster Management hub 集群中部署了 PostgreSQL,请临时端口转发 PostgreSQL 端口以使用
psql命令。运行以下命令: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 hub 集群创建一个用户和数据库:
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 创建
governance-policy-databaseSecret资源,将此数据库用于策略合规历史记录 API。运行以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加安装 Red Hat Advanced Cluster Management 的命名空间。默认情况下,Red Hat Advanced Cluster Management 安装在
open-cluster-management命名空间中。 - 2
- 添加 PostgresQL 服务器的主机名。如果您在 Red Hat Advanced Cluster Management hub 集群中部署了 PostgreSQL 服务器,且没有在集群外公开,您可以使用
Service对象作为主机值。格式为 <service name>.<namespace>.svc。请注意,此方法取决于 Red Hat Advanced Cluster Management hub 集群的网络策略。 - 3
- 您必须在为 PostgreSQL 服务器的 TLS 证书签名的
cadata 字段中指定证书颁发机构证书文件。如果没有提供这个值,您必须相应地更改 sslmode 值,但不建议这样做,因为它减少了数据库连接的安全性。
添加
cluster.open-cluster-management.io/backup标签,以备份 Red Hat Advanced Cluster Management hub 集群恢复操作的Secret资源。运行以下命令: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 连接进行更多自定义,请直接使用
connectionURLdata 字段,并以 PostgreSQL 连接 URI 格式提供值。密码中的特殊字符必须采用 URL 编码。种选择是使用 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对象。如果 Red Hat Advanced Cluster Management hub 集群上的路由没有使用可信证书,您可以选择在 curl 命令中提供 a-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 命令可能会返回两个信息之一:
{"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-management命名空间中的 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 -
使用以下命令,使用正确的 PostgreSQL 连接设置来更新
governance-policy-databaseSecret资源:
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 hub 集群的域名:
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,以记录来自受管集群的合规性事件。完成以下步骤:
在受管集群命名空间中配置
governance-policy-frameworkManagedClusterAddOn资源。使用以下命令,从 Red Hat Advanced Cluster Management hub 集群中运行以下命令: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 -
将 &
lt;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 此时会显示类似以下消息的日志消息。如果
消息值为空,策略合规历史记录 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 不正确,使用以下命令编辑 hub 集群上的 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 注意: 如果您遇到网络通信问题,您必须根据网络基础架构诊断问题。