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 membangun arsitektur jaringan untuk organisasi mereka serta menginstal, mengonfigurasi, dan mendukung peralatan jaringan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE 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 balancer 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.
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
Google Cloud Pemeriksaan uptime 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 Google Cloud konsol, Cloud Monitoring API, atau dengan menggunakan library klien Cloud Monitoring. Untuk mengetahui 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 guna 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.)