Private Service Connect - Menggunakan Kontrol Layanan HTTP(S) Konsumen untuk XLB Global ke Layanan Terkelola

1. Pengantar

Private Service Connect memungkinkan produsen layanan menawarkan layanan kepada konsumen layanan. Jaringan VPC produsen layanan dapat mendukung banyak konsumen layanan.

Ada dua jenis endpoint Private Service Connect yang dapat terhubung ke layanan yang dipublikasikan:

  • Endpoint Private Service Connect (berdasarkan aturan penerusan)

Dengan jenis endpoint ini, konsumen terhubung ke alamat IP internal yang mereka tentukan. Private Service Connect melakukan penafsiran alamat jaringan (NAT) untuk mengarahkan permintaan ke produsen layanan.

  • Endpoint Private Service Connect dengan kontrol layanan HTTP(S) konsumen (berdasarkan load balancer HTTP(S) eksternal global)

Dengan jenis endpoint ini, konsumen terhubung ke alamat IP eksternal. Private Service Connect menggunakan grup endpoint jaringan untuk merutekan permintaan ke produsen layanan.

Penggunaan load balancer HTTP(S) eksternal global sebagai titik penegakan kebijakan memiliki manfaat berikut:

  • Anda dapat mengganti nama layanan dan memetakannya ke URL pilihan Anda.
  • Anda dapat mengonfigurasi load balancer untuk mencatat semua permintaan ke Cloud Logging.
  • Anda dapat menggunakan sertifikat TLS yang dikelola pelanggan. atau dikelola Google.

Dalam codelab ini, Anda akan mempelajari cara membuat Kontrol Layanan HTTP(S) Konsumen endpoint Private Service Connect menggunakan XLB Global untuk mengakses layanan secara pribadi di jaringan lain. Pola PSC ini dapat dilakukan menggunakan satu project atau project terpisah. Untuk tujuan lab ini, kita akan menggunakan satu project dengan dua VPC terpisah.

Yang akan Anda pelajari

  • Membuat endpoint Private Service Connect dengan Kontrol Layanan HTTP(S) Konsumen menggunakan XLB Global
  • Mengonfigurasi layanan terkelola agar diekspos melalui Lampiran Layanan untuk menerima koneksi XLB L7.
  • Buat sertifikat SSL dan konfigurasikan server web Apache untuk menghentikan TLS dan menerima traffic di port 443.
  • Buat NEG PSC.

Yang Anda butuhkan

  • Project Google Cloud
  • Pengetahuan dalam men-deploy instance dan mengonfigurasi komponen jaringan

2. Lingkungan Pengujian

Lingkungan yang akan Anda buat akan terdiri dari Load Balancer HTTP(S) Eksternal dan NEG PSC di VPC konsumen. VPC produsen akan menghosting layanan web Apache sederhana yang dikonfigurasi dengan HTTPS. Anda akan membuat layanan backend dari layanan web Apache dan meneruskan layanan backend tersebut dengan Load Balancer TCP Internal yang dikonfigurasi dengan PSC Service Lampiran.

bbca972cf488ece.png

3. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
  • Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai PROJECT_ID). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat.
  • Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

55efc1aaa7a4d3ad.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

7ffe5cbb04455448.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser.

4. Sebelum memulai

Mengaktifkan API

Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
echo $project
echo $region

Aktifkan semua layanan yang diperlukan

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com

5. Penyiapan Aturan Firewall, Subnet, dan VPC Produsen

Jaringan VPC

Dari Cloud Shell

gcloud compute networks create producer-vpc --subnet-mode custom

Membuat Subnet

Subnet diperlukan di sisi produsen untuk melakukan Penafsiran Alamat Jaringan (NAT) untuk PSC. Perhatikan bahwa tujuannya adalah PRIVATE_SERVICE_CONNECT. Artinya, subnet ini tidak dapat digunakan untuk men-deploy workload.

Dari Cloud Shell

gcloud compute networks subnets create producer-nat-subnet \
--network=producer-vpc \
--region=$region \
--range=10.100.100.0/24 \
--purpose=PRIVATE_SERVICE_CONNECT

Kita akan men-deploy dua subnet di VPC produsen. VM pertama yang men-deploy layanan produser, dan VM tambahan di region lain untuk men-deploy VM klien guna menguji konektivitas ke layanan melalui Akses Global di Load Balancer Internal TCP.

Dari Cloud Shell

gcloud compute networks subnets create service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/24 \
    --region=$region

Dari Cloud Shell

gcloud compute networks subnets create client-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/24 \
    --region=us-east4

Membuat Cloud NAT

Cloud NAT diperlukan untuk menginstal paket yang tepat bagi layanan produsen.

Dari Cloud Shell

gcloud compute routers create service-cr \
--region=$region --network=producer-vpc \
--asn=65501

Dari Cloud Shell

gcloud compute routers nats create service-nat-gw \
--router=service-cr \
--router-region=$region \
--nat-custom-subnet-ip-ranges=service-subnet \
--auto-allocate-nat-external-ips

Buat Aturan Firewall

Untuk lab ini, Anda akan menggunakan IAP untuk terhubung ke instance yang Anda buat. Aturan firewall berikut akan memungkinkan Anda terhubung ke instance melalui IAP. Jika memilih untuk tidak menggunakan IAP, lewati langkah ini. Sebagai gantinya, tambahkan alamat IP publik pada instance dan buat aturan firewall yang mengizinkan traffic masuk pada TCP port 22 dari 0.0.0.0/0.

Agar IAP dapat terhubung ke instance VM Anda, buat aturan firewall yang:

  • Berlaku untuk semua instance VM yang Anda inginkan agar dapat diakses dengan menggunakan IAP.
  • Mengizinkan traffic masuk dari rentang IP 35.235.240.0/20. Rentang ini berisi semua alamat IP yang digunakan IAP untuk penerusan TCP.

Dari Cloud Shell

gcloud compute firewall-rules create allow-ssh-iap \
    --network producer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20

Traffic klien akan berasal dari load balancer HTTP(S) Eksternal Global. Oleh karena itu, aturan Firewall harus dibuat untuk mengizinkan traffic ini ke server tujuan yang diberi tag yang akan menghosting layanan web kami. Kita juga akan membuka aturan firewall dari client-subnet untuk tujuan pengujian.

Dari Cloud Shell

gcloud compute firewall-rules create allow-xlb-client \
  --network=producer-vpc \
  --direction=ingress \
  --allow=tcp:443 \
  --target-tags=psc-service \
  --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24

Membuat Layanan Web Apache

Kita akan membuat Apache Web Service sederhana yang menampilkan "PSC Service"

Membuat Template Instance

Dari Cloud Shell

gcloud compute instance-templates create producer-service-template \
    --network producer-vpc \
    --subnet service-subnet \
    --region $region \
    --no-address \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=psc-service \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    echo "PSC Service" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Membuat Health Check untuk MIG

Dari Cloud Shell

gcloud compute health-checks create https psc-service-mig-healthcheck \
    --port=443 \
    --global

Membuat Grup Instance Terkelola

Dari Cloud Shell

gcloud compute instance-groups managed create psc-service-mig \
    --region $region \
    --size=2 \
    --template=producer-service-template \
    --health-check=psc-service-mig-healthcheck

Mengonfigurasi SSL di Server Web Apache

Selanjutnya, kita harus mengkonfigurasi SSL pada setiap server Web Apache. Kita akan melakukannya dengan membuat sertifikat dan menambahkan sertifikat tersebut ke Konfigurasi Apache.

Penghentian SSL harus dikonfigurasi pada layanan backend karena layanan harus di-front oleh load balancer TCP/UDP (L4) internal untuk pola PSC tertentu ini. Load balancer TCP/UDP internal tidak menghentikan SSL di lapisan load balancer.

Mulailah dengan melakukan SSH ke VM pertama di MIG Anda. Zona VM dan nama VM akan dialokasikan secara dinamis per lingkungan. Buka Compute Engine di konsol > Instance VM untuk menemukan nama dan zona instance Anda.

Dari Cloud Shell

gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>"  --tunnel-through-iap --project $project

Selanjutnya, kita akan membuat sertifikat melalui OpenSSL. Anda akan diminta untuk mengisi informasi tentang Negara, Negara Bagian, Lokalitas, Organisasi, Nama Unit Organisasi, Nama Umum, dan alamat email Anda. Satu-satunya informasi yang perlu Anda isi adalah Common Name, yang harus merupakan FQDN internal pilihan Anda. Untuk tujuan lab ini, Anda harus memilih example.com.

Dari Cloud Shell

sudo openssl genrsa -out private-key-file.pem 2048

Dari Cloud Shell

cat <<'EOF' >config.txt
[req]
default_bits              = 2048
req_extensions            = extension_requirements
distinguished_name        = dn_requirements

[extension_requirements]
basicConstraints          = CA:FALSE
keyUsage                  = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName            = @sans_list

[dn_requirements]
countryName               = Country Name (2 letter code)
stateOrProvinceName       = State or Province Name (full name)
localityName              = Locality Name (eg, city)
0.organizationName        = Organization Name (eg, company)
organizationalUnitName    = Organizational Unit Name (eg, section)
commonName                = Common Name (e.g. server FQDN or YOUR name)
emailAddress              = Email Address

[sans_list]
DNS.1                     = example.com

EOF

Dari Cloud Shell

sudo openssl req -new -key private-key-file.pem \
    -out csr.pem \
    -config config.txt

Dari Cloud Shell

sudo openssl x509 -req \
    -signkey private-key-file.pem \
    -in csr.pem \
    -out cert.cert \
    -extfile config.txt \
    -extensions extension_requirements \
    -days 10

Sekarang, mari kita perbarui informasi konfigurasi Apache dengan detail sertifikat baru.

sudo vi /etc/apache2/sites-enabled/default-ssl.conf

Tambahkan baris di bawah ServerAdmin yang bertuliskan

ServerName example.com

Perbarui SSLCertificateFile dan SSLCertificateKeyFile lokasi file cert.cert dan private-key-file.pem di VM Anda. Contohnya ditampilkan di bawah ini. Pastikan untuk memperbarui <profile> dengan nama direktori Anda.

SSLCertificateFile  /home/<profile>/cert.cert

SSLCertificateKeyFile /home/<profile>/private-key-file.pem

Tutup editor dan mulai ulang Apache.

sudo a2enmod ssl
sudo systemctl restart apache2

Keluar dari instance dan ulangi langkah yang sama pada instance lain dalam grup instance terkelola.

6. Membuat Layanan Produsen

Selanjutnya, kita akan membuat komponen load balancer untuk layanan.

Membuat health check load balancer.

Dari Cloud Shell

gcloud compute health-checks create https service-lb-healthcheck \
    --port=443 \
    --region=$region

Membuat layanan backend.

Dari Cloud Shell

 gcloud compute backend-services create psc-backend-service \
    --load-balancing-scheme=internal \
    --protocol=TCP \
    --region=$region \
    --health-checks=service-lb-healthcheck \
    --health-checks-region=$region

gcloud compute backend-services add-backend psc-backend-service \
--region=$region \
--instance-group=psc-service-mig

Membuat Aturan Penerusan. Perhatikan bahwa aturan penerusan harus dikonfigurasi di port 443 dan dengan Akses Global. Diperlukan agar pola PSC ini berfungsi.

Dari Cloud Shell

 gcloud compute forwarding-rules create producer-fr \
    --region=$region \
    --load-balancing-scheme=internal \
    --network=producer-vpc \
    --subnet=service-subnet \
    --address=10.0.0.100 \
    --ip-protocol=TCP \
    --ports=443 \
    --backend-service=psc-backend-service \
    --backend-service-region=$region \
    --allow-global-access

7. Menguji Layanan

Sebelum membuat Lampiran Layanan, kami akan membuat klien di region yang berbeda untuk menguji Load Balancer yang dikonfigurasi dengan Akses Global, serta layanan Apache yang dikonfigurasi untuk menghentikan TLS.

Dari Cloud Shell

gcloud compute instances create vm-client \
    --zone=us-east4-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=client-subnet \
    --no-address

SSH ke instance.

Dari Cloud Shell

gcloud compute ssh \
    --zone "us-east4-a" "vm-client" \
    --tunnel-through-iap \
    --project $project

Uji Layanan Apache dengan menghubungkan lebih dari 443 melalui load balancer.

curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443

HASIL TERDUGA

PSC Service

8. Membuat Lampiran Layanan

Dari Cloud Shell

gcloud compute service-attachments create pscservice \
    --region=$region \
    --producer-forwarding-rule=producer-fr \
    --connection-preference=ACCEPT-AUTOMATIC \
    --nat-subnets=producer-nat-subnet

Anda harus mencatat URI Lampiran Layanan karena Anda akan membutuhkannya pada langkah berikutnya untuk konfigurasi endpoint. Anda dapat memperolehnya dengan menjalankan perintah berikut di Cloud Shell

Dari Cloud Shell

gcloud compute service-attachments describe pscservice --region $region

Salin URI mulai dari /projects

Contoh: /projects/<YOUR_PROJECT_ID>/ regions/us-central1/serviceLampirans/pscservice

9. VPC Konsumen dan Penyiapan Subnet

Jaringan VPC

Dari Cloud Shell

gcloud compute networks create consumer-vpc --subnet-mode custom

Buat Subnet

Subnet diperlukan di sisi konsumen tempat Private Service Connect Network Endpoint Group (NEG) akan di-deploy.

Dari Cloud Shell

gcloud compute networks subnets create psc-neg-subnet \
--network=consumer-vpc \
--region=$region \
--range=10.100.200.0/24 \
--purpose=private

10. Membuat Endpoint Private Service Connect dan Menguji Koneksi

Kita akan mengikuti proses pembuatan NEG PSC yang akan dikaitkan dengan Lampiran Layanan yang baru saja dibuat, melampirkan NEG PSC ke layanan backend, dan mengaitkan layanan backend dengan aturan penerusan.

Siapkan URI Lampiran Layanan yang telah kita catat di langkah terakhir. Ganti URL di bawah dengan URI Anda.

Dari Cloud Shell

gcloud beta compute network-endpoint-groups create xlb-psc-neg \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \
--region=$region \
--network=consumer-vpc \
--subnet=psc-neg-subnet

Buat alamat IP publik XLB dan ambil alamat IP aktual yang ditetapkan untuk pengujian berikutnya.

Dari Cloud Shell

gcloud compute addresses create xlb-psc-address \
--ip-version=IPv4 --global

gcloud compute addresses describe xlb-psc-address --format="get(address)" --global

Selanjutnya, kita akan membuat endpoint PSC, yang dalam hal ini, di Load Balancer Eksternal.

Dari Cloud Shell

gcloud beta compute backend-services create pscneg-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global

Dari Cloud Shell

gcloud beta compute backend-services add-backend pscneg-backend-service \
--network-endpoint-group=xlb-psc-neg \
--network-endpoint-group-region=$region \
--global

Dari Cloud Shell

gcloud beta compute url-maps create xlb-psc-map \
--default-service=pscneg-backend-service \
--global

Dari Cloud Shell

gcloud beta compute target-http-proxies create psc-http-proxy \
--url-map=xlb-psc-map

Dari Cloud Shell

gcloud beta compute forwarding-rules create xlb-psc-fr \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network-tier=PREMIUM \
--address=xlb-psc-address \
--target-http-proxy=psc-http-proxy \
--ports=80 \
--global

Tunggu 5 - 7 menit, lalu masukkan alamat IP yang terkait dengan xlb-psc-address di kolom URL browser Anda.

Jika "Layanan PSC" ditampilkan, Anda telah mengonfigurasi solusi dengan benar.

11. Langkah-langkah pembersihan

Dari satu terminal Cloud Shell, hapus komponen lab

gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet

gcloud beta compute target-http-proxies delete psc-http-proxy --quiet

gcloud beta compute url-maps delete xlb-psc-map --global --quiet

gcloud beta compute backend-services delete pscneg-backend-service --global --quiet

gcloud compute addresses delete xlb-psc-address --global --quiet

gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet

gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet

gcloud compute networks delete consumer-vpc --quiet

gcloud compute service-attachments delete pscservice --region $region --quiet

gcloud compute instances delete vm-client --zone=us-east4-a --quiet

gcloud compute forwarding-rules delete producer-fr --region $region --quiet

gcloud compute backend-services delete psc-backend-service --region $region --quiet

gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet

gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet

gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet

gcloud compute instance-templates delete producer-service-template --quiet

gcloud compute firewall-rules delete allow-xlb-client --quiet

gcloud compute firewall-rules delete allow-ssh-iap --quiet

gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet

gcloud compute routers delete service-cr --region $region --quiet

gcloud compute networks subnets delete client-subnet --quiet

gcloud compute networks subnets delete service-subnet --quiet

gcloud compute networks subnets delete producer-nat-subnet --quiet

gcloud compute networks delete producer-vpc --quiet

12. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Yang telah kita bahas

  • Membuat endpoint Private Service Connect dengan Kontrol Layanan HTTP(S) Konsumen menggunakan XLB Global
  • Mengonfigurasi layanan terkelola agar diekspos melalui Lampiran Layanan untuk menerima koneksi XLB L7.
  • Buat sertifikat SSL dan konfigurasikan server web Apache untuk menghentikan TLS dan menerima traffic di port 443.
  • Buat NEG PSC.