클러스터의 하위 집합만 구성

일반적으로 Anthos Config Management는 등록된 각 클러스터에 구성을 적용합니다. 구성이 namespaces/ 하위 디렉터리 내에 있으면 Anthos Config Management는 먼저 각 클러스터에 네임스페이스를 만든 후 상속된 모든 구성을 네임스페이스에 적용합니다.

ClusterSelector는 Kubernetes labelSelector를 사용하는 특수 유형의 구성입니다. ClusterSelector를 사용하면 클러스터 라벨에 따라 특정 구성을 적용할 클러스터를 제한할 수 있습니다. 또한 ClusterSelector를 사용하여 네임스페이스 범위 객체를 인스턴트화하는 클러스터를 제한할 수 있습니다.

ClusterSelector 구성은 클러스터에서 지속되지 않습니다. 대신 주석을 사용하여 다른 구성에서 참조하며 해당 구성은 ClusterSelector와 일치하는 클러스터에만 적용됩니다.

ClusterSelector를 사용하려면 각 클러스터마다 고유한 이름이 있어야 합니다. Config Management Operator를 구성할 때 클러스터 이름을 설정합니다. 각 클러스터에 라벨을 직접 적용할 수도 있지만 클러스터 구성을 사용하는 것이 좋습니다.

다음으로 ClusterSelector를 만들고 다른 구성에서 참조합니다.

클러스터에 라벨 추가

ClusterSelector를 사용하려면 각 클러스터에 선택할 수 있는 라벨 집합이 있어야 합니다. 수동으로 클러스터에 라벨을 지정할 수 있지만 클러스터마다 클러스터 구성을 사용하는 것이 좋습니다. 클러스터 구성은 저장소의 clusterregistry/ 디렉터리에 저장됩니다.

다음의 클러스터 구성 예시에서는 cluster-2environment: prod 라벨이 있다고 선언합니다.

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

클러스터 구성을 사용하여 주석을 적용할 수도 있습니다.

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를 참조하려면 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 라벨이 지정된 클러스터에만 언어별 구성을 적용합니다.

다음 클러스터 구성은 location: france 라벨을 cluster-1이라는 클러스터에 추가합니다.

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는 다른 구성에서 참조하기 전까지 어떠한 영향도 주지 않습니다. 다음 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 라벨이 지정된 클러스터에만 해당됩니다.

다음 단계