Halaman ini memberikan ringkasan umum tentang Ingress untuk Load Balancer Aplikasi eksternal dan cara kerjanya. Google Kubernetes Engine (GKE) menyediakan pengontrol Ingress bawaan dan terkelola yang disebut GKE Ingress. Saat Anda membuat resource Ingress di GKE, pengontrol akan otomatis mengonfigurasi load balancer HTTP(S) yang memungkinkan traffic HTTP atau HTTP(S) menjangkau Layanan Anda.
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.
Ringkasan
Di GKE, objek Ingress menentukan aturan untuk pemilihan rute traffic HTTP(S) ke aplikasi yang berjalan di cluster. Objek Ingress dikaitkan dengan satu atau beberapa Objek layanan, yang masing-masing terkait dengan kumpulan Pod. Untuk mempelajari lebih lanjut cara Ingress mengekspos aplikasi menggunakan Layanan, lihat Ringkasan jejaring layanan.
Saat Anda membuat objek Ingress, pengontrol GKE Ingress akan membuat Load Balancer HTTP(S) Google Cloud dan mengonfigurasinya sesuai dengan informasi di Ingress dan Layanan terkait.
Untuk menggunakan Ingress, Anda harus mengaktifkan add-on load balancing HTTP. Cluster GKE memiliki load balancing HTTP yang diaktifkan secara default; Anda tidak boleh menonaktifkannya.
Ingress untuk traffic eksternal dan internal
Resource GKE Ingress terdiri dari dua jenis:
Ingress untuk Load Balancer Aplikasi eksternal men-deploy Load Balancer Aplikasi klasik. Load balancer yang terhubung ke internet ini di-deploy secara global di seluruh jaringan edge Google sebagai kumpulan resource load balancing yang terkelola dan skalabel. Pelajari cara menyiapkan dan menggunakan Ingress untuk Load Balancer Aplikasi eksternal.
Ingress untuk Load Balancer Aplikasi internal men-deploy Load Balancer Aplikasi internal. Load Balancer Aplikasi internal ini didukung oleh sistem proxy Envoy di luar cluster GKE, tetapi di dalam jaringan VPC Anda. Pelajari cara menyiapkan dan menggunakan Ingress untuk Load Balancer Aplikasi internal.
Perilaku pengontrol GKE Ingress
Untuk cluster yang menjalankan GKE versi 1.18 dan yang lebih baru, baik pengontrol GKE Ingress memproses Ingress atau tidak, Ingress bergantung pada nilai anotasi kubernetes.io/ingress.class
:
Nilai kubernetes. |
Nilai ingressClassName |
Perilaku pengontrol GKE Ingress |
---|---|---|
Belum disetel | Belum disetel | Proses manifes Ingress dan buat Load Balancer Aplikasi eksternal. |
Belum disetel | Semua nilai | Tidak memerlukan tindakan apa pun. Manifes Ingress dapat diproses oleh pengontrol Ingress pihak ketiga jika ada yang sudah di-deploy. |
gce |
Semua nilai. Kolom ini diabaikan. | Proses manifes Ingress dan buat Load Balancer Aplikasi eksternal. |
gce-internal |
Semua nilai. Kolom ini diabaikan. | Proses manifes Ingress dan buat Load Balancer Aplikasi internal. |
Tetapkan ke nilai selain gce atau gce-internal |
Semua nilai | Tidak memerlukan tindakan apa pun. Manifes Ingress dapat diproses oleh pengontrol Ingress pihak ketiga jika ada yang sudah di-deploy. |
Untuk cluster yang menjalankan versi GKE lama, pengontrol GKE memproses Ingress apa pun yang tidak memiliki anotasi kubernetes.io/ingress.class
, atau yang memiliki anotasi dengan nilai gce
atau gce-internal
.
Penghentian anotasi kubernetes.io/ingress.class
Meskipun anotasi kubernetes.io/ingress.class
tidak digunakan lagi di Kubernetes, GKE terus menggunakan anotasi ini.
Anda tidak dapat menggunakan kolom ingressClassName
untuk menentukan GKE Ingress. Anda harus menggunakan anotasi kubernetes.io/ingress.class
.
Fitur Load Balancer Aplikasi eksternal
Load Balancer Aplikasi eksternal, yang dikonfigurasi oleh Ingress, menyertakan fitur berikut:
- Konfigurasi fleksibel untuk Layanan. Ingress menentukan bagaimana traffic mencapai Layanan dan bagaimana traffic dirutekan ke aplikasi Anda. Selain itu, Ingress dapat menyediakan satu alamat IP untuk beberapa Layanan di cluster Anda.
- Integrasi dengan layanan jaringan Google Cloud
- Dukungan untuk beberapa sertifikat TLS. Ingress dapat menentukan penggunaan beberapa sertifikat TLS untuk penghentian permintaan.
Untuk daftar lengkap, lihat Konfigurasi Ingress.
Metode load balancing
GKE mendukung load balancing dan grup instance native Container.
Load balancing asal container
Load balancing berbasis container adalah praktik load balancing secara langsung ke endpoint Pod di GKE. Load balancing berbasis container adalah jenis Grup Endpoint Jaringan (NEG).
Dengan NEG, traffic akan di-load balancing dari load balancer langsung ke IP Pod, bukan melintasi IP VM dan jejaring kube-proxy. Selain itu, gate kesiapan Pod diterapkan untuk menentukan kondisi Pod dari perspektif load balancer, bukan hanya pemeriksaan kondisi dalam cluster Kubernetes. Tindakan ini meningkatkan stabilitas traffic secara keseluruhan dengan membuat infrastruktur load balancer mengetahui peristiwa siklus proses seperti startup Pod, kehilangan Pod, atau kehilangan VM. Kemampuan ini mengatasi batasan sebelumnya dan menghasilkan jejaring yang lebih berperforma tinggi dan stabil.
Load balancing berbasis container diaktifkan secara default untuk Layanan saat semua kondisi berikut terpenuhi:
- Untuk Layanan yang dibuat di cluster GKE 1.17.6-gke.7 dan yang lebih baru
- Menggunakan cluster VPC native
- Tidak menggunakan jaringan VPC Bersama
- Tidak menggunakan Kebijakan Jaringan GKE
Dalam kondisi tersebut, Layanan akan dianotasi secara otomatis dengan cloud.google.com/neg: '{"ingress": true}'
yang menunjukkan bahwa NEG harus dibuat untuk mencerminkan IP Pod dalam Layanan. Dengan NEG, load balancer Compute Engine dapat berkomunikasi langsung dengan Pod. Perlu diperhatikan bahwa Layanan yang dibuat sebelum GKE 1.17.6-gke.7 tidak akan otomatis dianotasi oleh pengontrol Layanan.
Untuk GKE 1.17.6-gke.7 dan yang lebih lama, dengan anotasi NEG otomatis, Anda dapat menonaktifkan NEG dan memaksa load balancer eksternal Compute Engine untuk menggunakan grup instance sebagai backend jika diperlukan. Hal ini dapat dilakukan dengan menganotasi Layanan secara eksplisit dengan cloud.google.com/neg: '{"ingress": false}'
. NEG tidak dapat dinonaktifkan dengan Ingress untuk Load Balancer Aplikasi internal.
Untuk cluster di mana NEG bukan default, sangat direkomendasikan untuk menggunakan load balancing berbasis container, tetapi harus diaktifkan secara eksplisit per Layanan. Anotasi harus diterapkan ke Layanan dengan cara berikut:
kind: Service
...
annotations:
cloud.google.com/neg: '{"ingress": true}'
...
Grup instance
Saat menggunakan grup instance, load balancer Compute Engine mengirimkan traffic ke alamat IP VM sebagai backend. Saat menjalankan container pada VM, dengan container yang memiliki antarmuka host yang sama, tindakan ini menimbulkan batasan berikut:
- Proses ini menimbulkan dua hop load balancing - satu hop dari load balancer ke VM
NodePort
dan hop lainnya melalui pemilihan rute kube-proxy ke alamat IP Pod (yang mungkin berada di VM yang berbeda). - Hop tambahan menambah latensi dan membuat jalur traffic lebih kompleks.
- Load balancer Compute Engine tidak memiliki visibilitas langsung ke Pod sehingga menghasilkan balancing traffic yang kurang optimal.
- Peristiwa lingkungan seperti kehilangan VM atau Pod lebih cenderung menyebabkan hilangnya traffic yang terputus-putus karena hop traffic ganda.
Cluster berbasis rute dan Ingress Eksternal
Jika Anda menggunakan cluster berbasis rute dengan Ingress eksternal, pengontrol GKE Ingress tidak dapat menggunakan load balancing berbasis container menggunakan grup endpoint jaringan (NEG) GCE_VM_IP_PORT
. Sebagai gantinya, pengontrol Ingress menggunakan backend grup instance tidak terkelola yang mencakup semua node di semua node pool. Jika grup instance tidak terkelola ini juga digunakan oleh Layanan LoadBalancer
, hal itu dapat menyebabkan masalah terkait Batasan grup load balanced instance tunggal.
Beberapa objek Ingress eksternal lama yang dibuat di cluster VPC native mungkin menggunakan backend grup instance pada layanan backend setiap Load Balancer Aplikasi eksternal yang dibuat. Hal ini tidak relevan dengan Ingress internal karena resource Ingress internal selalu menggunakan NEG GCE_VM_IP_PORT
dan memerlukan cluster VPC native.
Untuk mempelajari cara memecahkan masalah error 502 terkait Ingress eksternal, lihat Ingress Eksternal menghasilkan error HTTP 502.
VPC Bersama
Resource Ingress dan MultiClusterIngress didukung di VPC Bersama, tetapi memerlukan persiapan tambahan.
Pengontrol Ingress berjalan di bidang kontrol GKE dan melakukan panggilan API ke Google Cloud menggunakan akun layanan GKE dari project cluster. Secara default, saat sebuah cluster yang terletak dalam project layanan VPC Bersama menggunakan jaringan VPC Bersama, pengontrol Ingress tidak dapat menggunakan akun layanan GKE project layanan untuk membuat dan memperbarui aturan firewall dalam project host.
Anda dapat memberikan izin akun layanan GKE pada project layanan untuk membuat dan mengelola aturan firewall VPC di project host. Dengan memberikan izin ini, GKE membuat aturan firewall izinkan traffic masuk untuk yang berikut ini:
Proxy Google Front End (GFE) dan sistem health check yang digunakan oleh Load Balancer Aplikasi eksternal untuk Ingress eksternal. Untuk informasi selengkapnya, lihat Ringkasan Load Balancer Aplikasi Eksternal.
Health check sistem untuk Load Balancer Aplikasi internal yang digunakan oleh Ingress internal.
Menyediakan aturan firewall secara manual dari project host
Jika kebijakan keamanan Anda hanya mengizinkan pengelolaan firewall dari project host, Anda dapat menyediakan aturan firewall ini secara manual. Saat men-deploy Ingress di VPC Bersama, peristiwa resource Ingress menyediakan aturan firewall tertentu yang perlu Anda tambahkan untuk memberikan akses.
Untuk menyediakan aturan secara manual:
Lihat peristiwa resource Ingress:
kubectl describe ingress INGRESS_NAME
Ganti INGRESS_NAME dengan nama Ingress Anda.
Anda akan melihat output yang mirip dengan contoh berikut ini:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Sync 9m34s (x237 over 38h) loadbalancer-controller Firewall change required by security admin: `gcloud compute firewall-rules update k8s-fw-l7--6048d433d4280f11 --description "GCE L7 firewall rule" --allow tcp:30000-32767,tcp:8080 --source-ranges 130.211.0.0/22,35.191.0.0/16 --target-tags gke-l7-ilb-test-b3a7e0e5-node --project <project>`
Aturan firewall wajib yang disarankan akan muncul di kolom
Message
.Salin dan terapkan aturan firewall yang disarankan dari project host. Dengan menerapkan aturan, Anda akan memiliki akses ke Pod dari load balancer dan health checker Google Cloud.
Memberikan izin pengontrol GKE Ingress untuk mengelola aturan firewall project host
Jika Anda ingin cluster GKE dalam project layanan membuat dan mengelola resource firewall di project host Anda, akun layanan GKE project layanan harus diberi izin IAM yang sesuai menggunakan salah satu strategi berikut:
Beri akun layanan GKE project layanan peran Compute Security Admin ke project host. Contoh berikut menunjukkan strategi ini.
Untuk pendekatan yang lebih mendetail, buat peran IAM kustom yang hanya mencakup izin berikut:
compute.networks.updatePolicy
,compute.firewalls.list
,compute.firewalls.get
,compute.firewalls.create
,compute.firewalls.update
,compute.firewalls.delete
, dancompute.subnetworks.list
. Beri akun layanan GKE project layanan peran khusus ke project host.
Jika memiliki cluster di lebih dari satu project layanan, Anda harus memilih salah satu strategi dan mengulanginya untuk setiap akun layanan GKE project layanan.
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=serviceAccount:service-SERVICE_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
--role=roles/compute.securityAdmin
Ganti yang berikut ini:
HOST_PROJECT_ID
adalah project ID dari project host VPC Bersama.SERVICE_PROJECT_NUMBER
: nomor project dari project layanan yang berisi cluster Anda.
Beberapa layanan backend
Setiap Load Balancer Aplikasi eksternal atau Load Balancer Aplikasi internal menggunakan satu peta URL, yang mereferensikan satu atau beberapa layanan backend. Satu layanan backend terkait ke setiap Layanan yang dirujuk oleh Ingress.
Misalnya, Anda dapat mengonfigurasi load balancer untuk merutekan permintaan ke layanan backend yang berbeda, bergantung pada jalur URL. Permintaan yang dikirimkan ke your-store.example dapat dirutekan ke layanan backend yang menampilkan item dengan harga penuh, dan permintaan yang dikirimkan ke your-store.example/discounted dapat dirutekan ke layanan backend yang menampilkan item diskon.
Anda juga dapat mengonfigurasi load balancer untuk merutekan permintaan sesuai dengan nama host. Permintaan yang dikirim ke your-store.example dapat mengarah ke satu layanan backend, dan permintaan yang dikirim ke your-experimental-store.example dapat dikirim ke layanan backend lain.
Dalam cluster GKE, Anda dapat membuat dan mengonfigurasi load balancer HTTP(S) dengan membuat objek Ingress Kubernetes. Objek Ingress harus dikaitkan dengan satu atau beberapa objek Layanan, yang masing-masing terkait dengan sekumpulan Pod.
Jika ingin mengonfigurasi GKE Ingress dengan beberapa backend untuk host yang sama, Anda harus memiliki satu aturan dengan satu host dan beberapa jalur. Jika tidak, pengontrol ingress GKE hanya menyediakan satu layanan backend
Berikut adalah manifes untuk Ingress yang disebut my-ingress
:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: your-store.example http: paths: - path: /products backend: service: name: my-products port: number: 60000 - path: /discounted-products backend: service: name: my-discounted-products port: number: 80
Saat Anda membuat Ingress, pengontrol GKE Ingress akan membuat dan mengonfigurasi Load Balancer Aplikasi eksternal atau Load Balancer Aplikasi internal sesuai dengan informasi di Ingress dan Layanan terkait. Selain itu, load balancer diberi alamat IP stabil yang dapat Anda kaitkan dengan nama domain.
Pada contoh sebelumnya, anggap Anda telah mengaitkan alamat IP load balancer dengan nama domain your-store.example. Saat klien mengirimkan permintaan ke your-store.example, permintaan tersebut dirutekan ke Layanan Kubernetes bernama my-products
pada port 60000. Kemudian, saat klien mengirimkan permintaan ke your-store.example/discount, permintaan tersebut akan dirutekan ke Layanan Kubernetes bernama my-discounted-products
pada port 80.
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.
Manifes untuk Layanan my-products
mungkin terlihat seperti ini:
apiVersion: v1 kind: Service metadata: name: my-products spec: type: NodePort selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50000
Dalam manifes Layanan, Anda harus menggunakan type: NodePort
kecuali jika menggunakan load balancing berbasis container.
Jika menggunakan load balancing berbasis container, gunakan type: ClusterIP
.
Dalam manifes Layanan, kolom selector
menyatakan setiap Pod yang memiliki label app: products
dan label department: sales
adalah anggota Layanan ini.
Saat permintaan masuk ke Layanan di port 60000, permintaan tersebut akan dirutekan ke salah satu Pod anggota pada port TCP 50000.
Setiap Pod anggota harus memiliki container yang memproses port TCP 50000.
Manifes untuk Layanan my-discounted-products
mungkin terlihat seperti ini:
apiVersion: v1 kind: Service metadata: name: my-discounted-products spec: type: NodePort selector: app: discounted-products department: sales ports: - protocol: TCP port: 80 targetPort: 8080
Dalam manifes Layanan, kolom selector
menyatakan setiap Pod yang memiliki label app: discounted-products
dan label department: sales
adalah anggota Layanan ini.
Saat masuk ke Layanan di port 80, permintaan akan dirutekan ke salah satu Pod anggota di port TCP 8080.
Setiap Pod anggota harus memiliki container yang memproses port TCP 8080.
Backend default
Anda dapat menentukan backend default untuk Ingress dengan menyediakan kolom spec.defaultBackend
dalam manifes Ingress. Tindakan ini akan menangani permintaan apa pun yang tidak cocok dengan jalur yang ditentukan di kolom rules
. Misalnya, dalam Ingress berikut, permintaan apa pun yang tidak cocok dengan /discounted
akan dikirim ke layanan bernama my-products
pada port 60001.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
defaultBackend:
service:
name: my-products
port:
number: 60001
rules:
- http:
paths:
- path: /discounted
pathType: ImplementationSpecific
backend:
service:
name: my-discounted-products
port:
number: 80
Jika Anda tidak menentukan backend default, GKE akan menyediakan backend default yang menampilkan 404. Objek ini dibuat sebagai layanan NodePort default-http-backend
pada cluster dalam namespace kube-system
.
Respons HTTP 404 mirip dengan yang berikut ini:
response 404 (backend NotFound), service rules for the path non-existent
Untuk menyiapkan GKE Ingress dengan backend default pelanggan, lihat GKE Ingress dengan backend default kustom.
Ingress ke pemetaan resource Compute Engine
Pengontrol GKE Ingress men-deploy dan mengelola resource load balancer Compute Engine berdasarkan resource Ingress yang di-deploy dalam cluster. Pemetaan resource Compute Engine bergantung pada struktur resource Ingress.
Manifes berikut menjelaskan Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: my-products
port:
number: 60000
- path: /discounted
pathType: ImplementationSpecific
backend:
service:
name: my-discounted-products
port:
number: 80
Manifes Ingress ini meminta GKE untuk membuat resource Compute Engine berikut:
- Aturan penerusan dan alamat IP.
- Aturan firewall Compute Engine yang mengizinkan traffic untuk health check load balancer dan traffic aplikasi dari Google Front Ends atau proxy Envoy.
- Proxy HTTP target dan proxy HTTPS target, jika Anda mengonfigurasi TLS.
- Peta URL yang dengan aturan host tunggal yang mereferensikan satu pencocok jalur.
Pencocok jalur memiliki dua aturan jalur, satu untuk
/*
dan satu lagi untuk/discounted
. Setiap aturan jalur dipetakan ke layanan backend unik. - NEG yang menyimpan daftar alamat IP Pod dari setiap Layanan sebagai endpoint.
Ini dibuat sebagai hasil dari Layanan
my-discounted-products
danmy-products
.
Opsi untuk menyediakan sertifikat SSL
Anda dapat memberikan sertifikat SSL ke load balancer HTTP(S) menggunakan metode berikut:
- Sertifikat yang dikelola Google
- Sertifikat SSL yang dikelola Google disediakan, di-deploy, diperpanjang, dan dikelola untuk domain Anda. Sertifikat yang dikelola tidak mendukung domain karakter pengganti.
- Sertifikat yang dikelola sendiri yang digunakan bersama dengan Google Cloud
- Anda dapat menyediakan sertifikat SSL Anda sendiri dan membuat resource sertifikat di project Google Cloud. Anda kemudian dapat mencantumkan resource sertifikat dalam anotasi di Ingress untuk membuat load balancer HTTP(S) yang menggunakan sertifikat tersebut. Lihat petunjuk untuk sertifikat yang dibagikan sebelumnya untuk informasi selengkapnya.
- Sertifikat yang dikelola sendiri sebagai resource Secret
- Anda dapat menyediakan sertifikat SSL Anda sendiri dan membuat Secret untuk menyimpannya. Anda kemudian dapat merujuk ke Secret ini dalam spesifikasi Ingress untuk membuat load balancer HTTP(S) yang menggunakan sertifikat tersebut. Lihat petunjuk untuk menggunakan sertifikat di Secret untuk informasi selengkapnya.
Health check
Saat Anda mengekspos satu atau beberapa Layanan melalui Ingress menggunakan pengontrol Ingress default, GKE akan membuat Load Balancer Aplikasi klasik atau Load Balancer Aplikasi internal. Kedua load balancer ini mendukung beberapa layanan backend di satu peta URL. Setiap layanan backend terkait dengan Layanan Kubernetes, dan setiap layanan backend harus merujuk ke health check Google Cloud. Health check ini berbeda dengan pemeriksaan keaktifan atau kesiapan Kubernetes karena health check diterapkan di luar cluster.
Health check load balancer ditentukan per layanan backend. Meskipun Anda dapat menggunakan health check yang sama untuk semua layanan backend load balancer, referensi health check tidak ditentukan untuk seluruh load balancer (di objek Ingress itu sendiri).
GKE membuat health check berdasarkan salah satu metode berikut:
- CRD
BackendConfig
: Definisi resource kustom (CRD) yang memberi Anda kontrol yang tepat atas cara Layanan berinteraksi dengan load balancer. CRDBackendConfig
memungkinkan Anda menentukan setelan kustom untuk health check yang terkait dengan layanan backend yang sesuai. Setelan kustom ini memberikan fleksibilitas dan kontrol yang lebih besar atas health check untuk Load Balancer Aplikasi klasik dan Load Balancer Aplikasi internal yang dibuat oleh Ingress. - Pemeriksaan kesiapan: Pemeriksaan diagnostik yang menentukan apakah penampung dalam Pod siap menyalurkan traffic. Pengontrol GKE Ingress membuat health check untuk layanan backend Layanan berdasarkan pemeriksaan kesiapan yang digunakan oleh Pod penayangan Layanan tersebut. Anda dapat memperoleh parameter health check seperti jalur, port, dan protokol dari definisi pemeriksaan kesiapan.
- Nilai default: Parameter yang digunakan saat Anda tidak mengonfigurasi
CRD
BackendConfig
atau menentukan atribut untuk pemeriksaan kesiapan.
Gunakan CRD BackendConfig
untuk memiliki kontrol paling besar atas setelan health check load balancer.
GKE menggunakan prosedur berikut untuk membuat health check bagi setiap layanan backend yang terkait dengan Layanan Kubernetes:
Jika Layanan mereferensikan CRD
BackendConfig
dengan informasihealthCheck
, GKE akan menggunakannya untuk membuat health check. Pengontrol GKE Enterprise Ingress dan pengontrol GKE Ingress mendukung pembuatan health check dengan cara ini.Jika Layanan tidak merujuk CRD
BackendConfig
:GKE dapat menyimpulkan beberapa atau semua parameter untuk health check apakah Pod Penayangan menggunakan template Pod dengan container yang pemeriksaan kesiapannya memiliki atribut yang dapat ditafsirkan sebagai parameter health check. Lihat Parameter dari pemeriksaan kesiapan untuk detail implementasi serta Parameter default dan yang ditentukan untuk daftar atribut yang dapat digunakan untuk membuat parameter health check. Hanya pengontrol GKE Ingress yang mendukung inferensi parameter dari pemeriksaan kesiapan.
Jika template Pod untuk Pod penayangan Layanan tidak memiliki container dengan pemeriksaan kesiapan yang atributnya dapat ditafsirkan sebagai parameter health check, nilai default akan digunakan untuk membuat health check. Pengontrol Ingress GKE Enterprise dan pengontrol GKE Ingress hanya dapat membuat health check menggunakan nilai default.
Parameter default dan yang disimpulkan
Parameter berikut digunakan saat Anda tidak menentukan parameter health check untuk Layanan terkait menggunakan CRD BackendConfig
.
Parameter health check | Nilai default | Nilai yang dapat disimpulkan |
---|---|---|
Protokol | HTTP | jika ada dalam cloud.google.com/app-protocols anotasi Layanan
|
Jalur permintaan | / |
jika ada dalam spec Pod penayangan:containers[].readinessProbe.httpGet.path
|
Minta header Host | Host: backend-ip-address |
jika ada dalam spec Pod penayangan:containers[].readinessProbe.httpGet.httpHeaders
|
Respons yang seharusnya | HTTP 200 (OK) | HTTP 200 (OK) tidak dapat diubah |
Interval pemeriksaan |
|
jika ada dalam spec Pod penayangan:
|
Waktu tunggu pemeriksaan | 5 detik | jika ada dalam spec Pod penayangan:containers[].readinessProbe.timeoutSeconds |
Batas responsif | 1 | 1 tidak dapat diubah |
Batas tidak responsif |
|
sama seperti default:
|
Spesifikasi port |
|
Pemeriksaan health check dikirim ke nomor port yang ditentukan oleh spec.containers[].readinessProbe.httpGet.port , selama semua yang berikut ini juga berlaku:
|
Alamat IP tujuan |
|
sama seperti default:
|
Parameter dari pemeriksaan kesiapan
Saat GKE membuat health check untuk layanan backend Layanan, GKE dapat menyalin parameter tertentu dari pemeriksaan kesiapan satu container yang digunakan oleh Pod penayangan Layanan tersebut. Opsi ini hanya didukung oleh pengontrol GKE Ingress.
Atribut pemeriksaan kesiapan yang didukung yang dapat ditafsirkan sebagai parameter health check dicantumkan bersama dengan nilai default dalam Parameter default dan yang disimpulkan. Nilai default digunakan untuk atribut apa pun yang tidak ditentukan dalam pemeriksaan kesiapan atau jika Anda tidak menentukan pemeriksaan kesiapan sama sekali.
Jika penayangan Pod untuk Layanan Anda berisi beberapa container, atau jika Anda menggunakan pengontrol GKE Enterprise Ingress, Anda harus menggunakan CRD BackendConfig
untuk menentukan parameter health check. Untuk informasi selengkapnya, lihat Kapan harus menggunakan CRD BackendConfig
.
Kapan harus menggunakan CRD BackendConfig
Alih-alih mengandalkan parameter dari pemeriksaan kesiapan Pod, Anda harus secara eksplisit menentukan parameter health check untuk layanan backend dengan membuat CRD BackendConfig
untuk Layanan dalam situasi berikut:
- Jika Anda menggunakan GKE Enterprise: Pengontrol GKE Enterprise Ingress tidak mendukung perolehan parameter health check dari pemeriksaan kesiapan Pod penayangan. Alat ini hanya dapat membuat health check menggunakan parameter implisit atau seperti yang ditentukan dalam CRD
BackendConfig
.
Jika Anda memiliki lebih dari satu container di Pod penayangan: GKE tidak memiliki cara untuk memilih pemeriksaan kesiapan container tertentu untuk digunakan menyimpulkan parameter health check. Karena setiap container dapat memiliki pemeriksaan kesiapannya sendiri, dan karena pemeriksaan kesiapan bukan parameter yang diperlukan untuk sebuah container, Anda harus menentukan health check untuk layanan backend terkait dengan mereferensikan CRD
BackendConfig
di Layanan yang sesuai.Jika Anda memerlukan kontrol atas port yang digunakan untuk health check load balancer: GKE hanya menggunakan
containers[].readinessProbe.httpGet.port
pemeriksaan kesiapan untuk health check layanan backend jika port tersebut cocok dengan port layanan untuk Layanan yang direferensikan dalamspec.rules[].http.paths[].backend.servicePort
Ingress.
Parameter dari CRD BackendConfig
Anda dapat menentukan parameter health check layanan backend menggunakan parameter healthCheck
dari CRD BackendConfig
yang direferensikan oleh Layanan terkait. Hal ini memberi Anda lebih banyak fleksibilitas dan kontrol atas health check untuk Load Balancer Aplikasi klasik atau Load Balancer Aplikasi internal yang dibuat oleh Ingress. Lihat Konfigurasi Ingress untuk kompatibilitas versi GKE.
Contoh CRD BackendConfig
ini menentukan protokol (jenis) health check, jalur permintaan, port, dan interval pemeriksaan dalam atribut spec.healthCheck
-nya:
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: http-hc-config spec: healthCheck: checkIntervalSec: 15 port: 15020 type: HTTPS requestPath: /healthz
Untuk mengonfigurasi semua kolom yang tersedia saat mengonfigurasi health check BackendConfig
, gunakan contoh konfigurasi health check kustom.
Untuk menyiapkan GKE Ingress dengan health check HTTP kustom, lihat GKE Ingress dengan health check HTTP kustom.
Menggunakan beberapa sertifikat TLS
Misalnya Anda menginginkan load balancer HTTP(S) untuk menayangkan konten dari dua nama host: your-store.example dan your-experimental-store.example. Selain itu, Anda ingin agar load balancer menggunakan satu sertifikat untuk your-store.example dan sertifikat yang berbeda untuk your-experimental-store.example.
Anda dapat melakukannya dengan menentukan beberapa sertifikat dalam manifes Ingress. Load balancer akan memilih sertifikat jika Nama Umum (CN) dalam sertifikat cocok dengan nama host yang digunakan dalam permintaan. Untuk informasi mendetail tentang cara mengonfigurasi beberapa sertifikat, lihat Menggunakan beberapa sertifikat SSL di Load Balancing HTTPS dengan Ingress.
Layanan Kubernetes dibandingkan dengan layanan backend Google Cloud
Layanan Kubernetes dan layanan backend Google Cloud itu tidaklah sama. Ada hubungan yang kuat di antara keduanya, tetapi hubungan tersebut tidak selalu one-to-one. Pengontrol GKE Ingress membuat layanan backend Google Cloud untuk setiap pasangan (service.name
, service.port
) dalam manifes Ingress. Jadi, ada kemungkinan satu objek Layanan Kubernetes terkait dengan beberapa layanan backend Google Cloud.
Batasan
Dalam cluster yang menggunakan versi lebih lama dari 1.16, panjang total namespace dan nama Ingress tidak boleh lebih dari 40 karakter. Ketidakpatuhan terhadap pedoman ini dapat menyebabkan pengontrol GKE Ingress berperilaku tidak normal. Untuk mengetahui informasi selengkapnya, lihat masalah GitHub tentang nama panjang.
Pada cluster yang menggunakan NEG, waktu rekonsiliasi masuk dapat dipengaruhi oleh jumlah traffic masuk. Misalnya, cluster dengan 20 traffic masuk, masing-masing berisi 20 backend NEG yang berbeda, dapat menyebabkan latensi lebih dari 30 menit agar perubahan traffic masuk dapat direkonsiliasi. Hal ini terutama berdampak pada klaster regional karena meningkatnya jumlah NEG yang diperlukan.
Kuota untuk peta URL berlaku.
Kuota untuk resource Compute Engine berlaku.
Jika Anda tidak menggunakan NEG dengan pengontrol traffic masuk GKE, cluster GKE memiliki batas 1.000 node. Jika layanan di-deploy dengan NEG, tidak ada batas node GKE. Layanan non-NEG yang diekspos melalui Ingress tidak berfungsi dengan benar pada cluster di atas 1.000 node.
Agar pengontrol GKE Ingress dapat menggunakan
readinessProbes
Anda sebagai health check, Pod untuk Ingress harus ada pada saat pembuatan Ingress. Jika replika diskalakan ke 0, health check default akan berlaku. Untuk mengetahui informasi selengkapnya, lihat komentar masalah GitHub tentang health check.Perubahan pada
readinessProbe
Pod tidak memengaruhi Ingress setelah dibuat.Load Balancer Aplikasi eksternal menghentikan TLS di lokasi yang didistribusikan secara global, untuk meminimalkan latensi antara klien dan load balancer. Jika memerlukan kontrol geografis atas tempat TLS dihentikan, Anda harus menggunakan pengontrol ingress kustom yang diekspos melalui Layanan GKE jenis
LoadBalancer
sebagai gantinya, dan menghentikan TLS di backend yang berada di region yang sesuai dengan kebutuhan Anda.Menggabungkan beberapa resource Ingress ke dalam satu load balancer Google Cloud tidak didukung.
Anda harus menonaktifkan TLS bersama di aplikasi Anda karena tidak didukung untuk Load Balancer Aplikasi eksternal.
Detail implementasi
- Pengontrol Ingress melakukan pemeriksaan izin akun layanan secara berkala dengan mengambil resource pengujian dari project Google Cloud Anda. Anda akan melihat ini sebagai
GET
dariBackendService
global (yang tidak ada) dengan namak8s-ingress-svc-acct-permission-check-probe
. Karena resource ini biasanya tidak ada, permintaanGET
akan menampilkan "not found". Hal ini wajar; pengontrol memeriksa bahwa panggilan API tidak ditolak karena masalah otorisasi. Jika Anda membuat BackendService dengan nama yang sama, makaGET
akan berhasil, alih-alih menampilkan "not found".
Template untuk konfigurasi Ingress
- Di GKE Networking Recipes, Anda dapat menemukan template yang disediakan oleh GKE pada berbagai penggunaan Ingress umum di bagian Ingress.
Langkah berikutnya
- Pelajari GKE Networking Recipes
- Pelajari lebih lanjut load balancing di Google Cloud.
- Baca ringkasan jejaring di GKE.
- Pelajari cara mengonfigurasi Ingress untuk Load Balancer Aplikasi internal.
- Pelajari cara mengonfigurasi Ingress untuk Load Balancer Aplikasi eksternal.