Menyiapkan integrasi dengan Direktori Layanan

Panduan ini mengasumsikan bahwa Anda memiliki deployment Cloud Service Mesh yang berjalan dan Anda telah mendaftarkan setidaknya satu layanan dengan Direktori Layanan. Petunjuk penyiapan berlaku baik Anda menggunakan Envoy maupun gRPC tanpa proxy.

Untuk menggunakan Direktori Layanan dan Cloud Service Mesh, langkah pertama adalah memublikasikan layanan Anda ke Direktori Layanan. Lihat informasi tentang memublikasikan layanan ke Direktori Layanan atau dokumentasi Direktori Layanan untuk informasi ringkasan umum.

Setelah layanan terdaftar di Direktori Layanan, Anda akan membuat binding layanan menggunakan resource API Cloud Service Mesh. Anda membuat layanan backend yang didedikasikan untuk integrasi dengan Direktori Layanan, karena layanan backend yang mereferensikan binding layanan tidak dapat memiliki backend atau health check terkait.

Persyaratan aturan penerusan dan aturan host Cloud Service Mesh dengan load balancing API

Saat Anda mengonfigurasi Cloud Service Mesh untuk digunakan dengan Direktori Layanan dan menggunakan load balancing API yang lebih lama, ikuti panduan berikut:

  1. Pastikan aturan penerusan Cloud Service Mesh menggunakan alamat IP virtual (VIP) 0.0.0.0.
  2. Jika Anda memiliki zona pribadi, pastikan aturan host di peta URL cocok dengan nama DNS yang Direktori Layanan konfigurasikan di zona pribadi Cloud DNS Anda.

Jika Anda tidak mengikuti panduan ini, permintaan keluar dari aplikasi Anda kemungkinan akan gagal.

Menetapkan endpoint API network-services

Sebelum membuat dan menggunakan layanan backend, pastikan endpoint API network-services ditetapkan sehingga resource binding layanan di bagian resource network-services direferensikan dengan benar. Tetapkan endpoint API network-services menggunakan perintah berikut.

export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"

Persyaratan peran dan izin

Pastikan Anda memiliki izin dan peran berikut sebelum membuat deployment Cloud Service Mesh.

Peran dan izin binding layanan

Bagian ini tidak membahas izin Pemilik, Editor, dan Viewer tingkat project. Bagian ini menjelaskan izin dan peran yang diperlukan untuk membuat, membaca, memperbarui, dan menghapus resource.

Tindakan Izin Peran
Membuat binding layanan. networkservices.serviceBindings.create Network Admin
Mendapatkan binding layanan. networkservices.serviceBindings.get Network Admin, Network Viewer
Mencantumkan binding layanan di Google Cloud project. networkservices.serviceBindings.list Network Admin, Network Viewer
Memperbarui binding layanan. networkservices.serviceBindings.update Network Admin
Menghapus binding layanan. networkservices.serviceBindings.delete Network Admin

Izin layanan Direktori Layanan

Administrator Direktori Layanan harus memberikan izin servicedirectory.services.bind ke akun layanan yang mencoba melampirkan binding layanan ke layanan Direktori Layanan. Hal ini memungkinkan akun layanan menggunakan layanan Direktori Layanan, yang berarti akun dapat mereferensikan layanan Direktori Layanan dalam binding layanan.

Penerapan izin

Pemeriksaan izin IAM dilakukan saat Anda mengonfigurasi Cloud Service Mesh. Anda harus memiliki izin yang diperlukan untuk membuat binding layanan, dan untuk mengaitkan binding layanan dengan layanan Direktori Layanan tertentu. Jika izin yang benar sudah ada, Anda dapat mengonfigurasi klien mesh untuk mempelajari dan mengirim traffic ke layanan Direktori Layanan.

Karena pemeriksaan ini terjadi pada waktu konfigurasi, menghapus izin pengikatan pada layanan Direktori Layanan yang ada tidak akan mengganggu alur traffic. Setelah binding layanan dibuat, menghapus izin tidak akan memengaruhi apakah klien mesh dapat mempelajari dan mengirim traffic ke layanan Direktori Layanan.

Untuk menghentikan klien mesh berkomunikasi dengan layanan Direktori Layanan, Anda dapat menggunakan mekanisme lain:

  1. Membatasi akses ke layanan Direktori Layanan. Misalnya, Anda dapat menggunakan aturan firewall.
  2. Menghapus layanan Direktori Layanan.
  3. Memperbarui konfigurasi Cloud Service Mesh, misalnya, dengan menghapus binding layanan dari layanan backend.

Praktik terbaik

  • Meskipun Direktori Layanan memungkinkan pendaftaran endpoint menggunakan Direktori Layanan API, sebaiknya gunakan integrasi yang otomatis mendaftar ke Direktori Layanan saat tersedia. Untuk mengetahui informasi selengkapnya tentang integrasi ini, lihat Ringkasan Direktori Layanan untuk GKE dan Ringkasan Direktori Layanan dan Cloud Load Balancing.
  • Sebaiknya gunakan namespace dan layanan yang sama untuk layanan logis tertentu, meskipun layanan tersebut di-deploy di berbagai region.

Menggunakan Direktori Layanan untuk penemuan layanan

Diagram berikut memberikan ringkasan status akhir prosedur penyiapan ini, termasuk konfigurasi, cara interaksi sistem yang berbeda, dan cara permintaan diselesaikan ke endpoint layanan. Contoh ini mengasumsikan bahwa Anda sudah memiliki layanan yang terdaftar di Direktori Layanan.

Detail konfigurasi untuk menggunakan Direktori Layanan untuk penemuan layanan.
Detail konfigurasi untuk menggunakan Direktori Layanan untuk penemuan layanan (klik untuk memperbesar)

Membuat layanan Direktori Layanan tersedia untuk Cloud Service Mesh terdiri dari langkah-langkah berikut.

  1. Buat layanan backend baru di Cloud Service Mesh dan jangan buat backend untuk layanan backend.
  2. Buat binding layanan global untuk layanan Direktori Layanan.
  3. Ikat layanan Direktori Layanan ke layanan backend ini. Secara opsional, tetapkan kolom dan kebijakan tambahan pada layanan backend.

  4. Buat konfigurasi perutean baru, atau perbarui konfigurasi yang ada, sehingga permintaan klien dapat dirutekan ke layanan backend baru.

Anda tidak dapat menetapkan health check pada layanan backend yang mereferensikan binding layanan. Layanan backend juga tidak dapat memiliki backend.

Membuat integrasi

Gunakan petunjuk berikut untuk mengintegrasikan Cloud Service Mesh dengan Direktori Layanan.

Membuat layanan backend

Gunakan petunjuk berikut untuk membuat layanan backend dalam deployment Cloud Service Mesh.

  1. Buat layanan backend untuk digunakan dengan layanan Direktori Layanan.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Buat binding layanan yang mereferensikan layanan Direktori Layanan.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service
    
  3. Ikat layanan ke layanan backend.

    gcloud beta compute backend-services update td-sd-demo-service \
     --global \
     --service-bindings my-sd-binding
    

Setelah Anda membuat layanan backend dan mengikat satu atau beberapa layanan Direktori Layanan, Cloud Service Mesh akan mulai melacak endpoint yang terkait dengan layanan Direktori Layanan. Endpoint adalah pasangan IP:port yang berbeda. Agar layanan ini dapat dirutekan, Anda harus mengonfigurasi perutean.

Mengonfigurasi perutean

Gunakan petunjuk berikut untuk memperbarui konfigurasi perutean.

API perutean layanan

Contoh berikut mengasumsikan bahwa Anda memiliki resource Mesh bernama sidecar- mesh. Anda membuat resource HTTPRoute dengan nama host yang ditetapkan ke myservice.example.com dan tujuan ditetapkan ke layanan backend td-sd-demo-service yang Anda buat di bagian sebelumnya.

  1. Buat spesifikasi HTTPRoute dan simpan dalam file bernama httproute.yaml.

    name: td-sd-demo-route
    hostnames:
    ‐ myservice.example.com
    meshes:
    ‐ projects/PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    ‐ action:
      destinations:
      ‐ serviceName: "projects/PROJECT_NUMBER/locations/global/backendServices/td-sd-demo-service"
    
  2. Impor spesifikasi HTTPRoute.

    gcloud network-services httproutes import td-sd-demo-route \
      --source=httproute.yaml \
      --location=global
    

Load balancing API

Contoh berikut mengasumsikan bahwa Anda sudah memiliki konfigurasi perutean dasar, termasuk peta URL yang disebut my-url-map.

  • Pertama, Anda membuat pencocok jalur untuk peta URL ini. Pencocok jalur tidak rumit. Saat digunakan, pencocok jalur akan diselesaikan ke td-sd-demo-service, yang Anda buat pada langkah sebelumnya.
  • Selanjutnya, Anda menambahkan aturan host ke peta URL. Aturan host ini menyebabkan pencocok jalur digunakan jika permintaan menentukan nama host myservice.example.com.
  1. Buat pencocok jalur sederhana yang mengarah ke layanan backend Anda.

    gcloud compute url-maps add-path-matcher my-url-map \
     --global \
     --default-service td-sd-demo-service \
     --path-matcher-name my-path-matcher
    
  2. Petakan layanan backend ke aturan host baru di peta URL yang ada.

    gcloud compute url-maps add-host-rule my-url-map \
     --global \
     --path-matcher-name=my-path-matcher \
     --hosts=myservice.example.com
    

Melampirkan layanan yang sama dari beberapa region

Cloud Service Mesh memungkinkan Anda mengikat beberapa layanan Direktori Layanan ke layanan backend yang sama. Misalnya, Anda mungkin memiliki dua layanan Direktori Layanan, yang masing-masing identik, tetapi dengan endpoint di Google Cloud region atau zona yang berbeda. Dengan kata lain, satu layanan backend global dapat memiliki dua binding layanan global, dengan satu mengarah ke layanan di us-east1 dan yang lainnya mengarah ke layanan di us-west1.

  1. Buat layanan backend untuk layanan Direktori Layanan yang diimpor.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Buat binding layanan ke layanan Direktori Layanan di us-east1.

    gcloud beta network-services service-bindings create us-east1-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Buat binding layanan ke layanan Direktori Layanan di us-west1.

    gcloud beta network-services service-bindings create us-west1-binding \
     --location global
     --service-directory-region us-west1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  4. Ikat layanan us-east1 dan us-west1 ke layanan backend.

    gcloud compute backend-services update td-sd-demo-service \
      --global \
      --service-bindings us-east1-binding,us-west1-binding
    

Menerapkan kebijakan pengelolaan traffic lanjutan

Di bagian sebelumnya, Anda menggunakan Cloud Service Mesh untuk menyiapkan kebijakan perutean terhadap layanan Direktori Layanan yang ada. Anda dapat menerapkan pola ini ke skenario pengelolaan traffic yang lebih canggih.

Bayangkan skenario berikut. Anda memiliki layanan pengujian yang ada di luar mesh Cloud Service Mesh. Layanan pengujian adalah backend untuk Load Balancer Aplikasi internal. Anda ingin memutar ulang beberapa traffic produksi yang berasal dari mesh Cloud Service Mesh ke layanan eksternal ini. Cloud Service Mesh dapat melakukannya menggunakan RequestMirrorPolicy, yang dapat mengirim traffic ke layanan backend lain saat permintaan diproses. Proses ini juga disebut permintaan bayangan, dan memungkinkan Anda memeriksa traffic tanpa memengaruhi layanan produksi.

Anda dapat mengaktifkan klien Envoy untuk membuat traffic bayangan ke layanan pengujian dengan menambahkan atau menghapus endpoint layanan pengujian secara manual ke mesh Cloud Service Mesh. Namun, prosesnya lebih sederhana jika Anda menggunakan integrasi Direktori Layanan.

Menggunakan Direktori Layanan untuk penemuan layanan dengan mirroring.
Menggunakan Direktori Layanan untuk penemuan layanan dengan mirroring(klik untuk memperbesar)

Dalam contoh ini, Anda mulai dengan mengarahkan layanan backend ke pendaftaran Direktori Layanan untuk layanan pengujian pembayaran. Kemudian, Anda menambahkan kebijakan permintaan bayangan ke layanan di Cloud Service Mesh.

  1. Buat layanan backend untuk kebijakan permintaan bayangan.

    gcloud compute backend-services create payments-test-bes \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Buat binding layanan yang mereferensikan layanan Direktori Layanan.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Ikat layanan Direktori Layanan ke layanan backend pengujian.

    gcloud beta compute backend-services update payments-test-bes \
     --global \
     --service-bindings my-sd-binding
    
  4. Edit peta URL untuk membuat permintaan bayangan ke layanan pengujian.

    gcloud compute url-maps edit my-url-map \
      --region=global
    
  5. Setelah konfigurasi peta URL dimuat ke dalam editor, tambahkan kebijakan permintaan bayangan untuk membuat permintaan bayangan ke layanan Direktori Layanan yang ada.

    defaultService: my-project/global/default-service
       hostRules:
        - hosts:
          - '*'
          pathMatcher: path-matcher-one
       pathMatchers:
        - defaultService: my-project/global/default-service
         name: path-matcher-one
         pathRules:
          - paths:
            - /payments/
            service: my-project/global/default-service
            requestMirrorPolicy:
              backendService: myproject/global/payments-test-bes
    

Menghapus binding layanan dari layanan backend

Untuk menghapus binding layanan dari layanan backend, teruskan daftar binding layanan baru ke perintah gcloud compute backend-services update. Daftar baru tidak boleh menyertakan binding layanan yang ingin Anda hapus:

  • Untuk menghapus semua binding layanan, tetapkan flag --no-service-bindings.
  • Untuk menghapus satu atau beberapa binding layanan: teruskan daftar binding layanan baru yang menghilangkan binding layanan yang ingin Anda hapus ke flag --service-bindings.

Menambahkan atau menghapus binding layanan

Perintah bind-service menambahkan binding layanan ke kumpulan binding layanan yang ada di layanan backend.

gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

Perintah unbind-service menghapus binding layanan dari kumpulan binding layanan yang ada di layanan backend.

gcloud compute backend-services unbind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

Perintah bind-service dan unbind-service adalah konstruksi Google Cloud CLI. Perintah tersebut bukan konstruksi tingkat API.

Langkah berikutnya