3.4. 使用 GitOps 部署策略
您可以使用监管框架在一组受管集群中部署一组策略。您可以通过添加到开源社区的 policy-collection
,贡献并使用软件仓库中的策略。如需更多信息,请参阅贡献自定义策略。来自开源社区的、位于 stable
和 community
目录中的策略会进一步根据 NIST Special Publication 800-53 进行组织。
继续阅读以了解使用 GitOps 通过 Git 存储库自动化和跟踪策略更新和创建的最佳做法。
先决条件:开始之前,请务必 fork policy-collection
存储库。
3.4.1. 自定义本地存储库
通过将 stable
和 community
策略整合到单个文件夹中,自定义您的本地存储库。删除您不想使用的策略。完成以下步骤以自定义您的本地存储库:
在存储库中创建一个新目录,以存放您要部署的策略。确保您位于 GitOps 的主要默认分支的本地
policy-collection
存储库中。运行以下命令:mkdir my-policies
将所有
stable
和community
策略复制到您的my-policies
目录中。首先,如果stable
文件夹包含community
中可用内容的副本,则首先从社区策略开始。运行以下命令:cp -R community/* my-policies/ cp -R stable/* my-policies/
现在,您在一个父目录结构中已有所有策略,您可以在 fork 中编辑策略。
提示:
- 最佳做法是删除您不打算使用的策略。
从以下列表中了解策略和策略定义:
- 用途:了解策略的作用。
补救操作:该策略是否仅告知您合规,还是强制执行策略并进行更改?请参阅
spec.remediationAction
参数。如果强制进行更改,请确保您了解功能预期。记得检查哪些策略支持执行。如需更多信息,请参阅 Validate 部分。注:策略的
spec.remediationAction
设置覆盖单个spec.policy-templates
中设置的任何补救操作。-
placement:策略部署到哪些群集?默认情况下,大多数策略都以带有
environment: dev
标签的集群为目标。有些策略可能针对 OpenShift Container Platform 集群或其他标签。您可以更新或添加附加标签来包括其他集群。如果没有特定值,策略会应用到所有集群。您还可以创建策略的多个副本并为每个副本自定义,如果您想要使用一组集群配置的一种策略,并为另一组集群配置另一种方式。
3.4.2. 提交到您的本地存储库
在您对目录所做的更改满意后,提交您的更改并将其推送到 Git,以便集群可以访问它们。
注:本示例用于显示如何将策略与 GitOps 搭配使用的基础知识,因此您可能具有不同的工作流来对分支进行更改。
完成以下步骤:
在终端中运行
git status
,以查看您之前创建的目录中的最近更改。将您的新目录添加到要使用以下命令提交的更改列表中:git add my-policies/
提交更改并自定义您的消息。运行以下命令:
git commit -m “Policies to deploy to the hub cluster”
将更改推送到用于 GitOps 的已分叉存储库的分支。运行以下命令:
git push origin <your_default_branch>master
您的更改已提交。
3.4.3. 在集群中部署策略
在推送更改后,您可以将策略部署到 Red Hat Advanced Cluster Management for Kubernetes 安装中。在部署后,您的 hub 集群连接到 Git 存储库。对 Git 存储库所选分支的任何其他更改都会反映在集群中。
注: 默认情况下,通过 GitOps 部署的策略使用 merge
reconcile 选项。如果要使用 replace
协调选项,将 apps.open-cluster-management.io/reconcile-option: replace
注解添加到 Subscription
资源。如需了解更多详细信息,请参阅应用程序生命周期。
deploy.sh
脚本在 hub 集群中创建 Channel
和 Subscription
资源。频道连接到 Git 仓库,订阅指定要通过频道传递给集群的数据。因此,在您的 hub 上会创建指定子目录中定义的所有策略。在订阅创建策略后,Red Hat Advanced Cluster Management 会根据定义的放置规则分析策略,并在与策略应用到的每个受管集群关联的命名空间中创建额外的策略资源。
该策略随后从 hub 集群上对应的受管集群命名空间中复制到受管集群。因此,Git 仓库中的策略推送到具有与策略放置规则中定义的 clusterSelector
匹配的所有受管集群。
完成以下步骤:
在
policy-collection
文件夹中运行以下命令来更改目录:cd deploy
请确定将命令行界面(CLI)配置为使用以下命令在正确的集群中创建资源:
oc cluster-info
命令的输出显示集群的 API 服务器详情,其中安装了 Red Hat Advanced Cluster Management。如果没有显示正确的 URL,请将 CLI 配置为指向正确的集群。如需更多信息,请参阅使用 OpenShift CLI。
创建一个命名空间,创建您的策略以控制访问和组织策略。运行以下命令:
oc create namespace policy-namespace
运行以下命令将策略部署到集群中:
./deploy.sh -u https://github.com/<your-repository>/policy-collection -p my-policies -n policy-namespace
将
your-repository
替换为您的 Git 用户名或存储库名称。注:
deploy.sh
脚本的完整参数列表使用以下语法:./deploy.sh [-u <url>] [-b <branch>] [-p <path/to/dir>] [-n <namespace>] [-a|--name <resource-name>]
查看每个参数的以下解释:
-
URL:从主
policy-collection
存储库派生的存储库的 URL。默认 URL 为https://github.com/stolostron/policy-collection.git
。 -
分支:要指向的 Git 存储库的分支。默认分支为
main
。 -
子目录路径:为包含要使用的策略而创建的子目录路径。在前面的示例中,我们使用了
my-policies
子目录,但您也可以指定您想要从哪个文件夹开始。例如,您可以使用my-policies/AC-Access-Control
。默认文件夹为stable
。 -
Namespace:在 hub 集群中创建资源和策略的命名空间。这些说明使用
policy-namespace
命名空间。默认命名空间是policies
。 -
名称前缀:
Channel
和Subscription
资源的前缀。默认为demo-stable-policies
。
-
URL:从主
运行 deploy.sh
脚本后,有权访问存储库的任何用户都可以提交更改到分支,该分支会将更改推送到集群上执行策略。
注:要使用订阅部署策略,请完成以下步骤:
-
将
open-cluster-management:subscription-admin
ClusterRole 绑定到创建订阅的用户。 如果您在订阅中使用允许列表,请包含以下 API 条目:
- apiVersion: policy.open-cluster-management.io/v1 kinds: - "*" - apiVersion: policy.open-cluster-management.io/v1beta1 kinds: - "*" - apiVersion: apps.open-cluster-management.io/v1 kinds: - PlacementRule - apiVersion: cluster.open-cluster-management.io/v1beta1 kinds: - Placement
3.4.4. 从控制台验证 GitOps 策略部署
从控制台验证您的更改是否已应用于您的策略。您还可以从控制台对策略进行更多更改,但当 订阅
与 Git 存储库协调时,会恢复更改。完成以下步骤:
- 登录您的 Red Hat Advanced Cluster Management 集群。
- 在导航菜单中选择 Governance。
- 查找您在表中部署的策略。使用 GitOps 部署的策略在 Source 列中具有 Git 标签。单击该标签,以查看 Git 存储库的详细信息。
3.4.4.1. 通过 CLI 验证 GitOps 策略部署
完成以下步骤:
检查以下策略详情:
- 为什么一个特定的策论在所分发的集群中合规或不合规?
- 策略是否应用到正确的集群?
- 如果此策略没有分发到任何集群,为什么?
识别您创建或修改的 GitOps 部署策略。GitOps 部署的策略可以通过自动应用的注解来标识。GitOps 部署的策略的注解类似以下路径:
apps.open-cluster-management.io/hosting-deployable: policies/deploy-stable-policies-Policy-policy-role9 apps.open-cluster-management.io/hosting-subscription: policies/demo-policies apps.open-cluster-management.io/sync-source: subgbk8s-policies/demo-policies
GitOps 注解可用于查看哪一订阅创建了该策略。您还可以在策略中添加自己的标签,以便可以编写基于标签选择策略的运行时查询。
例如,您可以使用以下命令在策略中添加标签:
oc label policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> <key>=<value>
然后,您可以使用以下命令查询带有标签的策略:
oc get policies.policy.open-cluster-management.io -n <policy-namespace> -l <key>=<value>
使用 GitOps 部署了您的策略。