仅配置部分集群

通常,Anthos Config Management 会将配置应用到每个已注册的集群。如果配置位于 namespaces/ 子目录中,则 Anthos Config Management 会先在每个集群内创建命名空间,然后再将所有继承的配置应用到该命名空间。

ClusterSelector 是一种使用 Kubernetes labelSelectors 的特殊类型的配置。 您可以使用 ClusterSelector 根据集群的标签来限制特定配置所适用的集群;您还可以使用 ClusterSelector 来限制实例化命名空间级对象的集群。

ClusterSelector 配置不会在集群中保留。如需保留 ClusterSelector 配置,您可以在另一项配置中使用注释对其进行引用,但该配置将仅应用于与 ClusterSelector 匹配的集群。

如需使用 ClusterSelector,每个集群的名称都不得重复。集群名称在配置 Config Management Operator 时进行设置。您可以手动为每个集群应用标签,但我们建议使用 Cluster 配置。

接下来,您将创建 ClusterSelector,然后在另一项配置中引用它

向集群添加标签

如需使用 ClusterSelector,每个集群都必须具有一组可供选择的标签。您可以手动为集群添加标签,但建议您为每个集群使用 Cluster 配置。Cluster 配置存储在存储库的 clusterregistry/ 目录中。

以下示例 Cluster 配置声明 cluster-2 具有 environment: prod 标签。

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-2
  labels:
    environment: prod

您还可以使用 Cluster 配置来应用注释。

创建 ClusterSelector

借助 ClusterSelector,您可以仅选择具有指定标签或标签组合的集群。ClusterSelector 存储在存储库的顶级 clusterregistry/ 目录中。

以下 ClusterSelector 将仅选择具有 environment: prod 标签的集群。

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-env-prod
spec:
  selector:
    matchLabels:
      environment: prod

当您在另一个配置中引用 ClusterSelector 之后,该 ClusterSelector 才会生效。

引用 ClusterSelector

如需在其他配置中引用 ClusterSelector,请设置 configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME 注释。

以下配置会创建一个名为 namespace-reader 的 ClusterRole,该对象定义了一组用于读取命名空间的权限。此 ClusterRole 仅在与 selector-env-prod ClusterSelector 匹配的集群上进行实例化。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-reader
  annotations:
    configmanagement.gke.io/cluster-selector: selector-env-prod
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

限制受命名空间级配置影响的集群

默认情况下,Anthos Config Management 会将一个命名空间继承的配置应用到所有相关集群中的该命名空间。您可以使用 ClusterSelector 将配置仅应用于这些集群中的一部分。

例如,您可以根据集群的地理位置或其客户端的地理位置对集群进行不同的配置。在本地化或法规遵从方面,这会很有用。本部分中的示例仅将语言区域特定的配置应用于带有 location: france 标签的集群。

以下 Cluster 配置向名为 cluster-1 的集群添加一个 location: france 标签:

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-1
  labels:
    location: france

您可以手动为每个相关集群添加标签,但这样做可能会造成错误,因此不推荐这种做法。

创建一项 ClusterSelector 配置以用于引用您要选择的标签。以下 ClusterConfig 选择 location: france 标签:

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-location-france
spec:
  selector:
    matchLabels:
      location: france

当您在另一个配置中引用 ClusterSelector 之后,该 ClusterSelector 才会生效。 以下 RoleBinding 配置仅选择与 selector-location-france ClusterSelector 匹配的集群。举例来说,如果合规性指南只允许审核者审核指定地理区域内集群的相关信息,这种配置可能会有所帮助。

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: viewers
  annotations:
    configmanagement.gke.io/cluster-selector: selector-location-france
subjects:
- kind: Group
  name: system:serviceaccounts:audit
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

如果将该配置放入抽象命名空间或命名空间目录(例如 namespaces/online/shipping-app-backend/)中,那么该配置将应用于继承它的命名空间,但仅应用于具有 location: france 标签的集群。

后续步骤