26. Bootstrap multi-zona

Perkiraan waktu penyelesaian: 3 jam

Pemilik komponen yang dapat dioperasikan: MZ

Profil keterampilan: engineer deployment

26.1. Ringkasan

Bootstrapping multi-zona melibatkan penyiapan bidang kontrol global root. Zona pertama di semesta menetapkan bidang kontrol global. Zona tambahan bergabung dengan bidang kontrol global. Bergabung dengan bidang kontrol global adalah proses yang lebih rumit daripada membuat bidang kontrol, karena kepercayaan harus dibangun antara bidang kontrol global semesta dan zona baru. Saat bergabung dengan bidang kontrol global, ada dua zona yang terlibat:

  • Zona anchor: zona yang sudah menjadi bagian dari bidang kontrol global. Ini harus berupa zona yang instance GitLab-nya digunakan untuk menerapkan perubahan infrastruktur sebagai kode (IaC) ke API global semesta.
  • Zona yang bergabung: zona yang bergabung dengan bidang kontrol global.

Anda melakukan bootstrapping zona pertama alam semesta di Initialize multi-zone. Zona tersebut berfungsi sebagai zona anchor saat zona lain bergabung dengan semesta.

Jika sudah ada API global di semesta dan Anda melakukan bootstrapping zona yang bergabung dengan semesta, selesaikan langkah-langkah berikut.

26.2. Memulai multi-zona di zona yang bergabung dengan semesta

Konfirmasi bahwa Anda telah melakukan bootstrapping multi-zona di zona anchor sebelum melanjutkan.

26.2.1. Mulai Penampung Alat IO

Untuk keamanan dan auditabilitas, proses bootstrapping multi-zona harus dilakukan menggunakan kredensial pribadi untuk mengakses Kubernetes (bukan konfigurasi Kubernetes administrator) dan IaC untuk persetujuan banyak pihak atas permintaan otorisasi untuk melakukan tindakan sensitif. Semua alat yang diperlukan untuk melakukan tindakan bootstrapping disertakan dalam Container Alat IO. Lihat proses Penyiapan Container Alat IO OOPS-P0065 untuk mengetahui cara memulai container di lingkungan OIC. Zona yang bergabung dengan bidang kontrol global melibatkan interaksi dengan dua zona, salah satunya (zona anchor) tidak beroperasi dalam kondisi hari ke-0, sehingga langkah-langkah autentikasi dan otorisasi tingkat produksi harus diterapkan untuk memastikan keamanan zona anchor tidak terganggu.

26.2.2. Melakukan inisialisasi repositori Gitlab

Gunakan kredensial dari penyedia identitas (IdP) yang dikonfigurasi di Penyiapan infrastruktur sebagai kode dan ikuti proses OOPS-P0066 untuk mengelola akses pengguna GitLab.

Buat clone repositori IaC zona penahan:

git clone https://iac.GLOBAL_DNS_DOMAIN/gdch/iac.git /tmp/iac

Ganti GLOBAL_DNS_DOMAIN dengan domain DNS untuk semesta.

Berikan nama pengguna dan sandi saat diminta.

26.2.3. Menambahkan peran yang diperlukan

Ikuti petunjuk dalam runbook Proses elevasi akses dan hak istimewa IAM-R0005 untuk membuat cluster-role dan binding peran yang diperlukan:

  • Tambahkan binding peran cluster dengan peran cluster mz-bootstrap-joining-editor di cluster root-admin zona gabungan.
  • Tambahkan binding peran cluster dengan peran cluster mz-bootstrap-anchor-reader di cluster root-admin zona anchor.
  • Tambahkan binding peran dengan peran mz-bootstrap-viewer di namespace mz-system di API global zona anchor.

26.2.4. Buat permintaan token

Saat bergabung dengan bidang kontrol global, kontak dibuat antara zona yang bergabung dan zona anchor menggunakan token bootstrap API global. Permintaan token digunakan untuk meminta token dari API global di zona penambat.

  1. Buat cabang baru untuk permintaan penggabungan:

    cd /tmp/iac
    git checkout -b JOINING_ZONE_NAME-mz-token-request
    

    Ganti JOINING_ZONE_NAME dengan nama zona yang berasal dari Kuesioner Penerimaan Pelanggan seperti yang dijelaskan dalam catatan di akhir bagian.

  2. Login ke zona gabung. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya. Tindakan ini diperlukan karena perintah gdcloud pada langkah berikutnya berinteraksi dengan cluster admin root di zona yang bergabung untuk mendapatkan pasangan kunci enkripsi kunci publik guna mentransfer token bootstrap secara aman dari zona anchor ke zona yang bergabung.

  3. Buat file YAML permintaan token:

    gdcloud system multi-zone create-token-request --cluster root --zone JOINING_ZONE_NAME --client-type api-join --namespace global-kube-system --output-file /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yaml
    
  4. Buat atau perbarui file kustomization.yaml.

    1. Buka file:

      vim infrastructure/global/orgs/root/kustomization.yaml
      
    2. Jika file sudah ada, tambahkan item mz-token-request.yaml ke daftar resources. Atau, tambahkan yaml resource lengkap:

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      metadata:
        name: global-root-kustomization
      resources:
      - mz-token-request.yaml
      
    3. Simpan file dan keluar dari vim.

  5. Lakukan perubahan pada cabang:

    git add infrastructure
    git commit
    
  6. Kirim branch ke GitLab:

    git push
    
  7. Gabungkan perubahan ke cabang main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.

26.2.5. Buat token

Ikuti langkah-langkah berikut untuk membuat token bootstrap di zona gabungan:

  1. Buat cabang baru untuk permintaan penggabungan:

    cd /tmp/iac
    git checkout main
    git pull --ff-only
    git checkout -b JOINING_ZONE_NAME-mz-token
    
  2. Login ke zona penanda. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya. Hal ini diperlukan karena perintah gdcloud pada langkah berikutnya berinteraksi dengan API global di zona anchor untuk membuat dan mengenkripsi token bootstrap.

  3. Buat file YAML token:

    gdcloud system multi-zone create-token --zone JOINING_ZONE_NAME --namespace global-kube-system --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yaml
    
  4. Buat atau perbarui file kustomization.yaml.

    1. Buka file:

      vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml
      
    2. Jika file sudah ada, tambahkan item mz-token.yaml ke daftar resources. Atau, tambahkan YAML resource lengkap:

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      metadata:
        name: root-admin-kustomization
      resources:
      - mz-token.yaml
      
    3. Simpan file dan keluar dari vim.

  5. Lakukan perubahan pada cabang:

    git add infrastructure
    git commit
    
  6. Kirim branch ke GitLab:

    git push
    
  7. Gabungkan perubahan ke cabang main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.

26.2.6. Buat resource bootstrap

Ikuti langkah-langkah berikut untuk membuat resource bootstrap di cluster admin root zona gabungan:

  1. Buat cabang baru untuk permintaan penggabungan:

    cd /tmp/iac
    git checkout main
    git pull --ff-only
    git checkout -b JOINING_ZONE_NAME-mz-bootstrap
    
  2. Login ke zona penanda. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya. Hal ini diperlukan karena selama operasi penggabungan, perintah gdcloud pada langkah berikutnya berinteraksi dengan cluster admin root di zona anchor untuk mengambil informasi konektivitas guna berinteraksi dengan API global di zona anchor.

  3. Buat file YAML bootstrap:

    gdcloud system multi-zone create-bootstrap --type join --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-bootstrap.yaml
    
  4. Buat atau perbarui file kustomization.yaml:

    1. Buka file:

      vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml
      
    2. Jika file sudah ada, tambahkan item mz-token.yaml ke daftar resources. Atau, tambahkan YAML resource lengkap:

      apiVersion: kustomize.config.k8s.io/v1beta1
      kind: Kustomization
      metadata:
        name: root-admin-kustomization
      resources:
      - mz-bootstrap.yaml
      
    3. Simpan file dan keluar dari vim.

  5. Lakukan perubahan pada cabang:

    git add infrastructure
    git commit
    
  6. Kirim branch ke GitLab:

    git push
    
  7. Gabungkan perubahan ke cabang main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.

Setelah perubahan digabungkan, IaC akan menyebarkan resource Bootstrap ke cluster admin root zona baru tempat resource tersebut disesuaikan. Ini adalah operasi asinkron, sehingga API global tidak akan langsung tersedia setelah penggabungan.

26.2.7. Memvalidasi keberhasilan deployment API global

Untuk memvalidasi deployment API global, ikuti langkah-langkah berikut:

  1. Login ke zona gabung. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya.

  2. Dapatkan konfigurasi Kubernetes untuk API global root (global-api). Lihat runbook IAM-R0004 untuk mengetahui detailnya.

  3. Verifikasi konektivitas dengan API global di zona bergabung:

    kubectl version
    

26.2.8. Hapus pasangan kunci

Untuk menghapus pasangan kunci yang digunakan untuk mentransfer token bootstrap dari zona anchor ke zona gabungan, ikuti langkah-langkah berikut:

  1. Login ke zona gabung. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya.

  2. Dapatkan konfigurasi Kubernetes untuk cluster admin root (root-admin). Lihat runbook IAM-R0004 untuk mengetahui detailnya.

  3. Jalankan perintah berikut untuk menghapus pasangan kunci:

    kubectl delete keypair -n global-kube-system kp
    

26.2.9. Menghapus permintaan token

Untuk menghapus file YAML permintaan token, ikuti langkah-langkah berikut:

  1. Buat cabang baru untuk permintaan penggabungan:

    cd /tmp/iac
    git checkout main
    git pull --ff-only
    git checkout -b JOINING_ZONE_NAME-mz-token-request-delete
    
  2. Hapus file YAML permintaan token:

    rm /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yaml
    
  3. Perbarui file kustomization.yaml.

    1. Buka file:

      vim infrastructure/global/orgs/root/kustomization.yaml
      
    2. Hapus item mz-token-request.yaml dari daftar resources, simpan file, dan keluar dari vim.

  4. Lakukan perubahan pada cabang:

    git add infrastructure
    git commit
    
  5. Kirim branch ke GitLab:

    git push
    
  6. Gabungkan perubahan ke cabang main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.

26.2.10. Membersihkan token

Setelah API global tersedia di zona gabungan, hapus token karena tidak lagi diperlukan:

  1. Buat cabang baru untuk permintaan penggabungan:

    cd /tmp/iac
    git checkout main
    git pull --ff-only
    git checkout -b JOINING_ZONE_NAME-mz-token-delete
    
  2. Hapus file YAML token:

    rm /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yaml
    
  3. Perbarui file kustomization.yaml jika sudah ada.

    1. Buka file:

      vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml
      
    2. Hapus item mz-token.yaml dari daftar resources, simpan file, dan keluar dari vim.

  4. Lakukan perubahan pada cabang:

    git add infrastructure
    git commit
    
  5. Kirim branch ke GitLab:

    git push
    
  6. Gabungkan perubahan ke cabang main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.

26.2.11. Menyinkronkan waktu dengan zona lain

  1. Ikuti NTP P0007 - Configure Multizone SyncServers untuk menyinkronkan waktu di zona ini dengan zona lainnya.

26.2.12. Memverifikasi bahwa API global berfungsi dengan baik

Setelah proses bootstrap API global selesai, lakukan pemeriksaan kondisi untuk mengonfirmasi bahwa API dalam kondisi baik:

  1. Dapatkan nama zona dari server API cluster admin root:

    export ZONE_NAME=$(kubectl get controlplane -n mz-system cp -o jsonpath='{.spec.zone}')
    
  2. Periksa stempel waktu heartbeat terakhir API global:

    kubectl get globalapizone -n mz-system ${ZONE_NAME} -o yaml
    

    Stempel waktu detak jantung diisi di status.lastHeartbeat. Stempel waktu diperbarui setiap 30 detik. API global yang sehat memiliki stempel waktu detak jantung terakhir yang tidak lebih dari 30 detik.

26.2.13. Perpanjang tanggal habis masa berlaku CA etcd global

Otoritas sertifikat (CA) etcd global memiliki tanggal habis masa berlaku 90 hari. etcd global adalah cluster etcd yang memiliki instance yang di-deploy di beberapa zona GDC. Tidak ada otomatisasi untuk mengganti CA.

Petunjuk ini harus diterapkan ke zona yang sudah ada yang telah bergabung dengan multi-zona. Setelah zona yang ada diperbarui, zona berikutnya yang akan bergabung ke semesta ini dapat melewati bagian ini.

26.2.13.1. Periksa tanggal habis masa berlaku

Gunakan konfigurasi Kubernetes administrator untuk cluster admin root di zona yang ada. Periksa tanggal habis masa berlaku CA:

export CA_NAME=$(kubectl get etcdca etcd -n global-kube-system -o jsonpath="{.spec.rootCA.name}")

kubectl get secret $CA_NAME -n global-kube-system -o jsonpath="{.data.tls\.crt}" | base64 -d | openssl x509 -enddate -noout -in -

Jika tanggal habis masa berlaku sudah ditetapkan sekitar satu tahun, tidak ada tindakan lebih lanjut yang diperlukan. Jika kurang dari satu tahun, lihat Memutar CA dengan durasi yang lebih lama.

26.2.13.2. Memutar CA dengan durasi yang lebih lama

Ikuti MZ-T0001 untuk merotasi CA. Pastikan spesifikasi sertifikat CA baru berisi nilai duration: 8760h.