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-server RPM 或 postgresql/server 模块。查看适用于您选择的路径的有关设置和配置适用的官方红帽文档。策略合规历史记录 API 与任何标准 PostgreSQL 兼容,不受官方红帽支持的产品的限制。

  • 此 PostgreSQL 服务器必须可从 Red Hat Advanced Cluster Management hub 集群访问。如果 PostgreSQL 服务器在 hub 集群外部运行,请确保路由和防火墙配置允许 hub 集群连接到 PostgreSQL 服务器的端口 5432。如果在 PostgreSQL 配置中被覆盖,这个端口可能是不同的值。

2.5.2. 启用合规性历史记录 API

配置受管集群,将策略合规事件记录到 API。您可以在所有集群或集群子集中启用它。完成以下步骤:

  1. 将 PostgreSQL 服务器配置为集群管理员。如果您在 Red Hat Advanced Cluster Management hub 集群中部署了 PostgreSQL,请临时端口转发 PostgreSQL 端口以使用 psql 命令。运行以下命令:

    oc -n <PostgreSQL namespace> port-forward <PostgreSQL pod name> 5432:5432
    Copy to Clipboard Toggle word wrap
  2. 在不同的终端中,连接到本地的 PostgreSQL 服务器,使用以下命令:

    psql 'postgres://postgres:@127.0.0.1:5432/postgres'
    Copy to Clipboard Toggle word wrap
  3. 使用以下 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";
    Copy to Clipboard Toggle word wrap
  4. 创建 governance-policy-database Secret 资源,将此数据库用于策略合规历史记录 API。运行以下命令:

    oc -n open-cluster-management create secret generic governance-policy-database \ 
    1
    
        --from-literal="user=rhacm-policy-compliance-history" \
        --from-literal="password=rhacm-policy-compliance-history" \
        --from-literal="host=<replace with host name of the Postgres server>" \ 
    2
    
        --from-literal="dbname=ocm-compliance-history" \
      --from-literal="sslmode=verify-full" \
        --from-file="ca=<replace>" 
    3
    Copy to Clipboard Toggle word wrap
    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 证书签名的 ca data 字段中指定证书颁发机构证书文件。如果没有提供这个值,您必须相应地更改 sslmode 值,但不建议这样做,因为它减少了数据库连接的安全性。
  5. 添加 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=""
    Copy to Clipboard Toggle word wrap
  6. 要对 PostgreSQL 连接进行更多自定义,请直接使用 connectionURL data 字段,并以 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%>'
    Copy to Clipboard Toggle word wrap
  7. 在创建 governance-policy-database Secret 后,运行 命令以测试策略合规历史记录 API。在同一命名空间中自动创建 OpenShift Route 对象。如果 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"
    Copy to Clipboard Toggle word wrap
    • 如果成功,curl 命令会返回类似如下的值:

      {"data":[],"metadata":{"page":1,"pages":0,"per_page":20,"total":0}}
      Copy to Clipboard Toggle word wrap
    • 如果没有成功,curl 命令可能会返回两个信息之一:

      {"message":"The database is unavailable"}
      Copy to Clipboard Toggle word wrap
      {"message":"Internal Error"}
      Copy to Clipboard Toggle word wrap
      1. 如果您收到信息,使用以下命令查看 open-cluster-management 命名空间中的 Kubernetes 事件:

        oc -n open-cluster-management get events --field-selector reason=OCMComplianceEventsDBError
        Copy to Clipboard Toggle word wrap
      2. 如果您收到来自事件的说明来查看 governance-policy-propagator 日志,请运行以下命令:

        oc -n open-cluster-management logs -l name=governance-policy-propagator -f
        Copy to Clipboard Toggle word wrap
      3. 您可能会收到一条错误消息,指出用户、密码或数据库被错误指定。请参见以下消息示例:

        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 Toggle word wrap
      4. 使用以下命令,使用正确的 PostgreSQL 连接设置来更新 governance-policy-database Secret 资源:
    oc -n open-cluster-management edit secret governance-policy-database
    Copy to Clipboard Toggle word wrap

2.5.3. 设置合规性历史记录 API URL

设置策略合规历史记录 API URL,以在受管集群中启用该功能。完成以下步骤:

  1. 使用以下命令检索策略合规历史记录 API 的外部 URL:

    echo "https://$(oc -n open-cluster-management get route governance-history-api -o=jsonpath='{.spec.host}')"
    Copy to Clipboard Toggle word wrap

    输出可能类似以下信息,以及 Red Hat Advanced Cluster Management hub 集群的域名:

    https://governance-history-api-open-cluster-management.apps.openshift.redhat.com
    Copy to Clipboard Toggle word wrap
  2. 创建一个类似以下示例的 AddOnDeploymentConfig 对象:

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: AddOnDeploymentConfig
    metadata:
      name: governance-policy-framework
      namespace: open-cluster-management
    spec:
      customizedVariables:
        - name: complianceHistoryAPIURL
          value: <replace with URL from previous command>
    Copy to Clipboard Toggle word wrap
    • value 参数值替换为您的合规性历史记录外部 URL。

2.5.3.1. 在所有受管集群中启用

在所有受管集群上启用合规历史记录 API,以记录来自受管集群的合规性事件。完成以下步骤:

  1. 使用以下命令将 governance-policy-framework ClusterManagementAddOn 对象配置为使用 AddOnDeploymentConfig

    oc edit ClusterManagementAddOn governance-policy-framework
    Copy to Clipboard Toggle word wrap
  2. 添加或更新 spec.supportedConfigs 数组。您的资源可能有以下配置:

      - group: addon.open-cluster-management.io
        resource: addondeploymentconfigs
        defaultConfig:
          name: governance-policy-framework
          namespace: open-cluster-management
    Copy to Clipboard Toggle word wrap

2.5.3.2. 启用单个受管集群

在单个受管集群上启用合规性历史记录 API,以记录来自受管集群的合规性事件。完成以下步骤:

  1. 在受管集群命名空间中配置 governance-policy-framework ManagedClusterAddOn 资源。使用以下命令,从 Red Hat Advanced Cluster Management hub 集群中运行以下命令:

    oc -n <manage-cluster-namespace> edit ManagedClusterAddOn governance-policy-framework
    Copy to Clipboard Toggle word wrap
    • 将 & lt;manage-cluster-namespace > 占位符替换为您要启用的受管集群名称。
  2. 添加或更新 spec.configs 数组,使其包含类似以下示例的条目:

    - group: addon.open-cluster-management.io
      resource: addondeploymentconfigs
      name: governance-policy-framework
      namespace: open-cluster-management
    Copy to Clipboard Toggle word wrap
  3. 要验证配置,请确认受管集群上的部署是否使用 --compliance-api-url 容器参数。运行以下命令:

    oc -n open-cluster-management-agent-addon get deployment governance-policy-framework -o jsonpath='{.spec.template.spec.containers[1].args}'
    Copy to Clipboard Toggle word wrap

    输出可能类似以下:

    ["--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 Toggle word wrap

    任何新的策略合规事件都会记录在策略合规历史记录 API 中。

    1. 如果没有记录特定受管集群的策略合规事件,请查看受影响受管集群的 governance-policy-framework 日志:

      oc -n open-cluster-management-agent-addon logs deployment/governance-policy-framework -f
      Copy to Clipboard Toggle word wrap
    2. 此时会显示类似以下消息的日志消息。如果 消息 值为空,策略合规历史记录 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": ""}
      Copy to Clipboard Toggle word wrap
    3. 如果策略合规历史记录 API URL 不正确,使用以下命令编辑 hub 集群上的 URL:

      oc -n open-cluster-management edit AddOnDeploymentConfig governance-policy-framework
      Copy to Clipboard Toggle word wrap

      注意: 如果您遇到网络通信问题,您必须根据网络基础架构诊断问题。

2.5.4. 其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat