Gateway


Halaman ini menjelaskan implementasi Google Kubernetes Engine (GKE) dari Kubernetes Gateway API menggunakan pengontrol Gateway GKE.

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 lain 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.

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.

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
gke-td Mesh layanan Traffic Director multi-cluster
asm-l7-gxlb Load Balancer Aplikasi eksternal global yang dibangun di Anthos 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.

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. Sifat hierarkis Gateway API memungkinkan Anda untuk melampirkan Kebijakan ke resource teratas (Gateway) dalam namespace, dan semua resource di bawahnya di namespace yang berbeda akan 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.

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.

GKE Gateway Controller

Pengontrol Gateway cluster tunggal GKE mengamati Kubernetes API untuk resource Gateway API dan merekonsiliasi resource Cloud Load Balancing untuk mengimplementasikan perilaku jaringan yang ditentukan oleh resource Gateway.

Pengontrol Gateway cluster tunggal bukanlah bidang data jaringan dan tidak memproses traffic apa pun.

Diagram berikut menunjukkan arsitektur pengontrol Gateway GKE cluster tunggal. Pengontrol yang mendasarinya yang digunakan bergantung pada GatewayClass dari Gateway yang di-deploy.

Pengontrol Gateway cluster tunggal men-deploy dan mengelola load balancer untuk GKE, tetapi tidak memproses traffic jaringan.

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

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 berkonflik, meskipun resource Gateway dan Rute seiring waktu akan memberikan lebih banyak kemampuan yang tidak tersedia di Ingress, yang menarik pengguna untuk mulai menggunakan Gateway yang mungkin sebelumnya 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 Traffic Director 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 Traffic Director dengan Gateway API, termasuk panduan penyiapan deployment, lihat Ringkasan Traffic Director mesh layanan GKE.

Harga

Semua resource Compute Engine yang di-deploy melalui Pengontrol Gateway dikenai biaya untuk 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 Ingress Multi Cluster.

Langkah selanjutnya