Membuat cluster GKE dengan Anthos Service Mesh dan gcloud CLI

Dalam tutorial ini, Anda akan menginstal Anthos Service Mesh 1.14.6-asm.16 menggunakan alat yang disediakan Google, asmcli, di cluster publik Google Kubernetes Engine (GKE) baru. Tutorial ini membahas:

  1. Mengonfigurasi project Google Cloud Anda.
  2. Membuat cluster GKE dengan jumlah minimum vCPU yang diperlukan oleh Anthos Service Mesh.
  3. Menginstal Anthos Service Mesh dengan bidang kontrol dalam cluster.
  4. Men-deploy aplikasi sampel sehingga Anda dapat melihat data telemetri di dasbor Anthos Service Mesh di Konsol Google Cloud.
  5. Mengekspos dan mengakses aplikasi contoh.

Untuk menyederhanakan panduan memulai dan agar tidak memiliki beberapa jalur yang berbeda, pilihan berikut dibuat:

  • Mengaktifkan certificate authority Anthos Service Mesh (Mesh CA).
  • Men-deploy gateway masuk untuk mengekspos aplikasi.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan panduan memulai ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus cluster. Untuk informasi selengkapnya, lihat Pembersihan.

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. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the Kubernetes Engine API.

    Enable the API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Enable the Kubernetes Engine API.

    Enable the API

  8. Catat project ID Anda.

Meskipun Anthos Service Mesh memerlukan API lain, asmcli akan mengaktifkannya untuk Anda. Untuk menekan biaya penagihan, skrip asmcli tidak mengaktifkan GKE Enterprise API. Ada beberapa perbedaan kecil di Google Cloud Console saat GKE Enterprise API diaktifkan. Untuk mempelajari perbedaan ini lebih lanjut, lihat perbedaan UI GKE Enterprise dan Anthos Service Mesh.

Instal alat yang diperlukan

Anda dapat menjalankan alat ini di Cloud Shell atau di mesin lokal yang menjalankan Linux. Cloud Shell menginstal semua alat yang diperlukan. Perhatikan bahwa macOS tidak didukung karena dilengkapi dengan bash versi lama.

Cloud Shell

Cloud Shell menyediakan mesin virtual (VM) Compute Engine g1-small yang menjalankan sistem operasi Linux berbasis Debian. Keuntungan menggunakan Cloud Shell adalah:

  • Cloud Shell mencakup gcloud, kubectl, kpt, dan alat command line lain yang Anda butuhkan.

  • Direktori $HOME Cloud Shell Anda memiliki ruang penyimpanan persisten sebesar 5 GB.

  • Anda dapat memilih editor teks:

    • Editor kode, yang dapat Anda akses dengan mengklik di bagian atas jendela Cloud Shell.

    • Emacs, Vim, atau Nano, yang Anda akses dari command line di Cloud Shell.

Di konsol Google Cloud, aktifkan Cloud Shell.

Aktifkan Cloud Shell

Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

Komputer Linux lokal

  1. Pastikan Anda telah menginstal alat berikut:

  2. Lakukan autentikasi dengan Google Cloud CLI:

    gcloud auth login --project PROJECT_ID
    
  3. Update komponen:

    gcloud components update
    
  4. Pastikan git berada di jalur Anda sehingga kpt dapat menemukannya.

Membuat cluster GKE

  1. Jalankan perintah berikut untuk membuat cluster dengan jumlah minimum vCPU yang diperlukan oleh Anthos Service Mesh. Dalam perintah, ganti placeholder dengan informasi berikut:

    • CLUSTER_NAME: nama cluster Anda. Nama hanya boleh berisi karakter alfanumerik dengan huruf kecil dan -, harus diawali dengan huruf dan diakhiri dengan alfanumerik, serta tidak boleh lebih dari 40 karakter.
    • PROJECT_ID: project ID tempat cluster akan dibuat.
    • CLUSTER_LOCATION: zona untuk cluster, seperti us-central1-a.
    gcloud container clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION \
        --machine-type=e2-standard-4 \
        --num-nodes=2 \
        --workload-pool=PROJECT_ID.svc.id.goog
    

    Pembuatan cluster memerlukan waktu beberapa menit. Saat cluster dibuat, perintah gcloud akan menampilkan hal berikut:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...working...
    

    Output yang diharapkan pada pembuatan yang berhasil mirip dengan yang berikut ini:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...done.
    Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
    To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/CLUSTER_LOCATION/CLUSTER_NAME?project=PROJECT_ID
    kubeconfig entry generated for CLUSTER_NAME.
    NAME: CLUSTER_NAME
    LOCATION: CLUSTER_LOCATION
    MASTER_VERSION: 1.20.10-gke.1600
    MASTER_IP: 198.51.100.1
    MACHINE_TYPE: e2-standard-4
    NODE_VERSION: 1.20.10-gke.1600
    NUM_NODES: 2
    STATUS: RUNNING
    
  2. Dapatkan kredensial autentikasi untuk berinteraksi dengan cluster.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    

    Output yang diharapkan:

    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for CLUSTER_NAME.
    
  3. Setel konteks saat ini untuk kubectl ke cluster.

    kubectl config set-context CLUSTER_NAME
    

    Output yang diharapkan:

    Context "CLUSTER_NAME" created.
    

Terapkan label mesh_id

Terapkan label mesh_id untuk cluster GKE Anda:

  gcloud container clusters update CLUSTER_NAME --zone CLUSTER_LOCATION\
      --update-labels mesh_id=proj-FLEET_PROJECT_NUMBER

dengan:

  • CLUSTER_NAME adalah nama cluster Anda.
  • CLUSTER_LOCATION adalah zona Compute untuk cluster Anda.
  • FLEET_PROJECT_NUMBER adalah ID unik untuk project fleet Anda.

Unduh asmcli

Bagian ini menjelaskan cara mendownload asmcli.

  1. Download versi yang menginstal Anthos Service Mesh 1.14.6 ke direktori kerja saat ini:

    curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.14 > asmcli
    

    Output yang diharapkan:

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
    100  167k  100  167k    0     0   701k      0 --:--:-- --:--:-- --:--:--  701k
    
  2. Buat agar skrip dapat dieksekusi:

    chmod +x asmcli
    

Menginstal Anthos Service Mesh

Jalankan alat asmcli dengan opsi berikut untuk menginstal Anthos Service Mesh pada cluster yang Anda buat sebelumnya. Jika Anda belum menutup halaman ini sejak membuat cluster, placeholder memiliki nilai yang Anda masukkan untuk perintah gcloud container clusters create.

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca mesh_ca
  • --project_id, --cluster_name, dan --cluster_location Tentukan project ID tempat cluster berada, nama cluster, dan zona atau region cluster.
  • --fleet_id Project ID project host fleet. Jika opsi ini tidak disertakan, asmcli akan menggunakan project tempat cluster dibuat saat mendaftarkan cluster.
  • --output_dir Sertakan opsi ini untuk menentukan direktori tempat asmcli mendownload paket anthos-service-mesh dan mengekstrak file penginstalan, yang berisi istioctl, sampel, dan manifes. Jika tidak, asmcli akan mendownload file ke direktori tmp. Anda dapat menentukan jalur relatif atau jalur lengkap. Variabel lingkungan $PWD tidak berfungsi di sini.
  • --enable_all Mengizinkan skrip untuk:
    • Memberikan izin IAM yang diperlukan.
    • Mengaktifkan Google API yang diperlukan.
    • Tetapkan label pada cluster yang mengidentifikasi mesh.
    • Daftarkan cluster ke fleet jika belum terdaftar.

    Proses penyelesaian alat asmcli memerlukan waktu beberapa menit. Alat ini menghasilkan pesan informasi sehingga Anda dapat mengikuti progresnya.

    Output yang diharapkan setelah penginstalan berhasil:

    asmcli: Successfully installed ASM.
    

    Men-deploy gateway masuk

    Anthos Service Mesh memberi Anda opsi untuk men-deploy dan mengelola gateway sebagai bagian dari mesh layanan. Gateway menjelaskan load balancer yang beroperasi di edge mesh yang menerima koneksi HTTP/TCP masuk atau keluar. Gateway adalah proxy Envoy yang memberi Anda kontrol terperinci atas traffic yang masuk dan keluar dari mesh.

    1. Buat namespace untuk gateway masuk jika Anda belum memilikinya. Gateway adalah beban kerja pengguna, dan sebagai praktik terbaik, gateway tidak boleh di-deploy di namespace bidang kontrol. Ganti GATEWAY_NAMESPACE dengan nama namespace Anda.

      kubectl create namespace GATEWAY_NAMESPACE
      

      Output yang diharapkan:

      namespace/GATEWAY_NAMESPACE created
      
    2. Aktifkan injeksi otomatis di gateway. Langkah-langkah yang diperlukan bergantung pada apakah Anda ingin menggunakan label injeksi default (misalnya, istio-injection=enabled) atau label revisi di namespace gateway. Tag revisi default dan label revisi digunakan oleh webhook injektor file bantuan untuk mengaitkan proxy yang dimasukkan dengan revisi bidang kontrol tertentu.

      Label injeksi default

      Terapkan label injeksi default ke namespace.

      kubectl label namespace GATEWAY_NAMESPACE istio-injection=enabled istio.io/rev-
      

      Label revisi

      1. Gunakan perintah berikut untuk menemukan label revisi di istiod:

        kubectl get deploy -n istio-system -l app=istiod -o \
          "jsonpath={.items[*].metadata.labels['istio\.io/rev']}{'\n'}"
        

        Perintah tersebut menghasilkan label revisi yang sesuai dengan versi Anthos Service Mesh, misalnya: asm-1146-16

      2. Terapkan label revisi ke namespace. Dalam perintah berikut, REVISION adalah nilai label revisi istiod yang Anda catat di langkah sebelumnya.

        kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev=REVISION --overwrite
        

        Output yang diharapkan:

        namespace/GATEWAY_NAMESPACE labeled
        

      Anda dapat mengabaikan pesan "istio.io/rev" not found di output. Artinya, namespace sebelumnya tidak memiliki label istio.io/rev, yang akan Anda harapkan dalam penginstalan baru Anthos Service Mesh atau deployment baru. Karena injeksi otomatis gagal jika namespace memiliki label istio.io/rev dan istio-injection, semua perintah kubectl label dalam dokumentasi Anthos Service Mesh secara eksplisit menentukan kedua label tersebut.

    3. Download contoh file konfigurasi .yaml ingress gateway dari repositori anthos-service-mesh-packages.

    4. Terapkan contoh konfigurasi .yaml gateway masuk sebagaimana adanya, atau ubah sesuai kebutuhan.

      kubectl apply -n GATEWAY_NAMESPACE \
        -f CONFIG_PATH/istio-ingressgateway
      

      Output yang diharapkan:

      deployment.apps/istio-ingressgateway created
      poddisruptionbudget.policy/istio-ingressgateway created
      horizontalpodautoscaler.autoscaling/istio-ingressgateway created
      role.rbac.authorization.k8s.io/istio-ingressgateway created
      rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created
      service/istio-ingressgateway created
      serviceaccount/istio-ingressgateway created
      

    Pelajari praktik terbaik untuk gateway lebih lanjut.

    Men-deploy contoh Butik Online

    Aplikasi contoh Online Boutique di repo anthos-service-mesh-packages dimodifikasi dari kumpulan manifes asli di repo microservices-demo. Dengan mengikuti praktik terbaik, setiap layanan di-deploy dalam namespace terpisah dengan akun layanan yang unik.

    1. Buat namespace untuk aplikasi:

      kubectl apply -f \
        DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
      

      Output yang diharapkan:

      namespace/ad created
      namespace/cart created
      namespace/checkout created
      namespace/currency created
      namespace/email created
      namespace/frontend created
      namespace/loadgenerator created
      namespace/payment created
      namespace/product-catalog created
      namespace/recommendation created
      namespace/shipping created
      
    2. Aktifkan injeksi file bantuan otomatis (injeksi otomatis). Perintah yang diperlukan bergantung pada apakah Anda ingin menggunakan label injeksi default (misalnya, istio-injection=enabled) atau label revisi yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masuk

      Label injeksi default

      Terapkan label injeksi default ke namespace. Dalam perintah berikut, GATEWAY_NAMESPACE adalah nilai yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masuk.

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns istio-injection=enabled istio.io/rev-
      done;
      

      Output yang diharapkan:

      namespace/ad labeled
      namespace/cart labeled
      namespace/checkout labeled
      namespace/currency labeled
      namespace/email labeled
      namespace/frontend labeled
      namespace/loadgenerator labeled
      namespace/payment labeled
      namespace/product-catalog labeled
      namespace/recommendation labeled
      namespace/shipping labeled
      

      Label revisi

      Terapkan label revisi ke namespace aplikasi. Dalam perintah berikut, REVISION adalah nilai yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masuk.

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns istio.io/rev=REVISION --overwrite
      done;
      

      Output yang diharapkan:

      namespace/ad labeled
      namespace/cart labeled
      namespace/checkout labeled
      namespace/currency labeled
      namespace/email labeled
      namespace/frontend labeled
      namespace/loadgenerator labeled
      namespace/payment labeled
      namespace/product-catalog labeled
      namespace/recommendation labeled
      namespace/shipping labeled
      
    3. Deploy aplikasi sampel ke cluster.

      1. Buat akun layanan dan deployment:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
        

        Output yang diharapkan:

        serviceaccount/ad created
        deployment.apps/adservice created
        serviceaccount/cart created
        deployment.apps/cartservice created
        serviceaccount/checkout created
        deployment.apps/checkoutservice created
        serviceaccount/currency created
        deployment.apps/currencyservice created
        serviceaccount/email created
        deployment.apps/emailservice created
        serviceaccount/frontend created
        deployment.apps/frontend created
        serviceaccount/loadgenerator created
        deployment.apps/loadgenerator created
        serviceaccount/payment created
        deployment.apps/paymentservice created
        serviceaccount/product-catalog created
        deployment.apps/productcatalogservice created
        serviceaccount/recommendation created
        deployment.apps/recommendationservice created
        serviceaccount/shipping created
        deployment.apps/shippingservice created
        
      2. Buat layanan:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/kubernetes-manifests/services
        

        Output yang diharapkan:

        service/adservice created
        service/cartservice created
        service/checkoutservice created
        service/currencyservice created
        service/emailservice created
        service/frontend created
        service/frontend-external created
        service/paymentservice created
        service/productcatalogservice created
        service/recommendationservice created
        service/shippingservice created
        
      3. Buat entri layanan:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
        

        Output yang diharapkan:

        serviceentry.networking.istio.io/allow-egress-googleapis created
        serviceentry.networking.istio.io/allow-egress-google-metadata created
        

    Mengekspos dan mengakses aplikasi

    Ada beberapa cara untuk mengekspos aplikasi. Dalam panduan ini, kita akan menggunakan gateway masuk yang kita deploy di atas untuk melakukannya. Untuk mengetahui cara lain mengekspos aplikasi Butik Online, lihat bagian menampilkan dan mengakses aplikasi dalam panduan Men-deploy contoh aplikasi Butik Online.

    1. Men-deploy Gateway dan VirtualService untuk layanan frontend

      kubectl apply -f \
          DIR_PATH/samples/online-boutique/istio-manifests/frontend-gateway.yaml
      

      Output yang diharapkan:

      gateway.networking.istio.io/frontend-gateway created
      virtualservice.networking.istio.io/frontend-ingress created
      
    2. Dapatkan alamat IP eksternal gateway masuk, ganti placeholder dengan informasi berikut:

      • GATEWAY_SERVICE_NAME: nama layanan gateway masuk. Jika Anda men-deploy gateway contoh tanpa modifikasi, mungkin akan menjadi istio-ingressgateway.
      • GATEWAY_NAMESPACE: namespace tempat Anda men-deploy gateway masuk:
      kubectl get service GATEWAY_SERVICE_NAME \
          -n GATEWAY_NAMESPACE
      

      Outputnya mirip dengan:

      NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE
      istio-ingressgateway   LoadBalancer   10.19.247.233   35.239.7.64   80:31380/TCP,443:31390/TCP,31400:31400/TCP   27m

      Dalam contoh ini, alamat IP gateway masuk adalah 35.239.7.64.

    3. Buka aplikasi pada browser Anda untuk mengonfirmasi penginstalan:

      http://EXTERNAL_IP/
      

    Lihat dasbor Service Mesh

    Setelah workload di-deploy di cluster dengan proxy file bantuan dimasukkan, Anda dapat menjelajahi halaman Anthos Service Mesh di Konsol Google Cloud untuk melihat semua fitur kemampuan observasi yang ditawarkan Anthos Service Mesh. Perlu diperhatikan bahwa perlu waktu sekitar satu atau dua menit agar data telemetri ditampilkan di konsol Google Cloud setelah Anda men-deploy workload.

    Akses ke Anthos Service Mesh di Konsol Google Cloud dikontrol oleh Identity and Access Management (IAM). Untuk mengakses halaman Anthos Service Mesh, Pemilik Project harus memberi pengguna peran Project Editor atau Viewer, atau peran yang lebih ketat yang dijelaskan dalam Mengontrol akses ke Anthos Service Mesh di Konsol Google Cloud.

    1. Di konsol Google Cloud, buka Anthos Service Mesh.

      Buka Anthos Service Mesh

    2. Pilih project Google Cloud dari menu drop-down di panel menu.

    3. Jika Anda memiliki lebih dari satu mesh layanan, pilih mesh dari menu drop-down Service Mesh.

    Untuk mempelajari lebih lanjut, lihat Menjelajahi Anthos Service Mesh di Konsol Google Cloud.

    Pembersihan

    Sebelum melanjutkan pembahasan, jika Anda tertarik untuk mempelajari mutual TLS lebih lanjut, lihat Anthos Service Mesh dengan contoh: mTLS.

    • Jika Anda ingin mempertahankan cluster dan menghapus contoh Butik Online:

      1. Hapus namespace aplikasi:

        kubectl delete -f DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
        

        Output yang diharapkan:

        namespace "ad" deleted
        namespace "cart" deleted
        namespace "checkout" deleted
        namespace "currency" deleted
        namespace "email" deleted
        namespace "frontend" deleted
        namespace "loadgenerator" deleted
        namespace "payment" deleted
        namespace "product-catalog" deleted
        namespace "recommendation" deleted
        namespace "shipping" deleted
        
      2. Hapus entri layanan:

        kubectl delete -f DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
        

        Output yang diharapkan:

        serviceentry.networking.istio.io "allow-egress-googleapis" deleted
        serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
        
    • Jika Anda ingin mencegah biaya tambahan, hapus cluster:

      1. Jalankan perintah berikut:

        gcloud container clusters delete  CLUSTER_NAME \
            --project=PROJECT_ID \
            --zone=CLUSTER_LOCATION
        
      2. Pada perintah Do you want to continue (Y/n)?, masukkan y.

        Setelah beberapa menit, Anda akan melihat output berikut:

        Deleting cluster CLUSTER_NAME...done.
        Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
        

    Langkah selanjutnya