Panduan memulai: Mengelola resource dengan Config Controller

Pelajari cara membuat instance Config Controller yang sudah diprainstal dengan Config Connector, Policy Controller, dan Config Sync. Selanjutnya, pelajari cara menggunakan instance Anda dengan menyelesaikan tugas berikut:

  • Gunakan Config Connector untuk membuat dan mengelola resource Google Cloud .
  • Buat batasan Pengontrol Kebijakan 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. Install the Google Cloud CLI.

  9. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. 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 selesai.

      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 Pengontrol Konfigurasi:

      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 memberikan izin 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 Google Cloud resource dengan Config Connector

    Dengan instance Config Controller, Anda dapat memanfaatkan Config Connector untuk mengelola banyak Google Cloud layanan dan resource menggunakan alat dan API Kubernetes. Di bagian ini, Anda akan menggunakan Config Controller 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
        

        Mengaktifkan API ini mungkin memerlukan waktu beberapa menit.

    2. Gunakan Konektor Konfigurasi untuk membuat topik Pub/Sub:

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

        # 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 Pengontrol Kebijakan, Pengontrol Konfigurasi akan otomatis menginstal library template batasan. Anda dapat menggunakan template dalam library ini untuk menerapkan berbagai kontrol kepatuhan dan keamanan umum pada instance Config Controller.

    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. Sebaiknya gunakan batasan ini untuk memastikan bucket 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 Config Controller 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 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 lainnya. Dengan menyinkronkan instance 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 perlu melakukannya karena instance Config Controller didukung oleh cluster edisi Enterprise Google Kubernetes Engine (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 di 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 Pengontrol Konfigurasi Anda.

    4. Pastikan 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. Pastikan 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 dibuat di bagian Membuat instance Config Controller dan yang dibuat dengan menyinkronkan instance ke repositori GitHub.

    Pembersihan

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

    Menghapus project

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Menghapus resource satu per satu

    1. Hapus resource PubSubTopic Konektor Konfigurasi:

      kubectl delete -f pubsub-topic.yaml
      
    2. Hapus batasan Pengontrol Kebijakan:

      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