Mengonfigurasi Anthos Service Mesh terkelola

Ringkasan

Anthos Service Mesh terkelola adalah bidang kontrol yang dikelola Google dan bidang data opsional yang dapat dikonfigurasi dengan mudah. Google menangani keandalan, upgrade, penskalaan, dan keamanannya untuk Anda dengan cara yang kompatibel dengan versi sebelumnya. Panduan ini menjelaskan cara menyiapkan atau memigrasikan aplikasi ke Anthos Service Mesh terkelola dalam konfigurasi tunggal atau multi-cluster.

Untuk mempelajari fitur dan batasan yang didukung dari Anthos Service Mesh terkelola, lihat Fitur yang didukung Anthos Service Mesh.

Prasyarat

Sebagai permulaan, panduan ini mengasumsikan bahwa Anda telah:

Persyaratan

Migrasi

  • Migrasi/upgrade langsung dari bidang kontrol dalam cluster ke bidang kontrol yang dikelola Google hanya didukung dari versi 1.9+ (diinstal dengan Mesh CA).
  • Penginstalan dengan Istio CA harus terlebih dahulu dimigrasikan ke Mesh CA 1,9+.
  • Migrasi/upgrade tidak langsung didukung, yang berarti Anda dapat mengikuti jalur upgrade Anthos Service Mesh standar melalui setiap versi hingga Anda mencapai Anthos Service Mesh 1.11 dengan bidang kontrol dalam cluster, lalu Anda dapat bermigrasi ke bidang kontrol yang dikelola Google.

Batasan

Sebaiknya tinjau daftar fitur dan batasan yang didukung Anthos Service Mesh terkelola. Secara khusus, perhatikan hal-hal berikut:

  • Anthos Service Mesh terkelola hanya dapat menggunakan beberapa cluster GKE dalam satu project Google Cloud.
  • IstioOperator API tidak didukung.

  • Batasan bidang data terkelola:

    • Rilis Pratinjau bidang data terkelola ini hanya tersedia untuk deployment baru bidang kontrol terkelola. Jika sebelumnya Anda men-deploy bidang kontrol terkelola, dan ingin men-deploy bidang data terkelola, Anda harus menjalankan ulang skrip penginstalan seperti yang dijelaskan dalam Menerapkan bidang kontrol yang dikelola Google.

    • Bidang tanggal yang dikelola tersedia di saluran rilis Reguler dan Cepat.

Aktifkan Workload Identity

Jika Workload Identity tidak diaktifkan, lihat Mengaktifkan Workload Identity di cluster untuk mengetahui izin IAM yang diperlukan dan gcloud CLI untuk mengaktifkannya.

Mendownload skrip penginstalan

  1. Download versi terbaru skrip yang menginstal Anthos Service Mesh 1.11.8 ke direktori kerja saat ini:

    curl https://storage.googleapis.com/csm-artifacts/asm/install_asm_1.11 > install_asm
    
  2. Buat agar skrip dapat dieksekusi:

    chmod +x install_asm
    

Konfigurasi setiap cluster

Gunakan langkah-langkah berikut untuk mengonfigurasi Anthos Service Mesh terkelola untuk setiap cluster di mesh Anda.

Mendapatkan kredensial cluster

Ambil kredensial yang sesuai. Perintah berikut juga akan mengarahkan konteks kubectl ke cluster target.

gcloud container clusters get-credentials  CLUSTER_NAME \
    --zone LOCATION \
    --project PROJECT_ID

Menerapkan bidang kontrol yang dikelola Google

Jalankan skrip penginstalan install_asm untuk setiap cluster yang akan menggunakan Anthos Service Mesh terkelola. Sebaiknya sertakan kedua opsi berikut saat menjalankan install_asm:

  • --option cni-managed Opsi ini mengaktifkan plugin Istio Container Network Interface (CNI). Plugin CNI mengonfigurasi pengalihan traffic jaringan ke dan dari proxy file bantuan menggunakan antarmuka CNCF CNI, bukan menggunakan penampung init dengan hak istimewa tinggi.

  • --enable-registration Flag ini mendaftarkan cluster ke fleet.

Opsi ini diperlukan jika Anda juga ingin men-deploy bidang data yang dikelola Google. Untuk mengetahui daftar lengkap opsi, lihat halaman referensi asmcli.

  ./install_asm --mode install --managed \
      -p PROJECT_ID \
      -l LOCATION \
      -n CLUSTER_NAME \
      --verbose \
      --output_dir CLUSTER_NAME \
      --enable-all \
      --enable-registration \
      --option cni-managed

Skrip ini akan mendownload semua file ke --output_dir yang ditentukan untuk mengonfigurasi bidang kontrol terkelola, menginstal Istio Gateway, beserta alat istioctl dan aplikasi contoh. Langkah-langkah dalam panduan ini mengasumsikan bahwa Anda menjalankan istioctl dari root direktori penginstalan, dengan istioctl ada dalam subdirektori /bin-nya.

Jika Anda menjalankan kembali install_asm pada cluster yang sama, konfigurasi bidang kontrol yang ada akan ditimpa. Pastikan untuk menentukan opsi dan tanda yang sama jika menginginkan konfigurasi yang sama.

Perhatikan bahwa gateway masuk tidak secara otomatis di-deploy dengan bidang kontrol. Dengan memisahkan deployment gateway masuk dan bidang kontrol, Anda dapat mengelola gateway di lingkungan produksi dengan lebih mudah. Jika cluster memerlukan gateway ingress, lihat Menginstal gateway Istio.

Menerapkan bidang data yang dikelola Google

Jika Anda ingin Google mengelola upgrade proxy, aktifkan bidang data yang dikelola Google. Jika diaktifkan, proxy file bantuan dan gateway yang dimasukkan akan otomatis diupgrade bersama dengan bidang kontrol terkelola.

Dalam pratinjau fitur, bidang data terkelola mengupgrade proxy dengan mengeluarkan Pod yang menjalankan proxy versi lama. Penghapusan dilakukan secara teratur untuk mematuhi anggaran gangguan Pod dan mengontrol tingkat perubahan.

Rilis pratinjau bidang data terkelola ini tidak mengelola hal berikut:

  • Pod yang tidak dimasukkan.
  • Pod yang dimasukkan secara manual menggunakan istioctl kube-inject.
  • Pekerjaan
  • Set Stateful
  • DaemonSet

Jika tidak ingin menggunakan bidang data terkelola atau tidak ingin mengaktifkannya untuk semua namespace, Anda harus memicu mulai ulang proxy untuk mendapatkan manfaat dari image proxy terbaru. Bidang kontrol akan terus berfungsi dengan proxy yang ada.

Bidang data terkelola tersedia di saluran rilis Cepat dan Reguler.

Untuk mengaktifkan bidang data yang dikelola Google:

  1. Aktifkan pengelolaan bidang data:

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

    Atau, Anda dapat mengaktifkan bidang data yang dikelola Google untuk Pod tertentu dengan menganotasinya menggunakan anotasi yang sama. Saat Anda menganotasi Pod tertentu, Pod tersebut akan menggunakan proxy file bantuan yang dikelola Google dan beban kerja lainnya menggunakan proxy file bantuan yang tidak dikelola.

  2. Ulangi langkah sebelumnya untuk setiap namespace tempat Anda menginginkan bidang data terkelola.

  3. Aktifkan Anthos Service Mesh di fleet:

    gcloud alpha container hub mesh enable --project=PROJECT_ID
    

Diperlukan waktu hingga sepuluh menit bagi pengontrol bidang data untuk siap mengelola proxy di cluster. Jalankan perintah berikut untuk memeriksa statusnya:

if kubectl get dataplanecontrols -o custom-columns=REV:.spec.revision,STATUS:.status.state | grep rapid | grep -v none > /dev/null; then echo "Managed Data Plane is ready."; else echo "Managed Data Plane is NOT ready."; fi

Jika pengontrol bidang data sudah siap, perintah akan menghasilkan output: Managed Data Plane is ready.

Jika status untuk pengontrol bidang data belum siap setelah menunggu lebih dari sepuluh menit, lihat Status bidang data terkelola untuk mendapatkan tips pemecahan masalah.

Jika Anda ingin menonaktifkan bidang data yang dikelola Google dan kembali ke mengelola proxy file bantuan sendiri, ubah anotasinya:

kubectl annotate --overwrite namespace NAMESPACE \
  mesh.cloud.google.com/proxy='{"managed":"false"}'

Menginstal Gateway Istio (opsional)

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.

Sebagai praktik terbaik, sebaiknya Anda membuat namespace terpisah untuk gateway. Jangan men-deploy gateway ke namespace istio-system.

Anda dapat menginstal satu atau beberapa Gateway Istio di cluster untuk menangani traffic masuk standar, dengan mengikuti langkah-langkah berikut:

  1. Pilih salah satu dari dua opsi berikut untuk menyiapkan namespace tempat Anda akan men-deploy gateway di langkah-langkah berikutnya.

    • Aktifkan namespace untuk injeksi:
      kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid --overwrite
      

    ATAU

    • Mengaktifkan injeksi hanya untuk pod gateway, tetapi tidak semua pod di namespace. Perintah ini akan menghapus semua label injeksi, lalu Anda akan mengaktifkan injeksi pada pod itu sendiri:
      kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev-
      
  2. Buat Deployment dan Layanan untuk gateway, dengan menggunakan contoh minimal berikut:

    kubectl apply -f - << EOF
    apiVersion: v1
    kind: Service
    metadata:
      name: istio-ingressgateway
      namespace: GATEWAY_NAMESPACE
    spec:
      type: LoadBalancer
      selector:
        istio: ingressgateway
      ports:
      - port: 80
        name: http
      - port: 443
        name: https
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: istio-ingressgateway
      namespace: GATEWAY_NAMESPACE
    spec:
      selector:
        matchLabels:
          istio: ingressgateway
      template:
        metadata:
          annotations:
            # This is required to tell Anthos Service Mesh to inject the gateway with the
            # required configuration.
            inject.istio.io/templates: gateway
          labels:
            istio: ingressgateway
            istio.io/rev: asm-managed-rapid # This is required only if the namespace is not labeled.
        spec:
          containers:
          - name: istio-proxy
            image: auto # The image will automatically update each time the pod starts.
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: istio-ingressgateway-sds
      namespace: GATEWAY_NAMESPACE
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: istio-ingressgateway-sds
      namespace: GATEWAY_NAMESPACE
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: istio-ingressgateway-sds
    subjects:
    - kind: ServiceAccount
      name: default
    EOF
    
  3. Setelah Anda membuat deployment, pastikan layanan baru berfungsi dengan benar:

    kubectl get pod,service -n GATEWAY_NAMESPACE
    

    Verifikasi output yang mirip dengan berikut ini:

    NAME                                      READY   STATUS    RESTARTS   AGE
    pod/istio-ingressgateway-856b7c77-bdb77   1/1     Running   0          3s
    
    NAME                           TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
    service/istio-ingressgateway   LoadBalancer   10.24.5.129    34.82.157.6      80:31904/TCP   3s

Anda dapat memilih untuk mengizinkan pengontrol bidang data terkelola mengelola proxy untuk gateway Anda seperti halnya untuk layanan. Jika Anda men-deploy bidang data terkelola, dan ingin mengatur proxy gateway, beri label dan anotasikan namespace gateway seperti yang dijelaskan dalam Menerapkan bidang data yang dikelola Google.

Jika memilih untuk mengelola gateway sendiri, Anda harus memulai ulang Pod di GATEWAY_NAMESPACE saat versi baru Anthos Service Mesh dirilis, sehingga pod dapat mengambil konfigurasi bidang kontrol baru. Sebelum memulai ulang Pod, Anda harus mengonfirmasi bahwa bidang kontrol baru telah diluncurkan ke cluster Anda dengan memeriksa versi bidang kontrol menggunakan kueri kustom Metrics Explorer yang disediakan dalam Memverifikasi metrik bidang kontrol.

Mengonfigurasi penemuan endpoint (hanya untuk penginstalan multi-cluster)

Bidang kontrol yang dikelola Anthos Service Mesh mendukung konfigurasi multi-utama, jaringan tunggal, project tunggal, dengan perbedaan bahwa bidang kontrol tidak diinstal di cluster.

Sebelum melanjutkan, Anda harus sudah menjalankan skrip penginstalan di setiap cluster seperti yang dijelaskan di langkah sebelumnya. Anda tidak perlu menunjukkan bahwa cluster adalah cluster utama, ini adalah perilaku default.

Untuk setiap cluster, aktifkan penemuan endpoint dengan menjalankan perintah berikut satu kali untuk setiap cluster lain i=1..N di mesh:

  1. Untuk setiap cluster, pastikan konteks konfigurasi kubectl mengarah ke cluster saat ini:

    export CTX=gke_PROJECT_ID_LOCATION_CLUSTER_NAME
    
  2. Aktifkan penemuan endpoint dengan menjalankan perintah berikut satu kali untuk setiap cluster i=1..N lainnya di mesh:

    export CTX_i=gke_PROJECT_ID_LOCATION_i_CLUSTER_NAME_i
    
    ./bin/istioctl x create-remote-secret --context=${CTX_i} --name=CLUSTER_NAME_i | \
      kubectl apply -f - --context=${CTX}
    
  3. Pastikan bahwa rahasia telah dibuat dengan menjalankan perintah:

    kubectl get secret istio-remote-secret-CLUSTER_NAME_i -n istio-system
    

    Verifikasi output yang diharapkan:

    NAME                                   TYPE     DATA   AGE
    istio-remote-secret-CLUSTER_NAME_i   Opaque   1      44s
    
  4. Jika cluster saat ini ditambahkan ke mesh multi-cluster yang ada, biarkan semua cluster lain menemukan endpoint-nya dengan membuat rahasia yang sesuai dengan cluster saat ini di semua cluster lain:

    ./bin/istioctl x create-remote-secret --context=${CTX} --name=CLUSTER_NAME | \
      kubectl apply -f - --context=${CTX_i}
    
  5. Selain itu, Anda juga dapat memverifikasi rahasia untuk cluster lainnya:

    kubectl get secret istio-remote-secret-CLUSTER_NAME -n istio-system --context ${CTX_i}
    

    Verifikasi output yang diharapkan:

    NAME                            TYPE     DATA   AGE
    istio-remote-secret-CLUSTER_NAME   Opaque   1      44s
    

Untuk mengetahui detail selengkapnya dan contoh dengan dua cluster, lihat mengaktifkan penemuan endpoint.

Men-deploy aplikasi

Sebelum men-deploy aplikasi, hapus label istio-injection sebelumnya dari namespace-nya, lalu tetapkan label istio.io/rev:asm-managed-rapid:

kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid --overwrite

Pada tahap ini, Anda telah berhasil mengonfigurasi bidang kontrol terkelola Anthos Service Mesh. Kini Anda siap men-deploy aplikasi atau men-deploy aplikasi contoh Bookinfo.

Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan Kubernetes dan konfigurasi bidang kontrol di semua cluster, kecuali Anda berencana membatasi konfigurasi tertentu tersebut ke subset cluster. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber kebenaran untuk cluster tersebut. Selain itu, jika cluster juga menjalankan Anthos Service Mesh 1.7, 1.8, atau yang lebih tinggi dengan Mesh CA di namespace lain, pastikan bahwa aplikasi dapat berkomunikasi dengan aplikasi lain yang dikontrol oleh bidang kontrol dalam cluster.

Memverifikasi metrik bidang kontrol

Anda dapat menampilkan versi bidang kontrol dan bidang data di Metrics Explorer.

Untuk memastikan konfigurasi Anda berfungsi dengan benar:

  1. Di konsol Google Cloud, lihat metrik bidang kontrol:

    Buka Metrics Explorer

  2. Pilih ruang kerja Anda dan tambahkan kueri kustom menggunakan parameter berikut:

    • Jenis resource: Container Kubernetes
    • Metrik: Klien Proxy
    • Filter: container_name="cr-asm-managed-rapid"
    • Group By: label revisi dan label proxy_version
    • Jumlah Agregator
    • Menstruasi: 1 menit

    Saat menjalankan Anthos Service Mesh dengan bidang kontrol dalam cluster dan yang dikelola Google, Anda dapat membedakan metrik berdasarkan nama container-nya. Misalnya, metrik terkelola memiliki container_name="cr-asm-managed", sedangkan metrik yang tidak dikelola memiliki container_name="discovery". Untuk menampilkan metrik dari keduanya, hapus Filter pada container_name="cr-asm-managed".

  3. Verifikasi versi bidang kontrol dan versi proxy dengan memeriksa kolom berikut di Metrics Explorer:

    • Kolom revision menunjukkan versi bidang kontrol.
    • Kolom proxy_version menunjukkan proxy_version.
    • Kolom value menunjukkan jumlah proxy yang terhubung.

    Untuk mengetahui pemetaan versi saluran ke Anthos Service Mesh saat ini, lihat Versi Anthos Service Mesh per saluran.

Memigrasikan aplikasi ke Anthos Service Mesh terkelola

Anthos Service Mesh terkelola hanya mendukung migrasi dari Anthos Service Mesh 1.9 yang menggunakan Mesh CA.

Untuk bermigrasi ke Anthos Service Mesh terkelola, lakukan langkah-langkah berikut:

  1. Jalankan skrip seperti yang ditunjukkan di bagian Menerapkan bidang kontrol yang dikelola Google.

  2. Jika Anda men-deploy bidang kontrol dan bidang data yang dikelola Google:

    1. Aktifkan pengelolaan bidang data:

      kubectl annotate --overwrite namespace NAMESPACE \
      mesh.cloud.google.com/proxy='{"managed":"true"}'
      
    2. Aktifkan Anthos Service Mesh di fleet:

      gcloud alpha container hub mesh enable --project=PROJECT_ID
      
  3. Ganti label namespace saat ini dengan label istio.io/rev:asm-managed-rapid:

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid \
        --overwrite
    
  4. Lakukan upgrade berkelanjutan pada deployment dalam namespace:

    kubectl rollout restart deployment -n NAMESPACE
    
  5. Uji aplikasi Anda untuk memverifikasi bahwa beban kerja berfungsi dengan benar.

  6. Jika Anda memiliki workload di namespace lain, ulangi langkah-langkah sebelumnya untuk setiap namespace.

  7. Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan konfigurasi Kubernetes dan Istio di semua cluster, kecuali jika Anda ingin membatasi konfigurasi tersebut hanya ke subset cluster saja. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber tepercaya untuk cluster tersebut.

  8. Pastikan metrik muncul seperti yang diharapkan dengan mengikuti langkah-langkah dalam Memverifikasi metrik bidang kontrol.

Cluster dapat memiliki campuran revisi, misalnya Anthos Service Mesh 1.7 dan 1.8, serta bidang kontrol dalam cluster secara bersamaan. Anda dapat menggabungkan namespace menggunakan revisi bidang kontrol Anthos Service Mesh yang berbeda tanpa batas waktu.

Jika Anda yakin aplikasi berfungsi seperti yang diharapkan, Anda dapat menghapus istiod dalam cluster setelah mengalihkan semua namespace ke bidang kontrol dalam cluster, atau menyimpannya sebagai cadangan - istiod akan otomatis memperkecil skala untuk menggunakan lebih sedikit resource. Untuk menghapus, langsung buka Menghapus bidang kontrol lama.

Jika mengalami masalah, Anda dapat mengidentifikasi dan mengatasinya menggunakan informasi dalam Menyelesaikan masalah bidang kontrol terkelola dan jika perlu, roll back ke versi sebelumnya.

Hapus bidang kontrol lama

Setelah menginstal dan mengonfirmasi bahwa semua namespace menggunakan bidang kontrol yang dikelola Google, Anda dapat menghapus bidang kontrol lama.

kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true

Jika Anda menggunakan istioctl kube-inject, bukan injeksi otomatis, atau jika Anda menginstal gateway tambahan, periksa metrik untuk bidang kontrol, dan pastikan bahwa jumlah endpoint yang terhubung adalah nol.

Roll back

Lakukan langkah-langkah berikut jika Anda perlu melakukan roll back ke versi bidang kontrol sebelumnya:

  1. Memperbarui beban kerja yang akan dimasukkan dengan bidang kontrol versi sebelumnya. Dalam perintah berikut, nilai revisi asm-191-1 hanya digunakan sebagai contoh. Ganti nilai contoh dengan label revisi bidang kontrol Anda sebelumnya.

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
    
  2. Mulai ulang Pod untuk memicu injeksi ulang agar proxy memiliki versi sebelumnya:

    kubectl rollout restart deployment -n NAMESPACE
    

Bidang kontrol terkelola akan otomatis diskalakan ke nol dan tidak menggunakan resource apa pun saat tidak digunakan. Penyediaan dan webhook yang bermutasi akan tetap ada dan tidak memengaruhi perilaku cluster.

Gateway sekarang disetel ke revisi asm-managed. Untuk melakukan roll back, jalankan kembali perintah instal Anthos Service Mesh, yang akan men-deploy ulang gateway yang mengarah kembali ke bidang kontrol dalam cluster Anda:

kubectl -n istio-system rollout undo deploy istio-ingressgateway

Nantikan output ini setelah berhasil:

deployment.apps/istio-ingressgateway rolled back

Memigrasikan gateway ke bidang kontrol yang dikelola Google

  1. Buat deployment Kubernetes untuk gateway versi baru menggunakan dokumentasi. Anda harus mengonfigurasi layanan Gateway Kubernetes yang ada untuk memilih versi lama dan baru, dengan menggunakan kolom selector dalam konfigurasi layanan.

  2. Dengan menggunakan perintah kubectl scale ini, Anda dapat meningkatkan skala deployment baru secara bertahap, sementara Anda juga menurunkan skala deployment lama dan memeriksa tanda-tanda gangguan layanan/periode nonaktif. Jika migrasi berhasil, Anda akan mencapai nol instance lama selagi tidak mengalami gangguan layanan.

Uninstal

Bidang kontrol yang dikelola Google akan diskalakan secara otomatis ke nol jika tidak ada namespace yang menggunakannya, sehingga Anda tidak perlu meng-uninstal.

Pemecahan masalah

Untuk mengidentifikasi dan menyelesaikan masalah saat menggunakan bidang kontrol terkelola, lihat Menyelesaikan masalah bidang kontrol terkelola.

Apa langkah selanjutnya?