Mengonfigurasi cluster dan objek cakupan cluster

Halaman ini menjelaskan cara mengonfigurasi cluster dan objek cakupan cluster. Anda juga dapat membaca cara mengonfigurasi namespace dan objek cakupan namespace.

Mengonfigurasi cluster dan objek cakupan cluster

Di repositori tidak terstruktur, Anda dapat mengatur konfigurasi untuk cluster dan objek cakupan cluster dengan cara yang paling nyaman bagi Anda. Semua konfigurasi yang diatur dengan cara ini berlaku untuk setiap cluster yang terdaftar di Config Sync.

Dalam repositori hierarki, semua konfigurasi untuk cluster dan objek cakupan cluster terletak di direktori cluster/. Semua konfigurasi dalam cluster/ berlaku untuk setiap cluster yang terdaftar di Config Sync.

Mengonfigurasi CustomResourceDefinitions

Dengan Config Sync, Anda dapat menyinkronkan CustomResourceDefinitions (CRD) dengan cara yang sama seperti menyinkronkan resource lain. Ada beberapa hal yang perlu diingat saat menyinkronkan CRD:

  • CRD dalam repositori hierarkis, bahkan saat mendeklarasikan Resource Kustom dengan namespace, harus ditempatkan di direktori cluster/.

  • Update CRD dan CustomResources terkaitnya tidak terjadi dalam urutan yang dapat diprediksi. Jika Anda memodifikasi CRD dan CustomResources terkait dalam commit yang sama, tidak akan ada harapan bahwa update CRD terjadi sebelum pembaruan Resource Kustom. Hal ini dapat menyebabkan nomos status melaporkan error sementara untuk jangka waktu singkat, hingga CustomResource dan CRD ada di cluster.

  • Config Sync tidak mengizinkan penghapusan CRD jika CustomResource di dalam repo bergantung padanya. Untuk menghapus CRD, Anda juga perlu menghapus CustomResource-nya. Sebaiknya Anda menghapus keduanya di commit yang sama dengan repo.

  • Anda dapat menyinkronkan CustomResource tanpa menyinkronkan CRD-nya, selama Anda dapat menjamin bahwa CRD sudah ada di cluster.

Membatasi cluster mana yang terpengaruh oleh konfigurasi

Secara default, Config Sync menerapkan konfigurasi ke setiap cluster yang terdaftar. Namun, jika perlu menerapkan konfigurasi hanya ke subset cluster, Anda dapat menambahkan anotasi cluster-name-selector atau ClusterSelector ke repositori Anda.

Anotasi cluster-name-selector menyediakan cara sederhana untuk menentukan subset cluster yang akan diberi konfigurasi. Opsi ini hanya mendukung pemilihan cluster berdasarkan nama.

Objek ClusterSelector mendukung pemilihan cluster berdasarkan label, tetapi memerlukan konfigurasi yang lebih kompleks.

Mengonfigurasi menggunakan anotasi cluster-name-selector

Anda dapat menerapkan konfigurasi ke subset cluster dengan anotasi configsync.gke.io/cluster-name-selector. Anda dapat menggunakan anotasi ini untuk menerapkan konfigurasi ke sekumpulan cluster, yang dilambangkan dengan nama cluster. Nilai anotasi adalah daftar nama cluster target yang dipisahkan koma. Anda dapat menerapkan anotasi pada objek cakupan cluster dan objek cakupan namespace. Objek namespace dipilih saat anotasi cocok dengan nama cluster dan saat namespace tempat cluster juga dipilih.

Pilih satu cluster

Konfigurasi berikut akan membuat Peran yang disebut namespace-reader, yang menentukan serangkaian izin untuk membaca namespace. Peran ini hanya diterapkan pada cluster yang memiliki nama 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"]

Pilih daftar cluster

Konfigurasi berikut akan membuat Peran yang sama dengan contoh sebelumnya, tetapi Peran ini hanya diterapkan pada cluster yang memiliki nama cluster-1, cluster-2, atau 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"]

Mengonfigurasi menggunakan objek ClusterSelector

ClusterSelector adalah jenis konfigurasi khusus yang menggunakan labelSelectors Kubernetes. Anda dapat menggunakan ClusterSelector untuk membatasi cluster tempat konfigurasi tertentu berlaku, berdasarkan label cluster. Anda juga dapat menggunakan ClusterSelectors untuk membatasi cluster yang membuat instance objek cakupan namespace.

Seperti labelSelectors lainnya, ClusterSelectors beroperasi menggunakan logika DAN. Karena ClusterSelectors menggunakan logika DAN, objek hanya dipilih jika cocok dengan semua label yang Anda tentukan.

Konfigurasi ClusterSelector tidak akan dipertahankan di cluster. Sebagai gantinya, Anda mereferensikannya dalam konfigurasi lain menggunakan anotasi, dan konfigurasi tersebut hanya berlaku untuk cluster yang cocok dengan ClusterSelector.

Sebelum Anda dapat menggunakan ClusterSelectors, setiap cluster harus memiliki nama unik dan kumpulan label yang dapat dipilih. Metadata cluster ditentukan dalam konfigurasi Cluster di sumber tepercaya.

Selanjutnya, Anda menambahkan label ke cluster, membuat ClusterSelector, lalu mereferensikannya dalam konfigurasi lain.

Menambahkan label ke cluster

Untuk menggunakan ClusterSelectors, setiap cluster harus memiliki kumpulan label yang dapat dipilih. Dalam repositori yang tidak terstruktur, konfigurasi Cluster dapat disimpan secara arbitrer di direktori konfigurasi atau direktori turunannya. Dalam repositori hierarkis, konfigurasi Cluster disimpan dalam direktori clusterregistry/.

Untuk menerapkan konfigurasi ke cluster, kolom metadata.name konfigurasi Cluster harus cocok dengan kolom clusterName objek ConfigManagement Anda.

Contoh konfigurasi Cluster berikut mendeklarasikan bahwa cluster-2 memiliki label environment: prod dan location: central.

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

Anda juga dapat menerapkan anotasi menggunakan konfigurasi Cluster.

Membuat ClusterSelector

ClusterSelector hanya memilih cluster dengan label tertentu atau kombinasi label. Dalam repositori tidak terstruktur, ClusterSelectors dapat disimpan secara bebas di direktori sinkronisasi atau direktori turunannya. Di repositori hierarkis, ClusterSelectors disimpan di direktori clusterregistry/ level teratas dalam repositori.

ClusterSelector berikut hanya memilih cluster dengan label environment: prod.

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

ClusterSelector berikut memilih cluster apa pun dengan label location: central atau 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 tidak berpengaruh sebelum Anda mereferensikannya dalam konfigurasi lain.

Mereferensikan ClusterSelector

Untuk mereferensikan ClusterSelector dalam konfigurasi lain, tetapkan anotasi configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.

Konfigurasi berikut akan membuat ClusterRole bernama namespace-reader yang menentukan sekumpulan izin untuk membaca namespace. ClusterRole ini hanya dibuat instance-nya pada cluster yang cocok dengan ClusterSelector selector-env-prod.

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

Membatasi cluster yang terpengaruh oleh konfigurasi cakupan namespace

Secara default, Config Sync menerapkan konfigurasi yang diwarisi oleh namespace ke namespace tersebut di setiap cluster tempatnya berada. Anda dapat menggunakan ClusterSelector untuk menerapkan konfigurasi hanya ke subset cluster tersebut.

Misalnya, Anda dapat mengonfigurasi cluster secara berbeda berdasarkan lokasi geografisnya atau lokasi geografis kliennya. Konfigurasi ini dapat berguna untuk pelokalan atau untuk kepatuhan hukum. Contoh di bagian ini menerapkan konfigurasi khusus lokalitas hanya untuk cluster dengan label location: france.

Konfigurasi Cluster berikut menambahkan label location: france ke cluster yang disebut cluster-1:

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

Buat konfigurasi ClusterSelector yang mereferensikan label yang ingin Anda pilih. ClusterConfig berikut memilih label location: france:

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

ClusterSelector tidak berpengaruh sampai Anda mereferensikannya dalam konfigurasi lain. Konfigurasi RoleBinding berikut hanya memilih cluster yang cocok dengan ClusterSelector selector-location-france. Konfigurasi ini mungkin berguna, misalnya, jika panduan kepatuhan hanya mengizinkan akun layanan tertentu untuk melihat informasi tentang cluster di wilayah geografis yang ditetapkan.

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

Jika Anda menempatkan konfigurasi ini dalam namespace abstrak atau direktori namespace, seperti namespaces/eng, konfigurasi ini akan diterapkan ke namespace yang mewarisinya, tetapi hanya pada cluster dengan label location: france.

Langkah selanjutnya