クラスタのサブセットのみを構成する

通常、Anthos Config Management は登録済みの各クラスタにコンフィグを適用します。コンフィグが namespaces/ サブディレクトリ内にある場合、Anthos Config Management は、まず各クラスタ内に名前空間を作成し、次に継承されたすべてのコンフィグをその名前空間に適用します。

ClusterSelector は、Kubernetes の labelSelector を使用する特別なタイプのコンフィグです。 ClusterSelector を使用することで、特定のコンフィグを適用する対象のクラスタを、クラスタのラベルに基づいて制限できます。ClusterSelector を使用して、名前空間スコープ オブジェクトをインスタンス化するクラスタを制限することもできます。

ClusterSelector 構成はクラスタ内で維持されません。代わりに、アノテーションを使用して別のコンフィグで参照します。このコンフィグは ClusterSelector に一致するクラスタにのみ適用されます。

ClusterSelector を使用する前に、各クラスタに一意の名前を付ける必要があります。クラスタの名前は、Config Management Operator を構成するときに設定します。各クラスタにラベルを手動で適用できますが、Cluster コンフィグを使用することをおすすめします。

次に、ClusterSelector を作成して、別のコンフィグで参照します。

ラベルをクラスタに追加する

ClusterSelector を使用するには、各クラスタに選択可能なラベルのセットが必要です。クラスタに手動でラベルを付けることもできますが、クラスタごとに Cluster コンフィグを使用することをおすすめします。Cluster コンフィグはリポジトリの clusterregistry/ ディレクトリに保存されています。

次の Cluster コンフィグの例では、cluster-2environment: 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 を別のコンフィグで参照するには、アノテーション 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 は、名前空間によって継承されたコンフィグを、存在する各クラスタの Namespace に適用します。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 は、別の構成で参照しなければ効果はありません。 次の 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 ラベルを持つクラスタ上の名前空間のみに適用されます。

次のステップ