1.7. 为 Argo CD push 模型创建自定义服务帐户
通过在中心集群上创建ManagedServiceAccount资源,在托管集群上创建服务帐户。使用ClusterPermission资源向服务帐户授予特定权限。
创建用于 Argo CD push 模型的 customzied 服务帐户包括以下优点:
- 应用程序管理器附加组件在每个受管集群上运行。默认情况下,Argo CD 控制器使用服务帐户 Application Manager 将这些资源推送到受管集群。
- 应用程序管理器服务帐户具有大量权限,因为应用程序订阅附加组件使用应用程序管理器服务在受管集群中部署应用程序。如果您需要一组有限的权限,请不要使用 Application manager 服务帐户。
- 您可以指定希望 Argo CD 推送模型使用的不同服务帐户。当 Argo CD 控制器将资源从集中式 hub 集群推送到受管集群时,您可以使用与默认应用程序管理器不同的服务帐户。通过使用不同的服务帐户,您可以控制授予此服务帐户的权限。
-
服务帐户必须存在于受管集群上。为了方便创建具有相关权限的服务帐户,请在集中式中心集群上使用
ManagedServiceAccount资源和新的ClusterPermission资源。
完成所有以下流程后,您可以为受管服务帐户授予集群权限。具有集群权限,您的受管服务帐户具有在受管集群中部署应用程序资源所需的权限。完成以下步骤:
1.7.1. 创建受管服务帐户 复制链接链接已复制到粘贴板!
集线器上的ManagedServiceAccount自定义资源提供了一种在托管集群上创建ServiceAccount的便捷方法。当在 hub 集群的 <managed_cluster> 命名空间中创建了一个 ManagedServiceAccount 自定义资源后,会在受管集群中创建一个 ServiceAccount。
要创建托管服务帐户,请参阅启用 ManagedServiceAccount 附加组件。
1.7.2. 创建集群权限 复制链接链接已复制到粘贴板!
创建服务帐户后,它不会关联任何权限。要向新服务帐户授予权限,请使用ClusterPermission资源。ClusterPermission资源是在中心托管集群命名空间中创建的。它提供了一种方便的方法来创建角色、在托管集群上集群角色资源,并通过RoleBinding或ClusterRoleBinding资源将它们绑定到服务帐户。
-
要将
<managed-sa-sample>服务帐户权限授予部署到<managed-cluster>上的抵押命名空间的示例抵押应用程序,请创建包含以下内容的 YAML:
-
将 YAML 文件保存到名为
cluster-permission.yaml的文件中。 -
运行
oc apply -f cluster-permission.yaml。 -
示例 &
lt;clusterpermission> 在 mortgage 命名空间中创建一个名为 <clusterpermission-msa-subject-sample> 的角色。如果尚不存在,请创建一个命名空间mortgage。 -
查看在
<managed-cluster>上创建的资源。
创建示例后,& lt;clusterpermission > 会在示例受管集群中创建以下资源:
-
默认命名空间中有一个名为
<clusterpermission-msa-subject-sample>的角色。 -
默认命名空间中有一个名为
<clusterpermission-msa-subject-sample>的RoleBinding,用于将角色绑定到托管服务帐户。 -
抵押命名空间中有一个名为
<clusterpermission-msa-subject-sample>的角色。 -
抵押命名空间中一个名为
<clusterpermission-msa-subject-sample>的RoleBinding,用于将角色绑定到托管服务帐户。 -
一个名为
<clusterpermission-msa-subject-sample>的ClusterRole。 -
一个名为
<clusterpermission-msa-subject-sample>的ClusterRoleBinding,用于将ClusterRole绑定到托管服务帐户。
1.7.3. 使用现有角色创建集群权限 复制链接链接已复制到粘贴板!
当您创建ClusterPermission资源时,您会自动创建新的角色。您仍然可以将ClusterPermission资源与现有角色一起使用。
例如,当您应用以下 YAML 示例时,您将创建一个使用现有ClusterRole 的ClusterPermission资源:
1.7.4. 创建集群权限资源以引用主题 复制链接链接已复制到粘贴板!
如果您创建ClusterPermission资源来引用不同的主题,那么您可以同时处理不同的主题,而不是一次只能处理一个主题。
例如,请参阅以下具有指定主题字段的 YAML:
1.7.5. 在 GitOpsCluster 资源中使用受管服务帐户 复制链接链接已复制到粘贴板!
GitOpsCluster 资源使用放置将所选受管集群导入到 Argo CD 中,包括创建 Argo CD 集群 secret,其中包含用于访问集群的信息。默认情况下,Argo CD 集群 secret 使用应用程序管理器服务帐户来访问受管集群。
-
要更新
GitOpsCluster资源以使用托管服务帐户,请添加带有托管服务帐户名称的ManagedServiceAccountRef属性。 将以下示例保存为
gitops.yaml文件,以创建GitOpsCluster自定义资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
运行
oc apply -f gitops.yaml以应用该文件。 进入
openshift-gitops命名空间,并验证是否有新的 Argo CD 集群 secret,名称为 <managed cluster-managed-sa-sample-cluster-secret>。运行以下命令:oc get secrets -n openshift-gitops <managed cluster-managed-sa-sample-cluster-secret>
oc get secrets -n openshift-gitops <managed cluster-managed-sa-sample-cluster-secret>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请查看以下输出来验证:
NAME TYPE DATA AGE <managed cluster-managed-sa-sample-cluster-secret> Opaque 3 4m2s
NAME TYPE DATA AGE <managed cluster-managed-sa-sample-cluster-secret> Opaque 3 4m2sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.6. 创建 Argo CD 应用程序 复制链接链接已复制到粘贴板!
使用推送模型从 Argo CD 控制台部署 Argo CD 应用程序。Argo CD 应用程序使用受管服务帐户 < managed-sa-sample > 部署。
- 登录到 Argo CD 控制台。
- 单击 Create a new application。
- 选择集群 URL。
-
进入 Argo CD 应用程序,验证它具有给定权限,如角色和集群角色,您要传播到 <
managed cluster>。
1.7.7. 使用策略创建受管服务帐户和集群权限 复制链接链接已复制到粘贴板!
When the GitOpsCluster resource is updated with the `ManagedServiceAccountRef`, each managed cluster in the placement of this GitOpsCluster needs to have the service account. If you have several managed clusters, it becomes tedious for you to create the managed service account and cluster permission for each managed cluster. You can simply this process by using a policy to create the managed service account and cluster permission for all your managed clusters
When the GitOpsCluster resource is updated with the `ManagedServiceAccountRef`, each managed cluster in the placement of this GitOpsCluster needs to have the service account. If you have several managed clusters, it becomes tedious for you to create the managed service account and cluster permission for each managed cluster. You can simply this process by using a policy to create the managed service account and cluster permission for all your managed clusters
当您将ManagedServiceAccount和ClusterPermission资源应用于中心集群时,此策略的位置将绑定到本地集群。在 GitOpsCluster 资源放置中,将这些资源复制到所有受管集群的受管集群。
使用策略创建的ManagedServiceAccount和ClusterPermission资源包含以下属性:
-
更新策略中的
ManagedServiceAccount和ClusterPermission对象模板会导致所有托管集群中的所有ManagedServiceAccount和ClusterPermission资源都更新。 -
直接更新
ManagedServiceAccount和ClusterPermission资源将恢复到原始状态,因为它是由策略强制执行的。 如果 GitOpsCluster 放置更改的放置决定,策略会管理受管集群命名空间中资源的创建和删除。
- 要为 YAML 创建策略以创建受管服务帐户和集群权限,请使用以下内容创建一个 YAML:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 YAML 文件保存到名为
policy.yaml的文件中。 -
运行
oc apply -f policy.yaml。 -
在策略的对象模板中,它遍历与 GitOpsCluster 关联的放置的放置决策,并应用以下
ManagedServiceAccount和ClusterPermission模板: