Config Sync mengurangi risiko "shadow ops" melalui pemulihan mandiri otomatis, sinkronisasi ulang berkala, dan pencegahan penyimpangan opsional. Saat mendeteksi penyimpangan antara cluster dan sumber tepercaya, Config Sync dapat mengizinkan penyimpangan tersebut dan mengembalikannya dengan cepat atau menolaknya sepenuhnya.
Self-healing memantau resource yang dikelola, mendeteksi penyimpangan dari sumber tepercaya, dan mengembalikan penyimpangan tersebut. Pemulihan mandiri selalu diaktifkan.
Sinkronisasi ulang berkala otomatis menyinkronkan satu jam setelah sinkronisasi terakhir yang berhasil, meskipun tidak ada perubahan yang dilakukan pada sumber tepercaya. Sinkronisasi ulang berkala selalu diaktifkan.
Meskipun pemulihan mandiri dan sinkronisasi ulang berkala membantu memperbaiki penyimpangan, pencegahan penyimpangan
mencegat permintaan untuk mengubah objek terkelola dan memvalidasi apakah perubahan
harus diizinkan. Jika perubahan tidak cocok dengan sumber tepercaya, perubahan akan ditolak. Pencegahan penyimpangan dinonaktifkan secara default. Jika diaktifkan, pencegahan
penyimpangan melindungi objek RootSync
secara default, dan juga dapat dikonfigurasi untuk melindungi
objek RepoSync
.
Untuk menggunakan pencegahan penyimpangan, Anda harus mengaktifkan
RootSync
dan RepoSync
API.
Mengaktifkan pencegahan penyimpangan
Jika Anda menggunakan konsol Google Cloud atau gcloud CLI untuk menginstal Config Sync, aktifkan pencegahan penyimpangan menggunakan gcloud CLI. Pastikan untuk mengupdate gcloud CLI ke versi terbaru. Tetapkan kolom
spec.configSync.preventDrift
file konfigurasi gcloud ketrue
, lalu terapkan file konfigurasi gcloud.Tunggu hingga objek
ValidateWebhookConfiguration
Config Sync dibuat oleh Operator ConfigManagement:kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.io
Anda akan melihat output yang mirip dengan contoh berikut ini:
NAME WEBHOOKS AGE admission-webhook.configsync.gke.io 0 2m15s
Lakukan perubahan baru ke sumber tepercaya yang akan disinkronkan sehingga Deployment
root-reconciler
dapat menambahkan webhook ke objek ValidatingWebhookConfiguration Config Sync. Alternatifnya adalah menghapus Deploymentroot-reconcilier
untuk memicu rekonsiliasi. Deploymentroot-reconciler
baru akan memperbarui objek ValidatingWebhookConfiguration Config Sync.Tunggu hingga server webhook siap. Log deployment webhook penerimaan Config Sync 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 ini:
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
Menonaktifkan pencegahan penyimpangan
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.
Tetapkan kolom spec.configSync.preventDrift
file konfigurasi gcloud ke false
atau hapus kolom tersebut, lalu terapkan file konfigurasi gcloud.
Tindakan ini akan menghapus semua resource webhook penerimaan Config Sync.
Karena objek ValidatingWebhookConfiguration
Config Sync tidak ada lagi,
rekonsiliasi Config Sync tidak lagi membuat konfigurasi webhook untuk
resource terkelola.
Mengaktifkan webhook penerimaan di sumber cakupan namespace
Sumber kebenaran cakupan namespace tidak sepenuhnya dilindungi oleh webhook. Rekonsiliasi Config Sync untuk setiap sumber namespace tidak memiliki izin untuk membaca atau mengupdate objek ValidatingWebhookConfiguration
di tingkat cluster.
Kurangnya izin ini akan menyebabkan error pada log rekonsiliasi namespace yang 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 yang tercakup dalam namespace. Namun, jika Anda ingin menggunakan webhook, berikan
izin ke reconciler untuk setiap sumber tepercaya yang tercakup dalam namespace setelah Anda
mengonfigurasi sinkronisasi dari lebih dari satu 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 root, deklarasikan konfigurasi ClusterRole baru yang memberikan izin ke webhook penerimaan Config Sync. ClusterRole ini hanya perlu ditentukan satu kali 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 yang tercakup dalam namespace tempat izin webhook penerimaan perlu 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 tempat Anda membuat sumber yang tercakup namespace.Lakukan perubahan pada sumber tepercaya utama, 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
Menonaktifkan pencegahan penyimpangan untuk resource yang ditinggalkan
Saat Anda menghapus objek RootSync
atau RepoSync
, secara default Config Sync tidak
mengubah resource yang sebelumnya dikelola oleh objek RootSync
atau RepoSync
tersebut. Hal ini dapat
meninggalkan beberapa label dan
anotasi yang
digunakan Config Sync untuk melacak objek resource ini. Jika perlindungan penyimpangan diaktifkan, hal ini dapat menyebabkan perubahan pada resource yang dikelola sebelumnya ditolak.
Jika Anda tidak menggunakan penghapusan propagasi, objek resource yang tertinggal mungkin masih mempertahankan label dan anotasi yang ditambahkan oleh Config Sync.
Jika Anda ingin mempertahankan resource terkelola ini, batalkan pengelolaan resource ini sebelum
menghapus objek RootSync
atau RepoSync
dengan menyetel
anotasi configmanagement.gke.io/managed
ke disabled
pada setiap resource
terkelola yang dideklarasikan dalam sumber tepercaya. Tindakan ini memberi tahu Config Sync untuk menghapus label dan anotasinya dari resource terkelola, tanpa menghapus resource tersebut. Setelah sinkronisasi selesai, Anda dapat menghapus objek RootSync
atau RepoSync
.
Jika ingin menghapus resource terkelola ini, Anda memiliki dua opsi:
- Hapus resource terkelola dari sumber tepercaya. Kemudian, Config Sync
akan menghapus objek terkelola dari cluster. Setelah sinkronisasi selesai,
Anda dapat menghapus objek
RootSync
atauRepoSync
. - Aktifkan propagasi penghapusan pada objek
RootSync
atauRepoSync
sebelum menghapusnya. Kemudian, Config Sync akan menghapus objek terkelola dari cluster.
Jika objek RootSync
atau RepoSync
dihapus sebelum membatalkan pengelolaan atau menghapus
resource terkelolanya, Anda dapat membuat ulang objek RootSync
atau RepoSync
, dan objek tersebut
akan mengadopsi resource di cluster yang cocok dengan sumber tepercaya. Kemudian, Anda dapat
membatalkan pengelolaan atau menghapus resource, menunggu perubahan disinkronkan, dan menghapus objek
RootSync
atau RepoSync
lagi.
Langkah berikutnya
- Pelajari cara memecahkan masalah webhook.