Panduan memulai: Mengelola resource dengan Config Controller

Pelajari cara membuat instance Pengontrol Konfigurasi yang sudah diinstal sebelumnya dengan Config Connector, Pengontrol Kebijakan, dan Config Sync. Selanjutnya, pelajari cara menggunakan instance Anda dengan menyelesaikan tugas-tugas berikut:

  • Gunakan Config Connector untuk membuat dan mengelola resource Google Cloud .
  • Buat batasan Policy Controller untuk menerapkan kebijakan dan mendeteksi pelanggaran kebijakan sebelum di-deploy.
  • Siapkan GitOps dengan mengonfigurasi Config Sync untuk menyinkronkan dari repositori contoh yang berisi resource Google Cloud .

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Jika Anda menggunakan project yang sudah ada untuk panduan ini, pastikan Anda memiliki izin yang diperlukan untuk menyelesaikan panduan ini. Jika berhasil membuat project baru, berarti Anda sudah memiliki izin yang diperlukan.

  7. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  8. Aktifkan KRM, GKE, Resource Manager, dan Service Usage API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  9. Instal Google Cloud CLI.

  10. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  11. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  12. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  13. Jika Anda menggunakan project yang sudah ada untuk panduan ini, pastikan Anda memiliki izin yang diperlukan untuk menyelesaikan panduan ini. Jika berhasil membuat project baru, berarti Anda sudah memiliki izin yang diperlukan.

  14. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  15. Aktifkan KRM, GKE, Resource Manager, dan Service Usage API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengelola contoh resource dengan Config Controller yang digunakan dalam panduan memulai ini, minta administrator untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat instance Config Controller

  1. Di terminal, buat instance Autopilot Config Controller:

    gcloud anthos config controller create cc-example \
        --location=us-central1 \
        --full-management
    

    Operasi ini dapat memerlukan waktu hingga 15 menit untuk diselesaikan.

    Outputnya adalah sebagai berikut:

    Created instance [cc-example].
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for krmapihost-cc-example.
    
  2. Pastikan instance Anda telah dibuat dengan melihat daftar instance Config Controller:

    gcloud anthos config controller list --location=us-central1
    

    Outputnya adalah sebagai berikut:

    NAME                 LOCATION                 STATE
    cc-example           us-central1              RUNNING
    

Memberikan izin yang diperlukan Config Controller

Di bagian ini, Anda akan memberikan izin kepada Config Controller untuk mengelola resource Google Cloud:

  1. Tetapkan variabel lingkungan untuk email akun layanan Anda:

    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
        -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    
  2. Buat binding kebijakan:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "roles/owner" \
        --project PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

    Outputnya mirip dengan hal berikut ini:

    Updated IAM policy for project [PROJECT_ID].
    auditConfigs:
    - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_READ
      - logType: DATA_WRITE
      service: gkehub.googleapis.com
    # Remainder of output omitted
    

Menggunakan instance Config Controller

Bagian berikut memperkenalkan cara menggunakan instance Config Controller.

Membuat resource Google Cloud dengan Config Connector

Dengan instance Config Controller, Anda dapat memanfaatkan Config Connector untuk mengelola banyak layanan dan resource menggunakan alat dan API Kubernetes. Google Cloud Di bagian ini, Anda akan menggunakan Pengontrol Konfigurasi untuk membuat resource PubSubTopic.

Untuk membuat topik Pub/Sub menggunakan Config Connector, selesaikan langkah-langkah berikut:

  1. Gunakan Config Connector untuk mengaktifkan Pub/Sub API:

    1. Dengan menggunakan editor teks pilihan Anda, buat file bernama enable-pubsub.yaml dan salin YAML berikut ke dalamnya:

      # enable-pubsub.yaml
      apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
      kind: Service
      metadata:
        name: pubsub.googleapis.com
        namespace: config-control
      spec:
        projectRef:
          external: projects/PROJECT_ID
      

      Ganti PROJECT_ID dengan project ID Anda.

    2. Untuk mengaktifkan Pub/Sub API, terapkan manifes ke cluster Anda:

      kubectl apply -f enable-pubsub.yaml
      

      Pengaktifan API ini mungkin memerlukan waktu beberapa menit.

  2. Gunakan Config Connector untuk membuat topik Pub/Sub:

    1. Buat file bernama pubsub-topic.yaml dan salin YAML berikut ke dalamnya:

      # pubsub-topic.yaml
      apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
      kind: PubSubTopic
      metadata:
        annotations:
          cnrm.cloud.google.com/project-id: PROJECT_ID
        labels:
          label-one: "value-one"
        name: example-topic
        namespace: config-control
      
    2. Buat topik Pub/Sub:

      kubectl apply -f pubsub-topic.yaml
      
  3. Pastikan Config Controller telah membuat resource Anda di Google Cloud dengan melihat daftar topik Pub/Sub:

    gcloud pubsub topics list
    

    Outputnya mirip dengan hal berikut ini:

    ---
    name: projects/PROJECT_ID/topics/start-instance-event
    ---
    labels:
      label-one: value-one
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/example-topic
    

Menerapkan kebijakan dengan Pengontrol Kebijakan

Instance Config Controller memungkinkan Anda menggunakan Pengontrol Kebijakan dan batasan Pengontrol Kebijakan. Sebagai bagian dari penginstalan Policy Controller, Config Controller akan otomatis menginstal constraint template library. Anda dapat menggunakan template di library ini untuk menerapkan berbagai kontrol keamanan dan kepatuhan umum pada instance Config Controller Anda.

Di bagian ini, Anda akan membuat batasan menggunakan template batasan GCPStorageLocationConstraintV1. Template ini memungkinkan Anda membatasi lokasi tempat Anda dapat membuat bucket Cloud Storage. Batasan yang Anda buat menggunakan template ini membatasi lokasi ke us-central1. Anda mungkin ingin menggunakan batasan ini untuk memastikan bucket Anda dibuat di wilayah yang menawarkan harga dan performa terbaik.

Untuk membuat batasan:

  1. Buat file bernama bucket-constraint.yaml dan salin YAML berikut ke dalamnya:

    # bucket-constraint.yaml
    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: GCPStorageLocationConstraintV1
    metadata:
      name: storage-only-in-us-central1
    spec:
      match:
        kinds:
        - apiGroups:
          - storage.cnrm.cloud.google.com
          kinds:
          - StorageBucket
      parameters:
        locations:
        - us-central1
    
  2. Buat batasan:

    kubectl apply -f bucket-constraint.yaml
    

    Outputnya adalah sebagai berikut:

    gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
    
  3. Tunjukkan bahwa batasan berfungsi dengan mencoba menggunakan Config Connector untuk membuat resource StorageBucket di asia-southeast1:

    1. Buat file bernama asia-storage-bucket.yaml dan salin YAML berikut ke dalamnya:

      # asia-storage-bucket.yaml
      apiVersion: storage.cnrm.cloud.google.com/v1beta1
      kind: StorageBucket
      metadata:
        name: bucket-in-disallowed-location
        namespace: config-control
      spec:
        location: asia-southeast1
      
    2. Coba buat bucket Cloud Storage:

      kubectl apply -f asia-storage-bucket.yaml
      

      Outputnya adalah sebagai berikut:

      Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
      

Menyiapkan GitOps dengan Config Sync

Config Sync adalah layanan GitOps yang memungkinkan Anda menyinkronkan instance Pengontrol Konfigurasi ke konfigurasi, kebijakan, dan Google Cloud resource yang disimpan di repositori Git, image OCI, atau repositori Helm. Karena Config Sync terus merekonsiliasi status Config Controller dengan konfigurasi di sumber Anda, Anda dapat membantu memastikan bahwa instance Anda memiliki konfigurasi yang konsisten.

Di bagian ini, Anda akan menyinkronkan instance Config Controller ke repositori GitHub publik. Repositori ini berisi resource PubSubTopic lain. Dengan menyinkronkan instance Anda dari repositori ini, resource akan otomatis dibuat dan diterapkan ke instance Anda. Anda dapat memilih untuk membuat resource menggunakan Config Sync (bukan menerapkan resource secara langsung) jika ingin menggunakan alur kerja GitOps.

  1. Untuk menyinkronkan dari GitHub, siapkan Cloud NAT. Anda harus melakukannya karena instance Config Controller didukung oleh cluster GKE pribadi dan node cluster pribadi tidak memiliki akses internet keluar:

    1. Buat router Cloud NAT. Anda memerlukan router ini untuk menyiapkan gateway NAT.

      gcloud compute routers create cc-nat-router \
          --network default \
          --region us-central1
      

      Outputnya mirip dengan hal berikut ini:

      Creating router [cc-nat-router]...done.
      NAME           REGION       NETWORK
      cc-nat-router  us-central1  default
      
    2. Siapkan gateway NAT di router yang Anda buat pada langkah sebelumnya:

      gcloud compute routers nats create cc-nat-config \
          --router-region us-central1 \
          --router cc-nat-router \
          --nat-all-subnet-ip-ranges \
          --auto-allocate-nat-external-ips
      

      Outputnya adalah sebagai berikut:

      Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
      
  2. Untuk mengonfigurasi instance Config Controller agar disinkronkan dari repositori contoh, buat file bernama cc-rootsync.yaml dan salin YAML berikut ke dalamnya:

    # cc-rootsync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
        branch: main
        dir: config-controller-quickstart
        auth: none
    
  3. Terapkan konfigurasi:

    kubectl apply -f cc-rootsync.yaml
    

    Setelah instance Anda disinkronkan dari repositori, Config Sync akan membuat topik Pub/Sub dan menerapkannya ke instance Config Controller Anda.

  4. Verifikasi bahwa Config Sync menyinkronkan repositori Git ke instance Config Controller Anda:

    nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
    

    Outputnya mirip dengan hal berikut ini:

    *gke_PROJECT_ID_us-central1_krmapihost-cc-example
    --------------------
    <root>:root-sync                         https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main
    SYNCED @ 2023-01-10 18:31:02 +0000 UTC   715b4295d3eac07b057cce2543275c1ee104cad8
    Managed resources:
       NAMESPACE        NAME                                                               STATUS   SOURCEHASH
       config-control   pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync  Current   715b429
       config-control   service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com   Current   715b429
    

    Jika Anda tidak melihat output ini, tunggu beberapa menit dan coba lagi.

  5. Verifikasi bahwa Config Controller telah membuat resource Anda:

    gcloud pubsub topics list
    

    Outputnya mirip dengan hal berikut ini:

    name: projects/PROJECT_ID/topics/start-instance-event
    ---
    labels:
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/sample-topic
    ---
    labels:
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync
    ---
    labels:
      label-one: value-one
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/example-topic
    

    Dalam output ini, Anda dapat melihat Pub/Sub yang Anda buat di bagian Buat instance Config Controller dan Pub/Sub yang Anda buat dengan menyinkronkan instance ke repositori GitHub.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

    Menghapus Google Cloud project:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

  1. Hapus resource Config Connector PubSubTopic:

    kubectl delete -f pubsub-topic.yaml
    
  2. Hapus batasan Policy Controller:

    kubectl delete -f bucket-constraint.yaml
    
  3. Hapus router NAT:

    gcloud compute routers delete cc-nat-router \
        --project=PROJECT_ID \
        --region=us-central1
    

    Tekan y saat diminta.

  4. Hapus resource Pub/Sub yang dibuat oleh Config Sync:

    kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
    
  5. Hapus resource RootSync:

    kubectl delete rootsync root-sync -n config-management-system
    
  6. Dengan menggunakan editor teks pilihan Anda, hapus semua file YAML yang Anda buat:

    • enable-pubsub.yaml
    • pubsub-topic.yaml
    • bucket-constraint.yaml
    • asia-storage-bucket.yaml
    • cc-rootsync.yaml
  7. Hapus instance Config Controller:

    gcloud anthos config controller delete --location=us-central1 cc-example
    

    Tekan y saat diminta.

Langkah berikutnya