名称空间
工作负载名称空间
配置工作负载名称空间
在配置工作负载名称空间时,重要的是要意识到某些选项旨在覆盖工作负载资源中其他选项或名称空间定义的值。在某些情况下,使用某些选项设置名称空间可能会导致错误,如果要部署的资源包含非名称空间资源。要更好地理解这些选项如何相互作用,请参考下面的图表。有关特定选项的更多详细信息,请参考 GitRepo 或 fleet.yaml 参考。
跨名称空间部署
可以创建一个 GitRepo,该 GitRepo 将在不同的名称空间中进行部署。这样做的主要目的是让一个中央特权团队能够管理由不同团队管理的多个集群的公共配置。实现这一点的方法是在集群中创建一个 BundleNamespaceMapping 资源。
如果您正在创建一个 BundleNamespaceMapping 资源,最好在仅包含 GitRepos 而不包含 Clusters 的名称空间中进行。如果您在同一个仓库中有集群,可能会感到困惑,因为跨名称空间的 GitRepos 将始终针对当前名称空间进行评估。因此,如果您在同一个名称空间中有集群,您可能希望将它们设置为金丝雀集群。
一个 BundleNamespaceMapping 只有两个字段。如下所示
kind: BundleNamespaceMapping
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: not-important
namespace: typically-unique
# Bundles to match by label. The labels are defined in the fleet.yaml
# labels field or from the GitRepo metadata.labels field
bundleSelector:
matchLabels:
foo: bar
# Namespaces to match by label
namespaceSelector:
matchLabels:
foo: bar
如果 BundleNamespaceMappings bundleSelector 字段与 Bundles 标签匹配,则该 Bundle 目标条件将针对所有匹配 namespaceSelector 的所有名称空间中的集群进行评估。可以通过在 fleet.yaml 文件中或在 GitRepo 的 metadata.labels 字段上放置标签来为从 git 创建的捆绑包指定标签。
限制 GitRepos
一个名称空间可以包含多个 GitRepoRestriction 资源。在该名称空间中创建的所有 GitRepos 将会根据限制列表进行检查。如果一个 GitRepo 违反了某个约束,它的 BundleDeployment 将处于错误状态,并且不会被部署。
这也可以用来设置 GitRepo 的 serviceAccount 和 clientSecretName 字段的默认值。
kind: GitRepoRestriction
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: restriction
namespace: typically-unique
allowedClientSecretNames: []
allowedRepoPatterns: []
allowedServiceAccounts: []
allowedTargetNamespaces: []
defaultClientSecretName: ""
defaultServiceAccount: ""
允许的目标名称空间
这可以用来限制部署到下游集群的一组名称空间。如果存在 allowedTargetNamespaces 限制,所有 GitRepos 必须指定一个 targetNamespace,并且指定的名称空间必须在允许列表中。这也防止了集群范围资源的创建。
允许的目标名称空间选择器
allowedTargetNamespaceSelector 限制部署到下游集群中标签与给定选择器匹配的名称空间。当在 GitRepoRestriction 中设置此字段时,所有 GitRepos 必须指定一个 targetNamespace。
Fleet agent 在部署捆绑包之前,会检查下游集群中该名称空间的标签:
-
如果名称空间存在且其标签与选择器匹配,则部署继续。
-
如果名称空间存在但其标签不匹配,则
BundleDeployment被 -
设置为错误状态,包不会被部署。
-
如果名称空间在下游集群中不存在,则部署失败并出现错误。预先创建名称空间并正确标记是必需的;当设置此选择器时,Helm 的
createNamespace选项不适用。
同一名称空间中的多个 GitRepoRestriction 资源各自贡献它们的 allowedTargetNamespaceSelector。选择器在传播到包部署之前被合并;一个名称空间必须满足所有选择器。
kind: GitRepoRestriction
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: restriction
namespace: project1
allowedTargetNamespaceSelector:
matchLabels:
team: frontend
SUSE® Rancher Prime Continuous Delivery 名称空间
SUSE® Rancher Prime Continuous Delivery 管理器中的所有类型都是名称空间的。自定义资源的名称空间,例如 GitRepo,不会影响已部署资源的名称空间。
理解 SUSE® Rancher Prime Continuous Delivery 管理器中如何使用名称空间对于理解安全模型以及如何以多租户方式使用 SUSE® Rancher Prime Continuous Delivery 是很重要的。
GitRepos、Bundles、Clusters、ClusterGroups
所有 GitRepo 目标的选择器将在相同名称空间中与 Clusters 和 ClusterGroups 进行评估。这意味着如果您在名称空间中给予 create 或 update 权限,则该最终用户可以修改选择器以匹配该名称空间中的任何集群。这意味着在实践中,如果您希望两个团队自我管理各自的 GitRepo 注册,但他们不应能够针对彼此的集群,则他们应位于不同的名称空间中。
集群注册名称空间,在 Rancher 中称为 'workspace',包含 Cluster 和 ClusterRegistration 资源,以及任何 GitRepos 和 Bundles。
Rancher 将创建两个 SUSE® Rancher Prime Continuous Delivery 工作区:fleet-default 和 fleet-local。
-
fleet-default将包含通过 Rancher 已注册的所有下游集群。 -
fleet-local默认将包含本地群集。对fleet-local的访问是有限的。
|
重要信息
删除工作区,即集群注册名称空间,将删除该名称空间内的所有集群。 这将从已删除的集群中卸载所有已部署的 bundle,除了 Fleet agent。 |
如果您在 单集群 风格中使用 SUSE® Rancher Prime Continuous Delivery,则名称空间将始终是 fleet-local。 有关更多信息,请参阅 fleet-local 名称空间部分。
对于多集群风格,请确保使用正确的仓库,以映射到正确的目标集群。
内部名称空间
集群注册名称空间:fleet-local
fleet-local 名称空间是用于单个集群使用案例或启动 SUSE® Rancher Prime Continuous Delivery 管理器配置的特殊名称空间。 对本地群集的访问应限制在操作员之内。
当安装 SUSE® Rancher Prime Continuous Delivery 时,fleet-local 名称空间会与一个名为 local 的 Cluster 和一个名为 default 的 ClusterGroup 一起创建。如果在 GitRepo 上未指定目标,则默认情况下它会针对名为 default 的 ClusterGroup。这意味着在 fleet-local 中创建的所有 GitRepos 将自动针对 local Cluster。local Cluster 指的是 SUSE® Rancher Prime Continuous Delivery 管理器运行的集群。