Halaman ini menjelaskan implementasi Google Kubernetes Engine (GKE) dari Kubernetes Gateway API menggunakan pengontrol Gateway GKE.
Halaman ini ditujukan untuk arsitek Cloud dan spesialis Jaringan yang mendesain dan merancang jaringan untuk organisasi mereka. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise umum.
Gateway API adalah standar open source untuk jaringan layanan. Gateway API mengembangkan resource Ingress dan meningkatkannya dengan cara berikut:
Berorientasi pada peran: Gateway terdiri dari resource API yang berkaitan dengan peran organisasi operator cluster, developer, dan penyedia infrastruktur. Dengan begitu, operator cluster dapat menentukan bagaimana infrastruktur bersama dapat digunakan oleh banyak tim developer yang berbeda dan tidak saling berkoordinasi.
Portabel: Gateway API adalah standar open source dengan banyak implementasi. API ini dirancang menggunakan konsep kesesuaian yang fleksibel, yang mempromosikan API inti yang sangat portabel (seperti Ingress) yang masih memiliki fleksibilitas dan ekstensibilitas untuk mendukung kemampuan native lingkungan dan implementasi. Hal ini memungkinkan konsep dan resource inti tetap konsisten di seluruh implementasi dan lingkungan, sehingga mengurangi kompleksitas dan meningkatkan familiaritas pengguna.
Ekspresif: Resource Gateway API menyediakan kemampuan bawaan untuk pencocokan berbasis header, pembobotan traffic, dan kemampuan lainnya yang hanya dapat dilakukan di Ingress melalui anotasi kustom.
Resource Gateway API
Gateway API adalah model resource berorientasi peran yang dirancang untuk persona yang berinteraksi dengan jaringan Kubernetes. Seperti yang ditunjukkan pada diagram berikut, model ini memungkinkan berbagai pemilik layanan yang tidak berkoordinasi untuk berbagi infrastruktur jaringan pokok yang sama secara aman, dengan cara yang memusatkan kebijakan dan kontrol bagi administrator platform.
Gateway API berisi jenis resource berikut:
- GatewayClass: Menentukan resource cakupan cluster yang merupakan template untuk membuat load balancer di cluster. GKE menyediakan GatewayClasses yang dapat digunakan di cluster GKE.
- Gateway: Menentukan tempat dan cara load balancer memproses traffic. Operator cluster membuat Gateway dalam cluster mereka berdasarkan GatewayClass. GKE membuat load balancer yang mengimplementasikan konfigurasi yang ditetapkan di resource Gateway.
- HTTPRoute: Menentukan aturan khusus protokol untuk memilih rute permintaan dari layanan Gateway ke layanan Kubernetes. GKE mendukung HTTPRoute untuk pemilihan rute traffic berbasis HTTP(S). Developer aplikasi membuat HTTPRoute untuk mengekspos aplikasi HTTP mereka menggunakan Gateway.
- Kebijakan: Menentukan kumpulan karakteristik khusus implementasi dari resource Gateway. Anda dapat melampirkan kebijakan ke Gateway, Rute, atau Layanan Kubernetes.
- ReferenceGrant: Mengaktifkan referensi lintas-namespace dalam Gateway API. Untuk merujuk ke objek di luar namespace-nya, Anda harus membuat resource ReferenceGrant.
GatewayClass
GatewayClass adalah resource yang menentukan template untuk load balancing HTTP(S) (level 7) di cluster Kubernetes. GKE menyediakan GatewayClasses sebagai resource cakupan cluster. Operator cluster menentukan GatewayClass saat membuat Gateway di clusternya.
GatewayClass yang berbeda berkaitan dengan load balancing Google Cloud yang berbeda. Saat Anda membuat Gateway berdasarkan GatewayClass, load balancer yang sesuai akan dibuat untuk mengimplementasikan konfigurasi yang ditentukan.
Beberapa GatewayClass mendukung load balancing multi-cluster.
Tabel berikut berisi daftar GatewayClass yang tersedia di cluster GKE dan jenis load balancer yang mendasarinya. Untuk detail selengkapnya tentang GatewayClass, lihat kemampuan dan spesifikasi GatewayClass.
Nama GatewayClass | Deskripsi |
---|---|
gke-l7-global-external-managed |
Load Balancer Aplikasi eksternal global yang dibuat di Load Balancer Aplikasi eksternal global |
gke-l7-regional-external-managed |
Load Balancer Aplikasi eksternal regional yang dibuat di Load Balancer Aplikasi eksternal regional |
gke-l7-rilb |
Load Balancer Aplikasi Internal yang dibuat di Load Balancer Aplikasi internal |
gke-l7-gxlb |
Load Balancer Aplikasi eksternal global yang dibuat di Load Balancer Aplikasi klasik |
gke-l7-global-external-managed-mc |
Load Balancer Aplikasi eksternal global multi-cluster yang dibuat di Load Balancer Aplikasi eksternal global |
gke-l7-regional-external-managed-mc |
Load Balancer Aplikasi eksternal Regional multi-cluster yang dibuat di Load Balancer Aplikasi eksternal global |
gke-l7-rilb-mc |
Load Balancer Aplikasi Internal multi-cluster yang dibuat di Load Balancer Aplikasi internal |
gke-l7-gxlb-mc |
Load Balancer Aplikasi eksternal global multi-cluster yang dibuat di Load Balancer Aplikasi klasik |
asm-l7-gxlb |
Load Balancer Aplikasi eksternal global yang dibuat di Cloud Service Mesh |
Setiap GatewayClass tunduk pada batasan load balancer yang mendasarinya.
Gateway
Operator cluster membuat Gateway untuk menentukan tempat dan cara load balancer mendeteksi traffic. Gateway mengambil perilakunya (yaitu, bagaimana cara diimplementasikan) dari GatewayClass yang terkait.
Spesifikasi Gateway mencakup GatewayClass untuk Gateway, serta port dan protokol yang akan dipantau, serta Rute yang dapat diikat ke Gateway. Gateway memilih rute berdasarkan metadata Route; khususnya jenis, namespace, dan label sumber daya Rute.
Untuk contoh men-deploy Gateway, lihat Men-deploy Gateway.
Untuk contoh men-deploy Gateway multi-cluster, lihat Men-deploy Gateway multi-cluster.
HTTPRoute
HTTPRoute menentukan cara permintaan HTTP dan HTTPS yang diterima oleh Gateway diarahkan ke Layanan. Developer aplikasi membuat HTTPRoute untuk mengekspos aplikasi mereka melalui Gateway.
HTTPRoute menentukan Gateway yang dapat digunakan untuk merutekan traffic, ke Layanan mana traffi akan ditujukan, dan aturan yang menentukan traffic yang cocok dengan HTTPRoute. Binding Gateway dan Rute bersifat dua arah, yang berarti kedua resource harus memilih satu sama lain agar dapat diikat. HTTPRoute dapat mencocokkan permintaan berdasarkan detail dalam header permintaan.
Kebijakan
Kebijakan menentukan karakteristik resource Gateway, biasanya spesifik per implementasi, yang dapat dipasang oleh operator cluster ke Gateway, Rute, atau Layanan Kubernetes. Kebijakan menentukan fungsi infrastruktur Google Cloud yang mendasarinya.
Kebijakan biasanya melekat pada namespace dan dapat merujuk resource dalam namespace yang sama dan akses diberikan menggunakan RBAC. Dengan sifat hierarkis Gateway API, Anda dapat melampirkan Kebijakan ke resource teratas (Gateway) dalam namespace, dan memastikan semua resource di bawahnya dalam namespace yang berbeda menerima karakteristik kebijakan tersebut.
Pengontrol Gateway GKE mendukung Kebijakan berikut:
HealthCheckPolicy
: menentukan parameter dan perilaku health check yang digunakan untuk memeriksa status respons Pod backend.GCPGatewayPolicy
: menentukan parameter tertentu dari frontend load balancer Google Cloud. Ini mirip denganFrontendConfig
untuk resource Ingress.GCPBackendPolicy
: menentukan cara layanan backend load balancer harus mendistribusikan traffic ke endpoint. Ini mirip denganBackendConfig
untuk resource Ingress.
ReferenceGrant
ReferenceGrant memungkinkan resource seperti HTTPRoute atau Gateway mereferensikan layanan
backend atau secret yang terletak di namespace yang berbeda melalui referensi
lintas namespace. ReferenceGrant bertindak sebagai penyedia izin, yang menentukan resource (from
) mana yang diizinkan untuk mereferensikan resource lain (to
). Untuk mengaktifkan referensi lintas namespace, Anda memerlukan ReferenceGrant di namespace resource yang direferensikan.
Dalam contoh berikut, HTTPRoute di namespace frontend
harus
me-rutekan traffic ke Layanan di namespace backend
. Anda membuat
ReferenceGrant di namespace backend
dengan:
- Kolom
from
mencantumkan namespace sumber dan jenis resource yang diizinkan untuk membuat referensi, yaitu HTTPRoute di namespacefrontend
. - Kolom
to
menentukan jenis resource target yang dapat dirujuk, yaitu Layanan di namespacebackend
.
apiVersion: networking.gke.io/v1beta1
kind: ReferenceGrant
metadata:
name: allow-frontend-to-access-backend
namespace: backend
spec:
from:
- group: gateway.networking.gke.io
kind: HTTPRoute
namespace: frontend
to:
- group: ""
kind: Service
Pola kepemilikan dan penggunaan gateway
Resource Gateway dan Rute memberikan fleksibilitas terkait cara keduanya dimiliki dan di-deploy dalam organisasi. Artinya, satu load balancer dapat di-deploy dan dikelola oleh tim infrastruktur, tetapi pemilihan rute pada domain atau jalur tertentu dapat didelegasikan ke tim lain di Namespace Kubernetes lain. Pengontrol Gateway GKE mendukung penggunaan multi-tenant untuk load balancer, digunakan bersama di seluruh Namespace, cluster, dan region. Gateway juga tidak perlu dibagikan jika kepemilikan terdistribusi diperlukan lebih banyak. Berikut adalah beberapa pola penggunaan yang paling umum untuk Gateway di GKE.
Gateway yang Dikelola Sendiri
Seorang pemilik dapat men-deploy Gateway dan Rute hanya untuk aplikasi mereka dan menggunakannya secara eksklusif. Gateway dan Rute yang di-deploy dengan cara ini mirip dengan Ingress. Diagram berikut menunjukkan dua pemilik layanan berbeda yang men-deploy dan mengelola Gateway-nya sendiri. Sama seperti Ingress, setiap Gateway berhubungan dengan alamat IP dan load balancernya yang unik. TLS, perutean, dan kebijakan lainnya dikontrol sepenuhnya oleh pemilik layanan.
Pola penggunaan ini umum untuk Ingress, tetapi sulit untuk menskalakan di banyak tim karena kurangnya resource yang dibagikan. Model resource Gateway API memungkinkan pola penggunaan berikut yang menyediakan spektrum opsi untuk kontrol dan kepemilikan terdistribusi.
Gateway yang dikelola platform per Namespace
Pemisahan antara resource Gateway dan resource Rute memungkinkan administrator platform mengontrol Gateway atas nama pemilik layanan. Admin platform dapat men-deploy Gateway per Namespace atau per tim, sehingga Namespace tersebut memiliki akses eksklusif untuk menggunakan Gateway. Hal ini memberi pemilik layanan kontrol penuh atas aturan pemilihan rute tanpa risiko konflik dari tim lain. Hal ini memungkinkan administrator platform mengontrol aspek seperti alokasi IP, eksposur port, protokol, domain, dan TLS. Admin platform juga dapat menentukan jenis Gateway yang tersedia untuk tim, seperti Gateway internal atau eksternal. Pola penggunaan ini menciptakan pemisahan tanggung jawab yang bersih antara peran yang berbeda.
Pemilihan rute Lintas Namespace memungkinkan Rute untuk terhubung ke Gateway di seluruh batas Namespace. Gateway dapat membatasi dari Rute Namespace mana yang dapat dilampirkan. Demikian pula, Rute menentukan Gateway yang terpasang, tetapi hanya dapat dipasang ke Gateway yang telah mengizinkan Namespace Rute. Lampiran dua arah ini memberi setiap sisi kontrol yang fleksibel yang memungkinkan keragaman pola penggunaan ini.
Dalam diagram berikut, administrator platform telah men-deploy Gateway untuk akses eksklusif bagi setiap Namespace. Misalnya, Gateway store
dikonfigurasi sehingga hanya Rute dari Namespace store
yang dapat dilampirkan. Setiap Gateway mewakili alamat IP yang unik dan di-load balanced, sehingga memungkinkan setiap tim men-deploy sejumlah Rute terhadap Gateway untuk setiap domain atau rute yang dipilih.
Gateway Bersama per cluster
Berbagi Gateway di seluruh Namespace menawarkan bentuk kepemilikan yang lebih terpusat kepada administrator platform. Hal ini memungkinkan pemilik layanan yang berbeda, yang berjalan di Namespace yang berbeda, berbagi alamat IP, domain DNS, sertifikat, atau jalur yang sama untuk pemilihan rute yang lebih mendetail antar layanan. Gateway memberikan kontrol kepada administrator platform atas namespace yang dapat memberi rute untuk domain tertentu. Ini serupa dengan contoh sebelumnya, kecuali Gateway mengizinkan lampiran Rute dari lebih dari satu Namespace.
Pada diagram berikut, administrator platform telah men-deploy dua Gateway ke dalam Namespace infra
. Gateway external
mengizinkan Rute dari Namespace web
dan
mobile
untuk dilampirkan ke Gateway. Rute dari Namespace accounts
tidak dapat menggunakan Gateway external
karena Namespace accounts
hanya untuk layanan internal. Gateway internal
memungkinkan klien internal berkomunikasi secara pribadi dalam VPC menggunakan alamat IP pribadi.
Domain m.example.com
didelegasikan ke Namespace mobile
, yang memungkinkan
pemilik layanan seluler mengonfigurasi aturan pemilihan rute apa pun yang mereka perlukan pada
domain m.example.com
. Hal ini memberi pemilik layanan tingkat kontrol yang lebih besar untuk memperkenalkan endpoint API baru dan mengontrol traffic tanpa meminta perubahan dari administrator.
Gateway Bersama per Fleet
Dengan menggunakan Gateway multi-cluster, Gateway dapat dibagikan di seluruh Namespace, cluster, dan region. Organisasi besar dengan aplikasi yang terdistribusi secara geografis mungkin dapat memanfaatkan
Gateway multi-cluster karena mereka dapat mengontrol traffic global
secara terperinci sekaligus mendelegasikan kepemilikan pemilihan rute. Sama seperti contoh sebelumnya, administrator platform mengelola Gateway dan mendelegasikan perutean. Penambahan utama
pada kasus penggunaan ini adalah Rute mereferensikan Layanan multi-cluster, yang
di-deploy di berbagai cluster. Traffic dapat dirutekan dengan cara yang eksplisit, traffic ke store.example.com/us
mengarah ke Pod gke-us
, atau secara implisit, traffic ke example.com/*
dirutekan ke cluster terdekat
dengan klien. Fleksibilitas ini memungkinkan pemilik layanan menentukan strategi pemilihan rute
yang optimal untuk aplikasi mereka.
GKE Gateway Controller
Gateway GKE controller adalah implementasi Google untuk Gateway API untuk Cloud Load Balancing. Serupa dengan GKE Ingress Controller, GKE Gateway controller mengamati Kubernetes API untuk resource Gateway API dan merekonsiliasi resource Cloud Load Balancing untuk menerapkan perilaku jaringan yang ditentukan oleh resource Gateway.
Ada dua versi GKE Gateway Controller:
- Single-cluster: mengelola Gateway cluster tunggal untuk cluster GKE tunggal.
- Multi-cluster: mengelola Gateway multi-cluster untuk satu atau beberapa cluster GKE.
Kedua Gateway controller adalah pengontrol yang dihosting Google yang memantau cluster Kubernetes API for GKE. Tidak seperti GKE Ingress Controller, GKE Gateway controller tidak dihosting di bidang kontrol GKE atau di project pengguna, sehingga dapat menjadi lebih skalabel dan tangguh. Kedua pengontrol Gateway tersedia secara umum.
Pengontrol Gateway sendiri bukanlah bidang data jaringan dan tidak memproses traffic apa pun. Mereka berada di luar band dari lalu lintas dan mengelola berbagai bidang data yang memproses lalu lintas data. Diagram berikut menunjukkan arsitektur GKE Gateway Controller cluster tunggal dan multi-cluster. Pengontrol yang mendasarinya yang digunakan bergantung pada GatewayClass dari Gateway yang di-deploy.
Pengontrol | Pengontrol Gateway cluster tunggal | Pengontrol Gateway multi-cluster |
---|---|---|
Dikelola oleh | Google Cloud | Google Cloud |
Cakupan cluster | Gateway cluster tunggal | Gateway Multi-cluster |
Lokasi deployment | Di-deploy secara regional di region yang sama dengan cluster GKE-nya. | Di-deploy secara global di berbagai region Google Cloud. |
Cara mengaktifkan | Diaktifkan secara default di GKE. | Diaktifkan melalui Multi Cluster Ingress API dan pendaftaran ke fleet. Lihat Mengaktifkan Gateway multi-cluster. |
GatewayClass yang Didukung |
Anda dapat menggunakan beberapa pengontrol Gateway, termasuk pengontrol yang tidak disediakan oleh Google, di cluster GKE secara bersamaan. Setiap GatewayClass didukung oleh satu dan hanya satu pengontrol Gateway, yang memungkinkan load balancing tunggal dan multi-cluster digunakan secara bersamaan.
Ingress dan Gateway
Perbandingan Ingress dan Gateway
Gateway dan Ingress adalah standar open source untuk mengarahkan lalu lintas data. Gateway dirancang oleh komunitas Kubernetes, yang memanfaatkan yang dipelajari dari ekosistem mesh layanan dan Ingress. Gateway adalah evolusi dari Ingress yang menyediakan fungsi yang sama, yang dikirim sebagai superset dari kemampuan Ingress. Keduanya dapat digunakan secara bersamaan tanpa konflik, meskipun resource Gateway dan Rute dari waktu ke waktu akan memberikan lebih banyak kemampuan yang tidak tersedia di Ingress, yang menarik pengguna untuk mulai menggunakan Gateway yang sebelumnya mungkin pernah menggunakan Ingress.
Di GKE, semua resource Ingress langsung dikonversi ke resource Gateway dan HTTPRoute. Satu Ingress sesuai dengan satu Gateway (untuk konfigurasi frontend) dan satu HTTPRoute (untuk konfigurasi pemilihan rute). Contoh berikut menunjukkan tampilan konfigurasi Gateway dan HTTPRoute yang sesuai. Perlu diperhatikan bahwa resource Gateway dan HTTPRoute dapat dibuat secara terpisah, juga oleh pengguna yang berbeda. Gateway dapat memiliki banyak Rute dan satu Rute juga dapat terpasang ke lebih dari satu Gateway. Hubungan antara Gateway dan Rute dibahas dalam Pola penggunaan Gateway.
Masuk
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "gce-internal"
spec:
rules:
- host: "example.com"
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: site
port:
number: 80
- pathType: Prefix
path: /shop
backend:
service:
name: store
port:
number: 80
Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
name: my-gateway
spec:
gatewayClassName: gke-l7-rilb
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
kinds:
- kind: HTTPRoute
Rute
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: my-route
spec:
parentRefs:
- name: my-gateway
hostnames:
- "example.com"
rules:
- matches:
- path:
value: /
backendRefs:
- name: site
port: 80
- matches:
- path:
value: /shop
backendRefs:
- name: store
port: 80
Mengintegrasikan Gateway API dengan Mesh Layanan
Anda dapat mengonfigurasi mesh layanan Cloud Service Mesh menggunakan Gateway API. Hal ini memungkinkan komunikasi layanan ke layanan, pengelolaan traffic, load balancing global, dan penerapan kebijakan keamanan untuk kasus penggunaan mesh layanan. Untuk mengetahui informasi lengkap tentang penggunaan Cloud Service Mesh dengan Gateway API, termasuk panduan penyiapan deployment, lihat Ringkasan mesh layanan Cloud Service Mesh GKE.
Harga
Semua resource Compute Engine yang di-deploy melalui pengontrol Gateway akan dikenai biaya sesuai project tempat cluster GKE Anda berada. Pengontrol Gateway cluster tunggal ditawarkan tanpa biaya tambahan sebagai bagian dari harga GKE Standard dan Autopilot. Harga untuk Gateway multi-cluster dijelaskan di halaman harga Gateway dan Multi Cluster Ingress.
Langkah selanjutnya
- Pelajari cara Mengonfigurasi resource Gateway menggunakan Kebijakan
- Pelajari cara Men-deploy Gateway.
- Pelajari cara Men-deploy Gateway multi-cluster.
- Untuk mengetahui informasi selengkapnya tentang penggunaan Cloud Service Mesh dengan Gateway API, lihat Ringkasan mesh layanan GKE Cloud Service Mesh.