Config Sync mengurangi risiko "operasi bayangan" melalui pemulihan mandiri otomatis, sinkronisasi ulang berkala, dan pencegahan penyimpangan opsional. Saat Config Sync mendeteksi penyimpangan di antara cluster dan sumber kebenaran, cluster tersebut dapat diizinkan dan dengan cepat dikembalikan atau ditolak sepenuhnya.
Pemulihan mandiri mengawasi resource yang dikelola, mendeteksi penyimpangan dari sumber kebenaran, dan mengembalikan penyimpangan tersebut. Pemulihan mandiri selalu diaktifkan.
Sinkronisasi ulang berkala secara otomatis melakukan sinkronisasi satu jam setelah sinkronisasi terakhir yang berhasil, bahkan jika tidak ada perubahan pada sumber kebenaran. Sinkronisasi ulang berkala adalah selalu diaktifkan.
Sementara pemulihan mandiri dan sinkronisasi ulang berkala membantu memperbaiki penyimpangan, pencegahan penyimpangan
mencegat permintaan untuk mengubah objek terkelola dan memvalidasi apakah perubahan tersebut
harus diizinkan. Jika perubahan tidak cocok dengan sumber kebenaran,
perubahan ditolak. Pencegahan drift dinonaktifkan secara default. Saat diaktifkan, drift
pencegahan melindungi objek RootSync
secara default, dan juga dapat dikonfigurasi untuk melindungi
RepoSync
objek.
Untuk menggunakan pencegahan penyimpangan, Anda harus mengaktifkan
API RootSync
dan RepoSync
.
Aktifkan pencegahan penyimpangan
Tetapkan kolom
preventDrift
dalam file konfigurasi ketrue
dan terapkan file konfigurasi:gcloud
Aktifkan pencegahan penyimpangan menggunakan gcloud CLI jika Anda menginstal Config Sync menggunakan Konsol Google Cloud atau gcloud CLI. Pastikan untuk mengupdate gcloud CLI ke versi terbaru. Menetapkan kolom
spec.configSync.preventDrift
dari gcloud file konfigurasi ketrue
, lalu terapkan file konfigurasi gcloud.kubectl
Aktifkan pencegahan penyimpangan menggunakan
kubectl
jika Anda menginstal Config Sync secara manual menggunakankubectl
. Tetapkan kolomspec.preventDrift
dari objekConfigManagement
ketrue
, lalu terapkan objekConfigManagement
.Tunggu hingga objek
ValidateWebhookConfiguration
Config Sync dibuat oleh ConfigManagement Operator:kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.io
Anda akan melihat output yang mirip dengan contoh berikut:
NAME WEBHOOKS AGE admission-webhook.configsync.gke.io 0 2m15s
Lakukan perubahan baru pada sumber kebenaran yang akan disinkronkan sehingga
root-reconciler
Deployment dapat menambahkan webhook ke Config Sync Memvalidasi objek WebhookConfiguration. Alternatifnya adalah dengan menghapus Deploymentroot-reconcilier
untuk memicu rekonsiliasi. Deploymentroot-reconciler
baru akan mengupdate objek Config Sync ValidatingWebhookConfiguration.Tunggu hingga server webhook siap. Webhook penerimaan Config Sync Log deployment harus menyertakan
serving webhook server
. Proses ini dapat memerlukan waktu beberapa menit.kubectl logs -n config-management-system -l app=admission-webhook --tail=-1 | grep "serving webhook server"
Anda akan melihat output yang mirip dengan contoh berikut:
I1201 18:05:41.805531 1 deleg.go:130] controller-runtime/webhook "level"=0 "msg"="serving webhook server" "host"="" "port"=10250 I1201 18:07:04.626199 1 deleg.go:130] controller-runtime/webhook "level"=0 "msg"="serving webhook server" "host"="" "port"=10250
Nonaktifkan pencegahan penyimpangan
gcloud
Nonaktifkan pencegahan penyimpangan menggunakan gcloud CLI jika Anda menginstal Config Sync menggunakan Konsol Google Cloud atau gcloud CLI.
Pastikan untuk mengupdate gcloud CLI
ke versi terbaru.
Menetapkan kolom spec.configSync.preventDrift
dari gcloud
file konfigurasi ke false
atau hapus kolom, lalu terapkan
file konfigurasi gcloud.
kubectl
Nonaktifkan pencegahan penyimpangan menggunakan kubectl
jika Anda menginstal Config Sync secara manual menggunakan kubectl
.
Tetapkan kolom spec.preventDrift
dari objek ConfigManagement
ke
false
atau hapus kolom, lalu terapkan objek ConfigManagement
.
Tindakan ini akan menghapus semua resource webhook penerimaan Config Sync.
Karena objek ValidatingWebhookConfiguration
Config Sync sudah tidak ada,
rekonsiliasi Config Sync tidak lagi menghasilkan konfigurasi webhook untuk
resource terkelola.
Mengaktifkan webhook penerimaan di sumber cakupan namespace
Sumber tepercaya cakupan namespace tidak sepenuhnya dilindungi oleh webhook. Tujuan
Rekonsiliasi Config Sync untuk setiap sumber namespace tidak memiliki izin untuk
membaca atau memperbarui objek ValidatingWebhookConfiguration
di level cluster.
Tidak adanya izin ini menyebabkan error pada log rekonsiliasi namespace mirip dengan contoh berikut:
Failed to update admission webhook: KNV2013: applying changes to
admission webhook: Insufficient permission. To fix, make sure the reconciler has
sufficient permissions.:
validatingwebhookconfigurations.admissionregistration.k8s.io "admission-
webhook.configsync.gke.io" is forbidden: User "system:serviceaccount:config-
management-system:ns-reconciler-NAMESPACE" cannot update resource
"validatingwebhookconfigurations" in API group "admissionregistration.k8s.io" at
the cluster scope
Anda dapat mengabaikan error ini jika tidak ingin menggunakan perlindungan webhook untuk
sumber tepercaya cakupan namespace. Namun, jika Anda ingin menggunakan webhook, berikan
izin ke rekonsiliasi untuk setiap sumber kebenaran cakupan namespace setelah Anda
sinkronisasi yang dikonfigurasi dari beberapa sumber tepercaya.
Anda mungkin tidak perlu melakukan langkah-langkah ini jika RoleBinding untuk
ns-reconciler-NAMESPACE
sudah ada dengan izin ClusterRole cluster-admin
.
Di sumber kebenaran, deklarasikan konfigurasi ClusterRole baru yang memberikan izin ke webhook penerimaan Config Sync. ClusterRole ini saja perlu ditentukan sekali per cluster:
# ROOT_SOURCE/cluster-roles/webhook-role.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: admission-webhook-role rules: - apiGroups: ["admissionregistration.k8s.io"] resources: ["validatingwebhookconfigurations"] resourceNames: ["admission-webhook.configsync.gke.io"] verbs: ["get", "update"]
Untuk setiap sumber cakupan namespace yang memerlukan izin webhook penerimaan membutuhkan izin untuk diberikan, deklarasikan konfigurasi ClusterRoleBinding untuk memberikan akses ke webhook penerimaan:
# ROOT_SOURCE/NAMESPACE/sync-webhook-rolebinding.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: syncs-webhook subjects: - kind: ServiceAccount name: ns-reconciler-NAMESPACE namespace: config-management-system roleRef: kind: ClusterRole name: admission-webhook-role apiGroup: rbac.authorization.k8s.io
Ganti
NAMESPACE
dengan namespace yang telah telah membuat sumber cakupan namespace.Commit perubahan ke sumber tepercaya, misalnya, jika menyinkronkan dari Repositori Git:
git add . git commit -m 'Providing namespace repository the permission to update the admission webhook.' git push
Untuk memverifikasi, gunakan
kubectl get
untuk memastikan ClusterRole dan ClusterRoleBinding telah dibuat:kubectl get clusterrole admission-webhook-role kubectl get clusterrolebindings syncs-webhook
Nonaktifkan pencegahan penyimpangan untuk resource yang diabaikan
Saat Anda menghapus objek RootSync
atau RepoSync
, Config Sync secara default tidak
mengubah resource yang sebelumnya dikelola oleh objek RootSync
atau RepoSync
tersebut. Hal ini dapat
tinggalkan beberapa label dan
anotasi yang
Config Sync yang digunakan untuk melacak objek resource ini. Jika perlindungan penyimpangan
diaktifkan, tindakan ini dapat menyebabkan perubahan pada
resource yang dikelola sebelumnya
ditolak.
Jika Anda tidak menggunakan penghapusan propagasi, resource yang tertinggal mungkin masih mempertahankan label dan anotasi yang ditambahkan oleh Sinkronisasi Konfigurasi.
Jika Anda ingin mempertahankan resource terkelola tersebut, batalkan pengelolaan resource ini sebelum
menghapus objek RootSync
atau RepoSync
dengan menyetel
configmanagement.gke.io/managed
ke disabled
di setiap anotasi
resource yang dideklarasikan
dalam sumber kebenaran. Tindakan ini akan memberi tahu Config Sync untuk menghapus
label dan anotasinya dari resource yang dikelola, tanpa menghapusnya
Google Cloud Platform. Setelah sinkronisasi selesai, Anda dapat menghapus RootSync
atau RepoSync
.
Jika ingin menghapus resource terkelola ini, Anda memiliki dua opsi:
- Hapus resource terkelola dari sumber tepercaya. Lalu, Config Sync
akan menghapus objek terkelola dari cluster. Setelah sinkronisasi selesai,
Anda dapat menghapus objek
RootSync
atauRepoSync
. - Aktifkan penerapan penghapusan pada objek
RootSync
atauRepoSync
sebelum menghapusnya. Lalu: Config Sync akan menghapus objek terkelola dari cluster.
Jika objek RootSync
atau RepoSync
dihapus sebelum tidak mengelola atau menghapusnya
resource terkelola, Anda dapat membuat ulang objek RootSync
atau RepoSync
, dan
mengadopsi resource di cluster yang sesuai dengan sumber kebenaran. Selanjutnya Anda dapat
membatalkan pengelolaan atau menghapus resource, menunggu perubahan disinkronkan, dan menghapus
Objek RootSync
atau RepoSync
lagi.
Langkah selanjutnya
- Pelajari cara memecahkan masalah webhook.