Mengonfigurasi express link

Express link di ambient networking memungkinkan Anda menghubungkan layanan Cloud Run sumber ke layanan Cloud Run tujuan dalam project dan region yang sama tanpa menulis kode autentikasi di aplikasi atau mengonfigurasi mesh layanan.

Saat layanan Cloud Run memanggil layanan Cloud Run lain yang dilindungi Identity and Access Management (IAM), permintaan harus menyertakan token ID OpenID Connect (OIDC) agar tujuan dapat memverifikasi identitas dan izin pemanggil. Tanpa express link, Anda harus menulis kode autentikasi layanan ke layanan di aplikasi Anda untuk mengambil dan melampirkan token dari server metadata, atau mengonfigurasi resource Cloud Service Mesh seperti jaringan Virtual Private Cloud (VPC), layanan backend, dan aturan pemilihan rute. Express link mengalihkan tugas autentikasi dan perutean ini ke container sidecar ambient yang terkelola sepenuhnya, sehingga kode aplikasi Anda tetap portabel dan berfokus pada logika bisnis.

Kasus penggunaan

Anda dapat menggunakan express link untuk skenario berikut:

  • Mengalihkan autentikasi antar-layanan dari kode aplikasi: menghubungkan layanan Cloud Run yang memanggil ke layanan Cloud Run tujuan yang dilindungi IAM melalui HTTP biasa. Sidecar ambient secara otomatis mengambil dan memasukkan token ID OIDC layanan sumber dan mengenkripsi permintaan melalui HTTPS.
  • Abstraksikan URL tujuan dengan nama host kustom: konfigurasikan nama host kustom di express link menggunakan flag --matches-hostname agar aplikasi sumber Anda mengirim permintaan ke alamat logis, seperti http://my-backend, bukan melakukan hardcoding pada URL deterministik tujuan. Jika layanan tujuan berubah, Anda dapat membuat ulang link ekspres untuk mengarah ke tujuan baru tanpa mengubah atau men-deploy ulang kode aplikasi sumber.
  • Menyederhanakan panggilan layanan point-to-point tanpa mesh layanan: dapatkan injeksi kredensial otomatis antara layanan Cloud Run tanpa menyediakan Jaringan VPC, grup endpoint jaringan, layanan backend, atau data Cloud DNS yang diperlukan oleh Cloud Service Mesh.

Tabel berikut membandingkan langkah-langkah untuk menyiapkan komunikasi antar-layanan yang diautentikasi tanpa dan dengan express link:

Langkah Tanpa express link Dengan express link
1. Men-deploy layanan tujuan Deploy layanan Cloud Run tujuan dengan autentikasi IAM yang diperlukan (--no-allow-unauthenticated). Sama.
2. Memberikan izin invoker Berikan peran Cloud Run Invoker (roles/run.invoker) di layanan tujuan ke akun layanan dari layanan sumber. Sama.
3. Mengonfigurasi permintaan keluar Tulis kode di aplikasi sumber Anda untuk mengambil token ID OIDC untuk URL tujuan dan lampirkan ke header Authorization: Bearer melalui HTTPS. Kirim permintaan http:// biasa ke URL tujuan atau nama host kustom tanpa kode autentikasi di aplikasi sumber Anda.
4. Men-deploy layanan sumber Men-deploy layanan Cloud Run sumber. Deploy layanan Cloud Run sumber dengan mengaktifkan ambient networking, lalu buat express link antara layanan sumber dan tujuan yang di-deploy.

Arsitektur

Saat Anda mengaktifkan ambient networking di layanan Cloud Run sumber dan membuat link ekspres, Cloud Run akan mengonfigurasi container sidecar Envoy yang terkelola sepenuhnya yang berjalan bersama container aplikasi Anda di setiap instance container.

Saat aplikasi Anda mengirim permintaan HTTP biasa ke URL deterministik layanan tujuan atau ke nama host kustom yang Anda konfigurasi di express link, container sidecar ambient akan otomatis melakukan hal berikut:

  1. Menghalangi permintaan HTTP keluar yang ditujukan untuk layanan target.
  2. Mengambil token ID OIDC untuk akun layanan layanan sumber dan memasukkannya ke dalam header Authorization.
  3. Mengenkripsi dan meneruskan permintaan melalui HTTPS (TLS satu arah) ke layanan Cloud Run tujuan, yang memverifikasi izin IAM pemanggil.
Container aplikasi di dalam layanan Cloud Run sumber
  mengirimkan permintaan HTTP biasa ke container sidecar ambient, yang
  memproses permintaan, memasukkan token ID OIDC, dan meneruskan token ID
  dan payload melalui HTTPS melalui express link ke layanan Cloud Run
  tujuan.
Gambar 1. Container sidecar ambient mencegat permintaan keluar dari layanan sumber Anda, memasukkan token ID OIDC, dan meneruskan permintaan melalui HTTPS (TLS satu arah) ke layanan tujuan.

Konektivitas jaringan dan bidang data

Express link mengonfigurasi intersepsi permintaan keluar dan injeksi kredensial di sidecar ambient, tetapi tidak menggantikan jalur jaringan yang mendasarinya antara layanan Anda. Anda tetap harus memastikan bahwa layanan sumber Anda dapat menjangkau jalur ingress layanan tujuan:

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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Aktifkan Cloud Run API, Network Services API, dan Traffic Director API, jika belum diaktifkan.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    Aktifkan API

  7. Pastikan Anda memiliki layanan Cloud Run sumber yang sudah ada dan layanan Cloud Run tujuan yang sudah ada dalam project dan region yang sama.
  8. Pastikan ambient networking diaktifkan dengan cakupan global pada layanan Cloud Run sumber Anda. Misalnya, jalankan gcloud beta run services update SOURCE_SERVICE --ambient-networking --ambient-scope=global --region=REGION, dengan mengingat untuk meningkatkan batas CPU dan memori layanan Anda terlebih dahulu.
  9. Baca halaman harga Cloud Run untuk mengetahui penggunaan sidecar Ambient Networking. Penagihan untuk fitur standby tidak diberlakukan selama Pratinjau.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi express link, minta administrator untuk memberi Anda peran IAM berikut:

  • Konfigurasikan express link: Developer Cloud Run (roles/run.developer) dan Pengguna Akun Layanan (roles/iam.serviceAccountUser) di project
  • Mengelola resource express link: Network Services Admin (roles/networkservices.admin) pada project

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Identitas layanan dari layanan Cloud Run sumber juga harus memiliki peran berikut pada project:

  • Klien Traffic Director (roles/trafficdirector.client)
  • Cloud Trace Agent (roles/cloudtrace.agent)

Untuk memberikan peran ini ke identitas layanan, gunakan gcloud:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/trafficdirector.client"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/cloudtrace.agent"

Ganti kode berikut:

  • PROJECT_ID: Project ID Google Cloud Anda.
  • RUN_CLIENT_SA: nama akun layanan yang dilampirkan ke layanan Cloud Run sumber Anda.

Jika identitas layanan Cloud Run tidak memiliki peran ini, layanan Cloud Run tetap di-deploy, tetapi fitur yang bergantung pada ambient networking tidak akan berfungsi. Perilaku ini berbeda dengan Cloud Service Mesh, di mana layanan Cloud Run gagal di-deploy jika tidak memiliki peran yang diperlukan.

Batasan

Batasan berikut berlaku untuk express link:

  • Hanya layanan Cloud Run yang didukung sebagai resource sumber dan tujuan. Tugas, worker pool, dan instance Cloud Run tidak didukung.
  • Konfigurasi lintas project dan lintas region tidak didukung. Layanan Cloud Run sumber dan layanan Cloud Run tujuan harus berada dalam project dan region yang sama.
  • Express link memerlukan ambient networking dengan cakupan global pada layanan sumber. Jika layanan sumber menggunakan cakupan regional, pembuatan express link akan berhasil, tetapi traffic tidak akan dirutekan.
  • Anda harus membuat layanan Cloud Run sumber dan tujuan sebelum membuat express link. Pembuatan yang tidak berurutan tidak didukung. Jika Anda menghapus layanan tujuan, express link dapat terus menampilkan dan menyajikan konfigurasi yang sudah tidak berlaku hingga Anda menghapus atau membuat ulang express link.
  • Anda tidak dapat memperbarui layanan sumber, layanan tujuan, atau nama host kustom dari link ekspres yang ada di tempat. Perintah gcloud beta network-services express-links update hanya memperbarui deskripsi express link. Untuk mengubah konfigurasi perutean, hapus dan buat ulang express link.
  • Layanan Cloud Run tujuan harus mengaktifkan URL run.app default, meskipun Anda menggunakan URL kustom, domain kustom, atau mengonfigurasi nama host kustom dengan flag --matches-hostname.
  • Permintaan yang dikirim ke URL non-deterministik tujuan tidak akan dicegat dan akan gagal dengan error 403 Forbidden. Jika layanan tujuan tidak memiliki URL deterministik karena gabungan nama layanan dan nomor project melebihi 63 karakter, Anda harus menentukan --matches-hostname atau pembuatan express link akan gagal dengan error Cloud Run Service name is too long.
  • Saat Anda melihat status lengkap express link, hanya informasi layanan tujuan yang ditampilkan. Detail tentang sumber revisi Cloud Run dan autentikasi yang dinegosiasikan mungkin tidak ada atau menampilkan data yang sudah tidak berlaku. Hal ini tidak memengaruhi cara express link merutekan atau mengautentikasi traffic.
  • Layanan Cloud Run sumber yang dikonfigurasi dengan Identitas Agen dan token terikat mTLS tidak didukung.
  • Layanan Cloud Run sumber yang dikonfigurasi untuk merutekan traffic keluar melalui Gateway Agen di Cloud Run dan Secure Web Proxy tidak didukung. Express link memerlukan cakupan jaringan ambient global, sedangkan Agent Gateway memerlukan cakupan regional.
  • Jika permintaan keluar dari layanan sumber sudah menyertakan header Authorization, express link akan meneruskan permintaan dengan header tersebut tanpa perubahan dan tidak memasukkan token. Injeksi token otomatis ke header X-Serverless-Authorization tidak didukung.
  • Traffic yang dihasilkan dari container sandbox Cloud Run tidak didukung.
  • Anda tidak dapat menggunakan express link untuk meneruskan traffic ke layanan Cloud Run tujuan yang diamankan oleh Identity-Aware Proxy.
  • Setiap express link mendukung satu layanan Cloud Run tujuan, dan Anda dapat membuat hingga 5.000 express link per project.

Untuk menghubungkan layanan Cloud Run, buat express link yang menentukan layanan sumber dan layanan tujuan, lalu berikan peran Cloud Run Invoker pada layanan tujuan.

Menghubungkan ke layanan Cloud Run lain

Untuk menghubungkan layanan Cloud Run sumber ke layanan Cloud Run tujuan, buat express link menggunakan gcloud atau YAML.

gcloud

Gunakan perintah gcloud beta network-services express-links create untuk membuat express link:

gcloud beta network-services express-links create EXPRESS_LINK_NAME \
    --location=global \
    --source-services=//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/SOURCE_SERVICE \
    --destination-services=//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/DESTINATION_SERVICE

Ganti kode berikut:

  • EXPRESS_LINK_NAME: nama untuk express link Anda.
  • PROJECT_ID: Project ID Google Cloud Anda.
  • REGION: region tempat layanan Cloud Run Anda di-deploy.
  • SOURCE_SERVICE: nama layanan Cloud Run sumber.
  • DESTINATION_SERVICE: nama layanan Cloud Run tujuan.

Setelah perintah selesai, perlu waktu hingga 2 menit agar konfigurasi perutean diterapkan ke instance layanan sumber yang sedang berjalan.

Secara default, express link hanya mengintersepsi permintaan yang dikirim ke URL deterministik layanan tujuan, bukan URL non-deterministiknya. Untuk menggunakan nama host kustom, teruskan nama host tanpa skema di flag --matches-hostname="HOSTNAME", seperti --matches-hostname="DESTINATION_SERVICE", dan kirim permintaan dari aplikasi sumber Anda ke http://HOSTNAME. Menentukan --matches-hostname akan menggantikan URL deterministik, bukan menambahkannya.

YAML

  1. Buat file konfigurasi, misalnya, express-link.yaml:

    name: "projects/PROJECT_ID/locations/global/expressLinks/EXPRESS_LINK_NAME"
    source:
      services:
        - "//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/SOURCE_SERVICE"
    destination:
      services:
        - "//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/DESTINATION_SERVICE"

    Ganti kode berikut:

    • PROJECT_ID: Project ID Google Cloud Anda.
    • REGION: region tempat layanan Anda di-deploy.
    • EXPRESS_LINK_NAME: nama untuk express link Anda.
    • SOURCE_SERVICE: nama layanan Cloud Run sumber.
    • DESTINATION_SERVICE: nama layanan Cloud Run tujuan.
  2. Impor file YAML menggunakan perintah gcloud beta network-services express-links import:

    gcloud beta network-services express-links import EXPRESS_LINK_NAME \
        --location=global \
        --source=YAML_FILENAME.yaml

    Ganti kode berikut:

    • EXPRESS_LINK_NAME: nama untuk express link Anda.
    • YAML_FILENAME: nama file YAML Anda.

Memberikan izin invoker pada layanan tujuan

Agar layanan sumber dapat memanggil layanan tujuan yang dilindungi IAM, berikan peran Cloud Run Invoker (roles/run.invoker) ke akun layanan dari layanan sumber di layanan Cloud Run tujuan. Hal ini diperlukan agar autentikasi berfungsi di bidang data.

gcloud run services add-iam-policy-binding DESTINATION_SERVICE \
    --member="serviceAccount:SOURCE_SA@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/run.invoker" \
    --region=REGION

Ganti kode berikut:

  • DESTINATION_SERVICE: nama layanan Cloud Run tujuan.
  • SOURCE_SA: nama akun layanan yang dilampirkan ke layanan Cloud Run sumber Anda.
  • PROJECT_ID: Project ID Google Cloud Anda.
  • REGION: region tempat layanan tujuan Anda di-deploy.

Memverifikasi status express link

Untuk melihat konfigurasi dasar express link Anda, gunakan perintah gcloud beta network-services express-links describe:

gcloud beta network-services express-links describe EXPRESS_LINK_NAME \
    --location=global

Untuk melihat status lengkap express link, termasuk connectionStatus (jenis rute aktif, nama host yang cocok, dan URI revisi sumber) dan cloudRunSourceInfo (metode autentikasi dan jaringan VPC yang dikonfigurasi), sertakan ?view=EXPRESS_LINK_VIEW_FULL# dalam nama resource:

gcloud beta network-services express-links describe 'EXPRESS_LINK_NAME?view=EXPRESS_LINK_VIEW_FULL#' \
    --location=global

Ganti EXPRESS_LINK_NAME dengan nama express link Anda. Pertahankan tanda kutip tunggal dan karakter # di akhir saat membuat kueri tampilan lengkap.

Untuk menghapus express link dan menghentikan injeksi kredensial otomatis dan intersepsi traffic dari layanan sumber, gunakan perintah gcloud beta network-services express-links delete:

gcloud beta network-services express-links delete EXPRESS_LINK_NAME \
    --location=global

Ganti EXPRESS_LINK_NAME dengan nama express link Anda.

Untuk mengarahkan express link yang ada ke layanan tujuan yang berbeda atau mengubah setelan --matches-hostname, hapus express link dengan perintah sebelumnya, lalu buat express link baru dengan konfigurasi yang diperbarui.

Langkah berikutnya