Config Sync memungkinkan Anda mengelola objek cakupan cluster secara deklaratif—seperti resource Namespace, ClusterRole, dan CustomResourceDefinition—di seluruh cluster Kubernetes dari sumber tepercaya pusat. Menyinkronkan konfigurasi cakupan cluster membantu Anda menerapkan kebijakan seluruh cluster, kontrol akses berbasis peran (RBAC), dan API kustom yang konsisten di seluruh fleet. Anda juga dapat menargetkan cluster tertentu menggunakan pemilih. Untuk mengelola resource dalam namespace individual, lihat Menyinkronkan objek ke beberapa 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 sesuai bagi Anda. Semua konfigurasi yang diatur dengan cara ini berlaku untuk setiap cluster yang terdaftar di Config Sync.
Mengonfigurasi CustomResourceDefinitions
Config Sync memungkinkan Anda menyinkronkan CustomResourceDefinitions (CRD) dengan cara yang sama seperti Anda menyinkronkan resource lainnya. Ada beberapa hal yang perlu diperhatikan saat menyinkronkan CRD:
Pembaruan pada CRD dan CustomResource yang sesuai tidak terjadi dalam urutan yang dapat diprediksi. Jika Anda mengubah CRD dan CustomResource yang sesuai dalam commit yang sama, tidak ada ekspektasi bahwa update CRD akan terjadi sebelum update Custom Resource. Hal ini dapat menyebabkan
nomos statusmelaporkan error sementara untuk waktu yang singkat, hingga CustomResource dan CRD ada di cluster.Config Sync tidak mengizinkan penghapusan CRD jika ada CustomResource dalam repositori yang bergantung padanya. Untuk menghapus CRD, Anda juga harus menghapus CustomResource-nya. Sebaiknya hapus keduanya dalam commit yang sama ke repositori.
Anda dapat menyinkronkan CustomResource tanpa menyinkronkan CRD-nya, asalkan Anda dapat menjamin bahwa CRD sudah ada di cluster.
Membatasi cluster 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 konfigurasi ClusterSelector ke repositori.
Anotasi cluster-name-selector menyediakan cara sederhana untuk menentukan subset cluster yang akan diterapkan konfigurasi. Opsi ini hanya mendukung pemilihan cluster berdasarkan nama.
Objek ClusterSelector mendukung pemilihan cluster berdasarkan label, tetapi memerlukan konfigurasi yang lebih kompleks.
Kedua opsi tersebut mengharuskan clusterName ditentukan di Config Sync pada cluster. Bergantung pada cara Anda menginstal Config Sync, Anda dapat memberikan nama cluster dengan cara berikut:
Jika Anda menginstal Config Sync menggunakan Google Cloud CLI atau konsol Cloud de Confiance :
clusterNameotomatis ditetapkan ke nama keanggotaan fleet.Jika Anda menginstal Config Sync secara manual menggunakan
kubectl, Anda harus menetapkan variabel lingkunganCLUSTER_NAMEpada deploymentreconciler-manager. Untuk mengetahui informasi selengkapnya, lihat Memberikan nama cluster untuk pemilih cluster.
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 ditunjukkan 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 berada juga dipilih.
Memilih satu cluster
Konfigurasi berikut membuat Peran bernama namespace-reader yang menentukan sekumpulan
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"]
Memilih daftar cluster
Konfigurasi berikut 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 mana yang akan diterapkan konfigurasi tertentu, berdasarkan label cluster. Anda juga dapat menggunakan ClusterSelector untuk membatasi cluster mana yang membuat instance objek cakupan namespace.
Seperti labelSelector lainnya, ClusterSelector beroperasi menggunakan logika AND. Karena ClusterSelector menggunakan logika AND, objek hanya dipilih jika cocok dengan semua label yang Anda tentukan.
Konfigurasi ClusterSelector tidak dipertahankan dalam 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 ClusterSelector, setiap cluster harus memiliki nama unik dan sekumpulan label yang dapat dipilih. Metadata cluster ditentukan dalam konfigurasi Cluster di sumber kebenaran Anda.
Selanjutnya, Anda menambahkan label ke cluster, membuat ClusterSelector, lalu mereferensikannya di konfigurasi lain.
Menambahkan label ke cluster
Untuk menggunakan ClusterSelector, setiap cluster harus memiliki kumpulan label yang dapat dipilih. Dalam repositori tidak terstruktur, konfigurasi Cluster dapat disimpan secara arbitrer di direktori konfigurasi atau direktori turunannya.
Untuk menerapkan konfigurasi ke cluster, kolom metadata.name dari 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 atau kombinasi label tertentu. Dalam repositori tidak terstruktur, ClusterSelector dapat disimpan secara arbitrer di direktori sinkronisasi atau direktori turunannya.
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 akan berpengaruh sampai Anda mereferensikannya di konfigurasi lain.
Mereferensikan ClusterSelector
Untuk mereferensikan ClusterSelector di konfigurasi lain, tetapkan anotasi
configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.
Konfigurasi berikut membuat ClusterRole bernama namespace-reader yang
menentukan sekumpulan izin untuk membaca namespace. ClusterRole ini hanya
diinstansiasi 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 kepatuhan hukum. Contoh di bagian ini
menerapkan konfigurasi khusus lokalitas hanya ke cluster dengan label location: france.
Konfigurasi Cluster berikut menambahkan label location: france ke cluster bernama 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 akan berpengaruh sampai Anda mereferensikannya di konfigurasi lain.
Konfigurasi RoleBinding berikut hanya memilih cluster yang cocok dengan
selector-location-france ClusterSelector. Konfigurasi ini mungkin berguna,
misalnya, jika pedoman kepatuhan hanya mengizinkan akun layanan tertentu
untuk melihat informasi tentang cluster di wilayah geografis yang ditentukan.
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 di 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 berikutnya
- Pelajari lebih lanjut cara mengonfigurasi namespace dan objek cakupan namespace