Gateway


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.

GKE menyediakan class Gateway. Operator cluster membuat resource Gateway berdasarkan class tersebut. Developer aplikasi
        membuat resource HTTPRoute yang terikat ke resource Gateway.
Gambar: Ringkasan Gateway API

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 dengan FrontendConfig untuk resource Ingress.
  • GCPBackendPolicy: menentukan cara layanan backend load balancer harus mendistribusikan traffic ke endpoint. Ini mirip dengan BackendConfig 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 namespace frontend.
  • Kolom to menentukan jenis resource target yang dapat dirujuk, yaitu Layanan di namespace backend.
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.

Satu pemilik dapat memiliki kontrol penuh atas Gateway dan Rute

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 per Namespace menyediakan akses eksklusif Gateway ke Namespace tersebut.

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.

Gateway per cluster memungkinkan berbagai Namespace di dalam cluster untuk berbagi satu Gateway

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.

Satu Gateway per fleet menyediakan load balancing multi-cluster dan multi-regional

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 untuk 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 Gateway multi-cluster dan satu cluster men-deploy dan mengelola load
balancer untuk GKE, tetapi tidak memproses traffic jaringan itu sendiri.

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
  • gke-l7-global-external-managed GA
  • gke-l7-regional-external-managed GA
  • gke-l7-rilb GA
  • gke-l7-gxlb GA
  • asm-l7-gxlb Pratinjau
  • gke-l7-global-external-managed-mc GA
  • gke-l7-regional-external-managed-mc GA
  • gke-l7-rilb-mc GA
  • gke-l7-gxlb-mc GA
  • gke-td Pratinjau

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