Tutorial ini menunjukkan cara menjalankan aplikasi web di balik Load Balancer Aplikasi eksternal dengan mengonfigurasi resource Ingress.
Halaman ini ditujukan bagi spesialis Jaringan yang mendesain dan merancang jaringan untuk organisasi mereka serta menginstal, mengonfigurasi, dan mendukung peralatan jaringan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise umum.
Latar belakang
Google Kubernetes Engine (GKE) menawarkan dukungan terintegrasi untuk dua jenis Cloud Load Balancing untuk aplikasi yang dapat diakses publik:
Dalam tutorial ini, Anda akan menggunakan Ingress.
Ingress
Saat menentukan kind: Ingress
dalam manifes resource, Anda menginstruksikan GKE untuk membuat resource Ingress. Dengan menyertakan anotasi dan mendukung workload dan Layanan, Anda dapat membuat pengontrol Ingress kustom.
Jika tidak, GKE akan melakukan panggilan Google Cloud API yang sesuai untuk membuat Load Balancer Aplikasi eksternal. Aturan host peta URL load balancing dan pencocok jalur mereferensikan satu atau beberapa layanan backend, di mana setiap layanan backend sesuai dengan Layanan GKE jenis NodePort
, seperti direferensikan di Ingress
. Backend untuk setiap layanan backend adalah grup instance atau grup endpoint jaringan (NEG). NEG dibuat saat Anda mengonfigurasi load balancing native container sebagai bagian dari konfigurasi untuk Ingress Anda. Untuk setiap layanan backend, GKE membuat health check Google Cloud, berdasarkan setelan pemeriksaan kesiapan workload yang direferensikan oleh Layanan GKE terkait.
Jika Anda mengekspos layanan HTTP(S) yang dihosting di GKE, load balancing HTTP(S) adalah metode yang direkomendasikan untuk load balancing.
Tujuan
- Membuat cluster GKE.
- Men-deploy aplikasi web contoh ke cluster.
- Mengekspos aplikasi contoh ke internet di balik Load Balancer Aplikasi eksternal.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Lakukan langkah-langkah berikut untuk mengaktifkan Kubernetes Engine API:- Buka halaman Kubernetes Engine di Konsol Google Cloud.
- Buat atau pilih project.
- Tunggu hingga API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.
-
Make sure that billing is enabled for your Google Cloud project.
Instal alat command line berikut yang digunakan dalam tutorial ini:
-
gcloud
digunakan untuk membuat dan menghapus cluster Kubernetes Engine.gcloud
disertakan dalamgcloud
CLI. -
kubectl
digunakan untuk mengelola Kubernetes, sistem orkestrasi cluster yang digunakan oleh Kubernetes Engine. Anda dapat menginstalkubectl
menggunakangcloud
:gcloud components install kubectl
Clone kode contoh dari GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/networking/load-balancing
Menetapkan default untuk alat command line gcloud
Untuk menghemat waktu saat mengetik opsi project ID dan Zona Compute Engine di alat command line gcloud
, Anda dapat menetapkan setelan default:
gcloud config set project project-id gcloud config set compute/zone compute-zone
Membuat cluster GKE
Buat cluster GKE Autopilot:
gcloud container clusters create-auto loadbalancedcluster
Men-deploy aplikasi web
Manifes berikut menjelaskan Deployment yang menjalankan contoh image container aplikasi web di server HTTP pada port 8080:
Terapkan resource ke cluster:
kubectl apply -f web-deployment.yaml
Mengekspos Deployment dalam cluster Anda
Manifes berikut menjelaskan Layanan yang membuat deployment web
dapat diakses dalam cluster container Anda:
Terapkan resource ke cluster:
kubectl apply -f web-service.yaml
Saat membuat Layanan jenis NodePort dengan perintah ini, GKE menyediakan Layanan Anda pada nomor port tinggi yang dipilih secara acak (misalnya 32640) di semua node di cluster Anda.
Pastikan bahwa Layanan dibuat dan port node dialokasikan:
Output:kubectl get service web
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.35.245.219 <none> 8080:32640/TCP 5m
Pada contoh output, port node untuk Layanan
web
adalah32640
. Perlu diketahui juga bahwa tidak ada IP eksternal yang dialokasikan untuk Layanan ini. Karena node GKE tidak dapat diakses secara eksternal secara default, pembuatan Layanan ini tidak membuat aplikasi Anda dapat diakses dari internet.
Agar aplikasi server web HTTP(S) dapat diakses secara publik, Anda harus membuat resource Ingress.
Membuat resource Ingress
Ingress adalah resource Kubernetes yang merangkum kumpulan aturan dan konfigurasi untuk merutekan traffic HTTP(S) eksternal ke layanan internal.
Di GKE, Ingress diimplementasikan menggunakan Cloud Load Balancing. Saat Anda membuat Ingress di cluster, GKE akan membuat load balancer HTTP(S) dan mengonfigurasinya untuk merutekan traffic ke aplikasi Anda.
Manifes berikut menjelaskan resource Ingress yang mengarahkan traffic ke Layanan web
Anda:
Terapkan resource ke cluster:
kubectl apply -f basic-ingress.yaml
Setelah Anda men-deploy manifes ini, Kubernetes akan membuat resource Ingress di cluster Anda. Pengontrol GKE Ingress membuat dan mengonfigurasi Load Balancer HTTP(S) sesuai dengan informasi di Ingress, mengarahkan semua lalu lintas HTTP eksternal (pada porta 80) ke Layanan NodePort web
yang Anda ekspos.
Mengunjungi aplikasi Anda
Cari tahu alamat IP eksternal load balancer yang menayangkan aplikasi Anda dengan menjalankan:
kubectl get ingress basic-ingress
NAME HOSTS ADDRESS PORTS AGE basic-ingress * 203.0.113.12 80 2m
Buka alamat IP eksternal aplikasi Anda di browser dan lihat respons HTTP teks biasa seperti berikut:
Hello, world! Version: 1.0.0 Hostname: web-6498765b79-fq5q5
Anda dapat membuka Load Balancing di Konsol Google Cloud dan memeriksa resource jaringan yang dibuat oleh pengontrol GKE Ingress.
(Opsional) Mengonfigurasi alamat IP statis
Saat mengekspos server web pada nama domain, Anda memerlukan alamat IP eksternal aplikasi berupa IP statis yang tidak akan berubah.
Secara default, GKE mengalokasikan alamat IP eksternal sementara untuk aplikasi HTTP yang diekspos melalui Ingress. Alamat sementara dapat berubah. Jika berencana menjalankan aplikasi untuk waktu yang lama, Anda harus menggunakan alamat IP eksternal statis.
Perlu diperhatikan bahwa setelah Anda mengonfigurasi IP statis untuk resource Ingress, menghapus Ingress tidak akan menghapus alamat IP statis yang terkait dengannya. Pastikan untuk membersihkan alamat IP statis yang dikonfigurasi saat Anda tidak lagi berencana untuk menggunakannya lagi.
Untuk mengonfigurasi alamat IP statis, selesaikan langkah-langkah berikut:
Cadangkan alamat IP eksternal statis dengan nama
web-static-ip
:gcloud
gcloud compute addresses create web-static-ip --global
Config Connector
Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.
Untuk men-deploy manifes ini, download manifes ke komputer Anda sebagai compute-address.yaml, dan jalankan:kubectl apply -f compute-address.yaml
Manifes
basic-ingress-static.yaml
menambahkan anotasi pada Ingress untuk menggunakan resource IP statis bernamaweb-static-ip
:Lihat manifes:
cat basic-ingress-static.yaml
Terapkan resource ke cluster:
kubectl apply -f basic-ingress-static.yaml
Periksa alamat IP eksternal:
kubectl get ingress basic-ingress
Tunggu hingga alamat IP aplikasi Anda berubah untuk menggunakan alamat IP yang dicadangkan dari resource
web-static-ip
.Mungkin perlu waktu beberapa menit untuk mengupdate resource Ingress yang ada, mengonfigurasi ulang load balancer, dan menerapkan aturan load balancing di seluruh dunia. Setelah operasi ini selesai, GKE akan merilis alamat IP sementara yang sebelumnya dialokasikan untuk aplikasi Anda.
(Opsional) Menyalurkan beberapa aplikasi di load balancer
Anda dapat menjalankan beberapa layanan pada satu load balancer dan IP publik dengan mengonfigurasi aturan perutean di Ingress. Dengan menghosting beberapa layanan di Ingress yang sama, Anda dapat menghindari pembuatan load balancer tambahan (yang merupakan resource yang dapat ditagih) untuk setiap Layanan yang Anda ekspos ke internet.
Manifes berikut menjelaskan Deployment dengan versi 2.0
dari aplikasi web yang sama:
Terapkan resource ke cluster:
kubectl apply -f web-deployment-v2.yaml
Manifes berikut menjelaskan Layanan yang mengekspos web2
secara internal ke cluster pada Layanan NodePort yang disebut web2
:
Terapkan resource ke cluster:
kubectl apply -f web-service-v2.yaml
Manifes berikut menjelaskan resource Ingress yang:
- mengarahkan permintaan dengan jalur yang dimulai dengan
/v2/
ke Layananweb2
- mengarahkan semua permintaan lain ke Layanan
web
Terapkan resource ke cluster:
kubectl create -f fanout-ingress.yaml
Setelah Ingress di-deploy, jalankan kubectl get ingress fanout-ingress
untuk mencari tahu alamat IP publik cluster.
Kemudian, buka alamat IP untuk melihat bahwa kedua aplikasi dapat dijangkau di load balancer yang sama:
- Buka
http://<IP_ADDRESS>/
dan perhatikan bahwa responsnya berisiVersion: 1.0.0
(karena permintaan dirutekan ke Layananweb
) - Buka
http://<IP_ADDRESS>/v2/
dan perhatikan bahwa responsnya berisiVersion: 2.0.0
(karena permintaan dirutekan ke Layananweb2
)
Satu-satunya karakter pengganti yang didukung untuk kolom path
pada Ingress adalah karakter *
. Karakter *
harus mengikuti garis miring (/
) dan harus merupakan karakter terakhir dalam pola. Misalnya, /*
, /foo/*
, dan /foo/bar/*
adalah pola yang valid, tetapi *
, /foo/bar*
, dan /foo/*/bar
itu tidak.
Pola yang lebih spesifik lebih diutamakan daripada pola yang kurang spesifik. Jika Anda memiliki /foo/*
dan /foo/bar/*
, /foo/bar/bat
akan diambil untuk mencocokkan /foo/bar/*
.
Untuk informasi selengkapnya tentang batasan jalur dan pencocokan pola, lihat dokumentasi Maps URL.
(Opsional) Memantau ketersediaan dan latensi layanan Anda
Cek uptime Google Cloud melakukan pemantauan kotak hitam aplikasi dari sudut pandang pengguna, yang menentukan latensi dan ketersediaan dari beberapa IP eksternal ke alamat IP load balancer. Sebagai perbandingan, health check Google Cloud melakukan pemeriksaan internal terhadap IP Pod, yang menentukan ketersediaan di tingkat instance. Pemeriksaan ini bersifat komplementer dan memberikan gambaran menyeluruh tentang kondisi aplikasi.
Anda dapat membuat cek uptime menggunakan Konsol Google Cloud, Cloud Monitoring API, atau dengan menggunakan library klien Cloud Monitoring. Untuk informasi selengkapnya, lihat Mengelola cek uptime. Jika Anda ingin membuat cek uptime menggunakan konsol Google Cloud, lakukan hal berikut:
Buka halaman Services & Ingress di Konsol Google Cloud.
Klik nama Layanan yang ingin Anda buatkan cek uptimenya.
Klik Create Uptime Check.
Di panel Create Uptime Check, masukkan judul untuk cek uptime, lalu klik Next untuk melanjutkan ke setelan Target.
Kolom Target pada cek uptime otomatis diisi menggunakan informasi dari load balancer Layanan.
Untuk dokumentasi lengkap tentang semua kolom dalam cek uptime, lihat Membuat cek uptime.
Klik Next untuk melanjutkan ke setelan Response Validation.
Klik Next untuk melanjutkan ke bagian Alert and Notification.
Untuk memantau cek uptime, Anda dapat membuat kebijakan pemberitahuan atau melihat dasbor cek uptime. Kebijakan pemberitahuan dapat memberi tahu Anda melalui email atau melalui saluran yang berbeda jika cek uptime Anda gagal. Untuk mengetahui informasi umum tentang kebijakan pemberitahuan, lihat Pengantar pemberitahuan.
Klik Create.
Keterangan
Secara default, Ingress melakukan health check berkala dengan membuat permintaan GET
di jalur /
untuk menentukan respons aplikasi, dan mengharapkan respons 200. Jika ingin memeriksa jalur lain atau mengharapkan kode respons yang berbeda, Anda dapat menggunakan jalur health check kustom.
Ingress mendukung kasus penggunaan lanjutan, seperti:
Hosting virtual berbasis nama: Anda dapat menggunakan Ingress untuk menggunakan kembali load balancer untuk beberapa nama domain, subdomain, serta menampilkan beberapa Layanan pada satu alamat IP dan load balancer. Lihat contoh fanout sederhana dan hosting virtual berbasis nama untuk mempelajari cara mengonfigurasi Ingress untuk tugas-tugas ini.
Penghentian HTTPS: Anda dapat mengonfigurasi Ingress untuk menghentikan traffic HTTPS menggunakan Cloud Load Balancer.
Saat Ingress dihapus, pengontrol GKE Ingress akan otomatis membersihkan resource terkait (kecuali alamat IP statis yang dicadangkan.)
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus masing-masing resource.
Hapus semua aturan penerusan yang dibuat secara manual dan proxy target yang merujuk ke Ingress:
Proxy target yang terputus-putus yang mereferensikan peta URL yang dikelola oleh pengontrol GKE Ingress akan menyebabkan kegagalan penghapusan Ingress di GKE versi 1.15.4-gke.22+. Periksa resource Ingress untuk menemukan peristiwa dengan pesan error yang mirip dengan berikut ini:
Error during GC: error running load balancer garbage collection routine: googleapi: Error 400: The url_map resource 'projects/project-id/global/urlMaps/k8s2-um-tlw9rhgp-default-my-ingress-9ifnni82' is already being used by 'projects/project-id/global/targetHttpsProxies/k8s2-um-tlw9rhgp-default-my82-target-proxy', resourceInUseByAnotherResource
Dalam pesan error sebelumnya,
k8s2-um-tlw9rhgp-default-my82-target-proxy
adalah proxy https target yang dibuat secara manual dan masih merujuk ke peta URLk8s2-um-tlw9rhgp-default-my-ingress-9ifnni82
yang dibuat dan dikelola oleh pengontrol Ingress.Resource frontend yang dibuat secara manual ini (aturan penerusan dan proxy target) harus dihapus sebelum melanjutkan penghapusan Ingress.
Menghapus Ingress: Langkah ini akan membatalkan alokasi alamat IP eksternal sementara dan resource load balancing yang terkait dengan aplikasi Anda:
kubectl delete ingress basic-ingress
Jika Anda mengikuti langkah opsional untuk membuat Ingress guna merutekan permintaan berdasarkan jalur, hapus Ingress tersebut:
kubectl delete ingress fanout-ingress
Hapus alamat IP statis: Selesaikan langkah ini hanya jika Anda mengikuti langkah opsional untuk membuat alamat IP statis.
Jika Anda mengikuti "Opsi 1" untuk mengonversi alamat IP sementara yang ada menjadi IP statis, kunjungi Konsol Google Cloud untuk menghapus alamat IP statis.
Jika Anda mengikuti "Opsi 2" untuk membuat alamat IP statis baru, jalankan perintah berikut untuk menghapus alamat IP statis:
gcloud compute addresses delete web-static-ip --global
Hapus cluster: Langkah ini akan menghapus node komputasi cluster container Anda dan resource lain seperti Deployment di cluster tersebut:
gcloud container clusters delete loadbalancedcluster
Langkah selanjutnya
- Lihat Panduan pengguna Ingress untuk mengetahui detail tentang fitur Ingress.
- Konfigurasikan IP statis dan nama domain untuk aplikasi Ingress Anda menggunakan Ingress.
- Konfigurasikan sertifikat SSL untuk load balancer Ingress.
- Pelajari cara menggunakan sertifikat SSL yang dikelola Google dengan Ingress.
Jika Anda menjalankan aplikasi di beberapa cluster Kubernetes Engine di region yang berbeda, siapkan multi-cluster Ingress untuk mengarahkan traffic ke cluster di region yang paling dekat dengan pengguna.
Pelajari tutorial Kubernetes Engine lainnya.
Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.