Men-deploy contoh Bookinfo

Halaman ini menjelaskan cara men-deploy aplikasi contoh untuk mendemonstrasikan Cloud Service Mesh. Jika Anda belum mengaktifkan Cloud Service Mesh, lihat Panduan pengaktifan.

Beberapa aplikasi contoh disertakan dengan penginstalan Cloud Service Mesh. Panduan ini akan memandu Anda men-deploy contoh BookInfo. Ini adalah aplikasi toko buku tiruan sederhana yang terdiri dari empat layanan yang menyediakan halaman produk web, detail buku, ulasan (dengan beberapa versi layanan ulasan), dan rating—semuanya dikelola menggunakan Cloud Service Mesh. Anda dapat menemukan kode sumber dan semua file lain yang digunakan dalam contoh ini di direktori penginstalan Cloud Service Mesh Anda di samples/bookinfo.

Akses Jaringan untuk Gambar Contoh

Alat asmcli tidak memeriksa atau menarik apa pun dari Docker Hub (docker.io) selama penginstalan mesh inti. Namun, men-deploy image container pihak ketiga setelah penginstalan akan memicu Kubelet untuk mengambil image aplikasi contoh dari Docker Hub dan CDN Cloudflare yang mendukung Docker Hub.

Di jaringan yang dibatasi atau jaringan yang terisolasi, penarikan gambar ini akan gagal kecuali jika diakomodasi secara eksplisit.

Untuk mengakomodasi penarikan image Anda, pilih salah satu pendekatan berikut:

  • Mengizinkan Traffic Keluar

    Perbarui firewall atau proxy Anda untuk mengizinkan egress HTTPS (port 443) ke domain berikut. Perhatikan bahwa domain Cloudflare diperlukan karena Docker Hub menggunakan pengalihan HTTP 307 untuk menayangkan lapisan image.

    • docker.io
    • hub.docker.com
    • *.cloudflarestorage.com
  • Mencerminkan ke Registry Pribadi

    Untuk lingkungan yang dibatasi sepenuhnya, jangan buka port firewall. Sebagai gantinya, salin gambar contoh yang diperlukan ke registry internal Anda dan konfigurasi cluster Anda untuk menggunakan registry internal Anda.

    Untuk petunjuk mendetail tentang cara menyiapkannya di lingkungan GDC, lihat Menggunakan mirror registry untuk image penampung.

Mengaktifkan injeksi otomatis sidecar

  1. Aktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.

    Terkelola (TD)

    1. Terapkan label injeksi default ke namespace:
    kubectl label namespace default \
        istio.io/rev- istio-injection=enabled --overwrite
    

    Terkelola (Istiod)

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Jika Anda adalah pengguna lama dengan bidang kontrol Managed Istiod: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:

    1. Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:

      kubectl -n istio-system get controlplanerevision
      

      Outputnya mirip dengan hal berikut ini:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      CATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satunya. Memiliki beberapa saluran bidang kontrol di cluster tidak didukung.

      Dalam output, nilai di kolom NAME adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.

    2. Terapkan label revisi ke namespace:

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    Dalam cluster

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Sebaiknya gunakan penyisipan default, tetapi penyisipan berbasis revisi didukung: Gunakan petunjuk berikut:

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

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. Terapkan label revisi ke namespace. Dalam perintah berikut, REVISION_LABEL adalah nilai label revisi istiod yang Anda catat di langkah sebelumnya.

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

Men-deploy aplikasi

Sekarang setelah injeksi otomatis diaktifkan di namespace default, saat Anda men-deploy layanan aplikasi BookInfo, proxy sidecar akan dimasukkan bersama setiap layanan.

  1. Di command line di komputer tempat Anda menginstal Cloud Service Mesh, buka root direktori penginstalan Cloud Service Mesh. Jika perlu, download file penginstalan Dalam cluster, yang mencakup aplikasi contoh bookinfo, lalu ekstrak.

  2. Deploy aplikasi Anda ke namespace default menggunakan kubectl:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. Pastikan aplikasi telah di-deploy dengan benar dengan menjalankan perintah berikut:

    kubectl get services
    

    Output:

    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    dan

    kubectl get pod
    

    Output:

    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  4. Terakhir, tentukan perutean gateway ingress untuk aplikasi:

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

    Output:

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created

Memvalidasi deployment aplikasi

Untuk melihat apakah aplikasi BookInfo berfungsi, Anda perlu mengirim traffic ke gateway ingress.

  • Jika Anda menginstal Cloud Service Mesh di Google Distributed Cloud (khusus software) untuk VMware, dapatkan alamat IP eksternal untuk gateway ingress yang Anda konfigurasi setelah menginstal Cloud Service Mesh

  • Jika Anda menginstal Cloud Service Mesh di GKE, dapatkan alamat IP eksternal gateway ingress sebagai berikut:

    kubectl get service istio-ingressgateway -n istio-system
    

    Output:

    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 layanan ingress adalah 35.239.7.64.

Mencoba aplikasi

  1. Periksa apakah aplikasi BookInfo berjalan dengan curl:

    curl -I http://EXTERNAL_IP/productpage
    

    Jika respons menampilkan 200, berarti aplikasi berfungsi dengan baik dengan Cloud Service Mesh.

  2. Untuk melihat halaman web BookInfo, masukkan alamat berikut di browser Anda:

    http://EXTERNAL_IP/productpage
    

    Jika memuat ulang halaman beberapa kali, Anda akan melihat berbagai versi ulasan yang ditampilkan di halaman produk, yang disajikan dalam gaya round robin (bintang merah, bintang hitam, tanpa bintang).

Setelah memiliki aplikasi yang menghasilkan traffic, Anda dapat menjelajahi halaman Cloud Service Mesh di konsol Google Cloud untuk melihat metrik dan fitur kemampuan observasi lainnya.

Pembersihan

Setelah selesai bereksperimen dengan contoh Bookinfo, hapus contoh tersebut dari cluster Anda.

  1. Uninstal Bookinfo menggunakan skrip berikut:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. Konfirmasi penonaktifan:

    kubectl get virtualservices   #-- there should be no virtual services
    kubectl get destinationrules  #-- there should be no destination rules
    kubectl get gateway           #-- there should be no gateway
    kubectl get pods              #-- the Bookinfo pods should be deleted
    

Langkah berikutnya

Pelajari lebih lanjut contoh Bookinfo.