Menyiapkan integrasi dengan Direktori Layanan

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

Untuk menggunakan Direktori Layanan dan Mesh Layanan Cloud, langkah pertama adalah untuk 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 pada Direktori Layanan, Anda membuat pengikatan layanan dengan menggunakan resource API Cloud Service Mesh. Anda membuat layanan backend yang didedikasikan untuk integrasi dengan Direktori Layanan, karena layanan backend yang merujuk binding layanan tidak boleh memiliki backend atau health check terkait.

Aturan penerusan Cloud Service Mesh dan persyaratan aturan host dengan API load balancing

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

  1. Pastikan aturan penerusan Cloud Service Mesh menggunakan virtual 0.0.0.0 Alamat IP (VIP).
  2. Jika Anda memiliki zona pribadi, pastikan bahwa aturan {i>host<i} di peta URL cocok dengan nama DNS yang Direktori Layanan dikonfigurasi di zona pribadi Cloud DNS Anda.

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

Menetapkan endpoint network-services API

Sebelum membuat dan menggunakan layanan backend, pastikan network-services Endpoint API disetel agar layanan mengikat resource di bagian network-services resource direferensikan dengan benar. Menetapkan endpoint network-services API 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.

Izin dan peran binding layanan

Bagian ini tidak membahas Pemilik, Editor, dan Pengakses lihat-saja pada level project izin akses. Panduan ini menjelaskan izin dan peran yang diperlukan untuk membuat, membaca, memperbarui, dan menghapus beberapa resource.

Tindakan Izin Peran
Membuat binding layanan. networkservices.serviceBindings.create Network Admin
Dapatkan pengikatan layanan. networkservices.serviceBindings.get Admin Jaringan, Penampil Jaringan
Mencantumkan binding layanan di project Google Cloud. networkservices.serviceBindings.list Admin Jaringan, Penampil Jaringan
Mengupdate 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 pengikatan layanan ke layanan Direktori Layanan. Ini memungkinkan akun layanan menggunakan layanan Direktori Layanan, yang berarti akun tersebut dapat merujuk ke layanan Direktori Layanan dalam layanan Google Cloud.

Penerapan izin

Pemeriksaan izin IAM dilakukan saat Anda mengonfigurasi Cloud Service Mesh. Anda harus memiliki izin yang diperlukan untuk membuat pengikatan layanan, dan untuk 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 binding di layanan Direktori Layanan yang ada tidak mengganggu traffic {i>flow<i} (alur). Setelah pengikatan layanan terbentuk, menghapus izin tidak akan memengaruhi apakah klien mesh dapat mempelajari dan mengirim traffic Layanan Direktori Layanan.

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

  1. Batasi akses ke layanan Direktori Layanan. Misalnya, Anda dapat menggunakan aturan {i>firewall<i}.
  2. Hapus layanan Direktori Layanan.
  3. Mengupdate konfigurasi Cloud Service Mesh Anda, misalnya, dengan menghapus layanan binding dari layanan backend.

Praktik terbaik

  • Meskipun Direktori Layanan memungkinkan pendaftaran endpoint sebaiknya gunakan Service Directory API, integrasi yang otomatis terdaftar 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, bahkan saat layanan tersebut di-deploy di berbagai region.

Menggunakan Direktori Layanan untuk menemukan layanan

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

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

Menyediakan layanan Direktori Layanan 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. Membuat binding layanan global untuk Direktori Layanan layanan.
  3. Ikat layanan Direktori Layanan ke layanan backend ini. Anda juga dapat menetapkan kolom dan kebijakan tambahan di layanan backend.

  4. Buat konfigurasi {i>routing<i} 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 merujuk ke layanan jaringan. Layanan backend juga tidak boleh memiliki backend.

Membuat integrasi

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

Buat layanan backend

Gunakan petunjuk berikut untuk membuat layanan backend di Deployment Cloud Service Mesh.

  1. Membuat 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. Membuat pengikatan layanan yang merujuk ke Direktori Layanan 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 Direktori Layanan Cloud Service Mesh mulai melacak endpoint yang terkait dengan layanan Direktori Layanan. Endpoint adalah pasangan IP:port yang berbeda. Kepada membuat layanan ini dapat dirutekan, Anda perlu mengkonfigurasi {i>routing<i}.

Mengonfigurasi pemilihan rute

Gunakan petunjuk berikut untuk mengupdate konfigurasi pemilihan rute.

API pemilihan rute layanan

Contoh berikut mengasumsikan bahwa Anda memiliki resource Mesh yang disebut sidecar- mesh. Anda membuat resource HTTPRoute dengan nama host yang disetel 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 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
    

API load balacing

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

  • Pertama, Anda akan membuat pencocok jalur untuk peta URL ini. Pencocok jalur tidak rumit. Saat digunakan, ini akan di-resolve menjadi td-sd-demo-service, yang telah dibuat pada langkah sebelumnya.
  • Selanjutnya, Anda menambahkan aturan host ke peta URL. Aturan host ini menyebabkan jalur yang akan digunakan jika permintaan menentukan myservice.example.com host.
  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
    

Lampirkan layanan yang sama dari beberapa region

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

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

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Buat pengikatan 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 pengikatan 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 ke skenario pengelolaan traffic yang lebih canggih.

Pertimbangkan skenario ini. Anda memiliki layanan pengujian yang 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 membayangi permintaan, dan memungkinkan Anda memeriksa traffic tanpa yang memengaruhi layanan produksi.

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

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

Di contoh ini, Anda mulai dengan mengarahkan layanan backend ke Pendaftaran Direktori Layanan untuk layanan pengujian pembayaran. Kemudian, Anda dapat menambahkan kebijakan duplikasi permintaan ke layanan di Cloud Service Mesh.

  1. Buat layanan backend untuk kebijakan pencerminan permintaan.

    gcloud compute backend-services create payments-test-bes \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Membuat pengikatan layanan yang merujuk ke Direktori Layanan 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. Mengikat layanan Direktori Layanan ke backend pengujian layanan.

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

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

    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 service binding dari layanan backend, teruskan daftar binding layanan baru ke gcloud compute backend-services update perintah. Daftar baru tidak boleh menyertakan pengikatan layanan yang ingin Anda hapus:

  • Untuk menghapus semua binding layanan, tetapkan tanda --no-service-bindings.
  • Untuk menghapus satu atau beberapa binding layanan: teruskan daftar binding layanan baru yang menghilangkan pengikatan layanan yang ingin Anda hapus ke --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 layanan binding 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. Mereka adalah bukan konstruksi API level.

Langkah selanjutnya