2.5. 策略合规历史记录(技术预览)


如果您希望以可查询的格式进行 Red Hat Advanced Cluster Management for Kubernetes 策略合规事件的长期存储,策略合规历史记录 API 是一个可选的技术预览功能。您可以使用 API 获取其他详情,如 spec 字段审核并排除您的策略,并在策略从集群中删除或从集群中删除时获取合规事件。策略合规历史记录 API 也可以生成以逗号分隔的策略合规事件表,以帮助您进行审计和故障排除。

策略合规历史记录 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
  2. 在不同的终端中,在本地连接到 PostgreSQL 服务器,使用以下命令:

    psql 'postgres://postgres:@127.0.0.1:5432/postgres'
  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";
  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
    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=""
  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%>'
  7. 在创建 governance-policy-database Secret 后,运行 命令以测试策略合规历史记录 API。OpenShift Route 对象会自动在同一命名空间中创建。如果 Red Hat Advanced Cluster Management hub 集群上的路由没有使用可信证书,您可以选择在 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 命令会返回类似如下的值:

      {"data":[],"metadata":{"page":1,"pages":0,"per_page":20,"total":0}}
    • 如果它不成功,则 curl 命令可能会返回这两个消息之一:

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

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

        oc -n open-cluster-management logs -l name=governance-policy-propagator -f
      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"
      4. 使用以下命令更新 governance-policy-database Secret 资源,使其包含正确的 PostgreSQL 连接设置:
    oc -n open-cluster-management edit secret governance-policy-database

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}')"

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

    https://governance-history-api-open-cluster-management.apps.openshift.redhat.com
  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>
    • value 参数值替换为您的合规性历史记录外部 URL。

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

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

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

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

      - group: addon.open-cluster-management.io
        resource: addondeploymentconfigs
        defaultConfig:
          name: governance-policy-framework
          namespace: open-cluster-management

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
    • 将 & lt;manage-cluster-namespace > 占位符替换为您要启用的受管集群名称。
  2. 添加或更新 spec.configs 数组,使其具有类似以下示例的条目:

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

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

    输出可能类似以下:

    ["--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"]

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

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

      oc -n open-cluster-management-agent-addon logs deployment/governance-policy-framework -f
    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": ""}
    3. 如果策略合规历史记录 API URL 不正确,使用以下命令编辑 hub 集群上的 URL:

      oc -n open-cluster-management edit AddOnDeploymentConfig governance-policy-framework

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

2.5.4. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.