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

일반적으로 구성 동기화는 등록된 각 클러스터에 구성을 적용합니다. 구성이 계층적 저장소namespaces/ 하위 디렉터리 내에 있는 경우 Config Sync는 먼저 각 클러스터에 네임스페이스를 만든 다음 상속된 모든 구성을 해당 네임스페이스에 적용합니다.

하지만 클러스터의 하위 집합에 구성을 적용할 수 있습니다. 버전 1.6.1부터는 구성에 configsync.gke.io/cluster-name-selector 주석을 추가할 수 있습니다. 1.6.1 이전 버전을 사용하는 경우 ClusterSelector를 사용할 수 있습니다.

클러스터 선택기 주석 사용

configsync.gke.io/cluster-name-selector 주석을 사용하여 클러스터 이름으로 표시된 클러스터 집합에 구성을 적용할 수 있습니다. 주석 값은 쉼표로 구분된 대상 클러스터 이름 목록입니다. 클러스터 범위 객체와 네임스페이스 범위 객체에 주석을 적용할 수 있습니다. 주석이 클러스터 이름과 일치하고 클러스터가 속한 네임스페이스도 선택된 경우 네임스페이스 객체가 선택됩니다.

단일 클러스터 선택

다음 구성은 네임스페이스 읽기에 대한 권한 집합을 정의하는 namespace-reader라는 역할을 만듭니다. 이 역할은 이름이 cluster-1인 클러스터에서만 인스턴스화됩니다.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: namespace-reader
  annotations:
    configsync.gke.io/cluster-name-selector: cluster-1
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

클러스터 목록 선택

다음 구성은 이전 예시와 동일한 역할을 만들지만 이 역할은 cluster-1, cluster-2 또는 cluster-3이라는 이름의 클러스터에서만 인스턴스화됩니다.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: namespace-reader
  annotations:
    configsync.gke.io/cluster-name-selector: cluster-1,cluster-2,cluster-3
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

ClusterSelector 사용

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

다른 labelSelector와 마찬가지로 ClusterSelector는 AND 로직을 사용하여 작동합니다. ClusterSelector는 AND 로직을 사용하므로 정의한 모든 라벨과 일치하는 경우에만 객체가 선택됩니다.

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

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

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

클러스터에 라벨 추가

ClusterSelector를 사용하려면 각 클러스터에 선택할 수 있는 라벨 집합이 있어야 합니다. 수동으로 클러스터에 라벨을 지정할 수 있지만 클러스터마다 클러스터 구성을 사용하는 것이 좋습니다. 비구조적 저장소에서 클러스터 구성은 동기화 디렉터리 또는 종속 디렉터리에 임의로 저장될 수 있습니다. 계층적 저장소에서 클러스터 구성은 Git 저장소의 clusterregistry/ 디렉터리에 저장됩니다.

config-management.yaml 파일의 clusterName 필드는 클러스터 구성 중 하나 이상의 metadata.name 필드와 일치해야 합니다.

다음 클러스터 구성 예시에서는 cluster-2environment: prodlocation: central 라벨이 포함되도록 선언합니다.

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

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

ClusterSelector 만들기

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는 location: central 또는 location: west 라벨이 있는 클러스터를 선택합니다.

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-central-or-west
spec:
  selector:
    matchExpressions:
      - key: location
        operator: In
        values:
        - central
        - west 

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"]

네임스페이스 범위 구성 영향을 받는 클러스터 제한

기본적으로 구성 동기화는 네임스페이스에서 상속하는 구성을 각 클러스터의 네임스페이스에 적용합니다. 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:foo
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

이 구성을 추상 네임스페이스 또는 네임스페이스 디렉터리(예: namespaces/eng)에 배치하면 클러스터를 상속하는 네임스페이스에 적용되지만 location: france 라벨이 지정된 클러스터에만 해당됩니다.

다음 단계