1. Pengantar
Ringkasan
Guna mengamankan traffic jaringan untuk layanan dan aplikasinya, banyak organisasi menggunakan jaringan Virtual Private Cloud (VPC) di Google Cloud dengan kontrol perimeter untuk mencegah pemindahan data yang tidak sah. Jaringan VPC adalah versi virtual dari jaringan fisik yang diimplementasikan di dalam jaringan produksi Google. Jaringan VPC menyediakan konektivitas untuk instance virtual machine (VM) Compute Engine Anda, menawarkan Load Balancer Jaringan passthrough internal dan sistem proxy untuk Load Balancer Aplikasi internal, terhubung ke jaringan lokal menggunakan tunnel Cloud VPN dan lampiran VLAN untuk Cloud Interconnect, serta mendistribusikan traffic dari load balancer eksternal Google Cloud ke backend.
Tidak seperti VM, layanan Cloud Run secara default tidak dikaitkan dengan jaringan VPC tertentu. Codelab ini menunjukkan cara mengubah setelan ingress (koneksi inbound) sehingga hanya traffic yang berasal dari VPC yang dapat mengakses layanan Cloud Run (misalnya, layanan backend). Selain itu, codelab ini menunjukkan cara membuat layanan kedua (misalnya, layanan frontend) mengakses layanan Cloud Run backend melalui VPC.
Dalam contoh ini, layanan Cloud Run backend menampilkan hello world. Layanan Cloud Run frontend menyediakan kolom input di UI untuk mengumpulkan URL. Kemudian, layanan frontend membuat permintaan GET ke URL tersebut (misalnya, layanan backend), sehingga menjadikannya permintaan layanan ke layanan (bukan permintaan browser ke layanan). Jika layanan frontend berhasil menjangkau backend, pesan hello world akan ditampilkan di browser.
Yang akan Anda pelajari
- Cara mengizinkan hanya traffic dari VPC ke layanan Cloud Run Anda
- Cara mengonfigurasi egress pada layanan Cloud Run untuk berkomunikasi dengan layanan Cloud Run yang hanya memiliki ingress internal
2. Penyiapan dan Persyaratan
Prasyarat
- Anda login ke Konsol Cloud.
- Anda telah men-deploy layanan Cloud Run sebelumnya. Misalnya, Anda dapat mengikuti panduan memulai deployment layanan web dari kode sumber untuk memulai.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell
.

Jika ini adalah pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Continue.

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

Virtual machine ini dilengkapi dengan semua alat pengembangan yang diperlukan. VM ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project telah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Membuat layanan Cloud Run
Menyiapkan variabel lingkungan
Anda dapat menetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.
REGION=<YOUR_REGION, e.g. us-central1> FRONTEND=frontend BACKEND=backend
Buat layanan Cloud Run backend
Pertama, buat direktori untuk kode sumber dan cd ke direktori tersebut.
mkdir -p internal-codelab/frontend internal-codelab/backend && cd internal-codelab/backend
Kemudian, buat file package.json dengan konten berikut:
{
"name": "backend-service",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.1"
}
}
Selanjutnya, buat file sumber index.js dengan konten di bawah. File ini berisi titik entri untuk layanan dan berisi logika utama untuk aplikasi.
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));
app.get('/', function (req, res) {
res.send("hello world");
});
const port = parseInt(process.env.PORT) || 8080;
app.listen(port, () => {
console.log(`helloworld: listening on port ${port}`);
});
Terakhir, deploy layanan Cloud Run dengan menjalankan perintah berikut.
gcloud run deploy $BACKEND --source . --allow-unauthenticated --region $REGION
Membuat layanan Cloud Run frontend
Buka direktori frontend.
cd ../frontend
Kemudian, buat file package.json dengan konten berikut:
{
"name": "frontend",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.6.6",
"express": "^4.18.2"
}
}
Selanjutnya, buat file sumber index.js dengan konten di bawah. File ini berisi titik entri untuk layanan dan berisi logika utama untuk aplikasi.
const express = require("express");
const app = express();
const port = 8080;
const path = require('path');
const axios = require('axios');
// serve static content (index.html) using
// built-in middleware function in Express
app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }));
// this endpoint receives a URL in the post body
// and then makes a get request to that URL
// results are sent back to the caller
app.post('/callService', async (req, res) => {
const url = req.body.url;
let message = "";
try {
console.log("url: ", url);
const response = await axios.get(url);
message = response.data;
} catch (error) {
message = error.message;
console.error(error.message);
}
res.send(`
${message}
<p>
</p>
`);
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
Buat direktori publik untuk file index.html
mkdir public touch public/index.html
Kemudian, perbarui index.html agar berisi kode berikut:
<html>
<script
src="https://unpkg.com/htmx.org@1.9.10"
integrity="sha384-D1Kt99CQMDuVetoL1lrYwg5t+9QdHe7NLX/SoJYkXDFfX37iInKRy5xLSi8nO7UC"
crossorigin="anonymous"
></script>
<body>
<div style="margin-top: 100px; margin-left: 100px">
<h1>I'm the Frontend service on the Internet</h1>
<form hx-trigger="submit" hx-post="/callService" hx-target="#message">
<label for="url"> URL:</label>
<input
style="width: 308px"
type="text"
id="url"
name="url"
placeholder="The backend service URL"
required
/>
<button hx-indicator="#loading" type="submit">Submit</button>
<p></p>
<span class="htmx-indicator" id="loading"> Loading... </span>
<div id="message" style="white-space: pre-wrap"></div>
<p></p>
</form>
</div>
</body>
</html>
Terakhir, deploy layanan Cloud Run dengan menjalankan perintah berikut.
gcloud run deploy $FRONTEND --source . --allow-unauthenticated --region $REGION
Memanggil Layanan Backend
Pastikan Anda telah berhasil men-deploy dua layanan Cloud Run.
Buka URL layanan frontend di browser web Anda.
Di kotak teks, masukkan URL untuk layanan backend. Perhatikan bahwa permintaan ini dirutekan dari instance Cloud Run frontend ke layanan Cloud Run backend, bukan dirutekan dari browser Anda.
Anda akan melihat "hello world".
4. Menetapkan Layanan Backend hanya untuk ingress internal
Jalankan perintah gcloud berikut untuk hanya mengizinkan traffic dari dalam jaringan VPC Anda mengakses layanan backend Anda.
gcloud run services update $BACKEND --ingress internal --region $REGION
Untuk mengonfirmasi bahwa layanan backend Anda hanya dapat menerima traffic dari VPC Anda, coba panggil lagi layanan backend Anda dari layanan frontend Anda.
Kali ini Anda akan melihat "Request failed with status code 404"
Anda menerima error ini karena permintaan keluar (yaitu, egress) layanan Cloud Run frontend keluar ke Internet terlebih dahulu, sehingga Google Cloud tidak mengetahui asal permintaan.
Di bagian berikutnya, Anda akan mengonfigurasi layanan frontend untuk mengakses VPC, sehingga Google Cloud akan mengetahui bahwa permintaan berasal dari VPC, yang dikenali sebagai sumber internal.
5. Mengonfigurasi Layanan Frontend untuk mengakses VPC
Di bagian ini, Anda akan mengonfigurasi layanan Cloud Run frontend untuk berkomunikasi dengan layanan backend melalui VPC.
Untuk melakukannya, Anda harus menambahkan traffic keluar VPC langsung ke instance Cloud Run frontend untuk memberikan IP internal pada layanan Anda yang akan digunakan dalam VPC. Kemudian, Anda akan mengonfigurasi traffic keluar sehingga semua koneksi keluar dari layanan frontend akan menuju ke VPC.
Pertama, jalankan perintah ini untuk mengaktifkan traffic keluar VPC langsung:
gcloud beta run services update $FRONTEND \ --network=default \ --subnet=default \ --vpc-egress=all-traffic \ --region=$REGION
Sekarang Anda dapat mengonfirmasi bahwa layanan frontend Anda memiliki akses ke VPC:
gcloud beta run services describe $FRONTEND \ --region=$REGION
Anda akan melihat output yang mirip dengan
VPC access:
Network: default
Subnet: default
Egress: all-traffic
Sekarang, coba panggil lagi layanan backend dari layanan frontend Anda.
Kali ini Anda akan melihat "hello world".
Catatan: Layanan frontend Anda tidak akan memiliki akses Internet karena semua egress telah dirutekan ke VPC. Misalnya, layanan frontend Anda akan mengalami waktu tunggu habis jika mencoba mengakses https://curlmyip.org/.
6. Selamat!
Selamat, Anda telah menyelesaikan codelab.
Sebaiknya tinjau dokumentasi Cloud Run dan cara mengonfigurasi jaringan pribadi untuk layanan Cloud Run.
Yang telah kita bahas
- Cara mengizinkan hanya traffic dari VPC ke layanan Cloud Run Anda
- Cara mengonfigurasi egress pada layanan Cloud Run untuk berkomunikasi dengan layanan Cloud Run yang hanya memiliki ingress internal
7. Pembersihan
Untuk menghindari biaya yang tidak disengaja (misalnya, jika layanan Cloud Run tidak sengaja dipanggil lebih banyak daripada alokasi pemanggilan Cloud Run bulanan Anda di tingkat gratis), Anda dapat menghapus Cloud Run atau menghapus project yang Anda buat di Langkah 2.
Untuk menghapus layanan Cloud Run, buka Konsol Cloud Run di https://console.cloud.google.com/run, lalu hapus layanan $FRONTEND dan $BACKEND.
Jika Anda memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.