Ringkasan

Cloud Service Mesh menyediakan kemampuan jaringan layanan ke aplikasi Anda, termasuk pengelolaan traffic, kemampuan observasi, dan keamanan tingkat lanjut. Namun, mengonfigurasi dan mengoperasikan mesh layanan adalah tugas yang kompleks. Halaman ini menjelaskan cara mengonfigurasi Cloud Service Mesh dengan Kubernetes Gateway API. API ini dirancang untuk menyederhanakan dan meningkatkan pengalaman konfigurasi mesh Anda secara keseluruhan.

Kubernetes Gateway API untuk Mesh memungkinkan Anda mengonfigurasi Cloud Service Mesh untuk deployment proxy Envoy dan gRPC tanpa proxy. Model Gateway API untuk Mesh memberikan beberapa manfaat utama:

  • Gateway API menyediakan antarmuka tunggal yang konsisten untuk mengelola traffic ingress (utara-selatan) dan mesh layanan (timur-barat) dalam cluster Kubernetes Anda.
  • Mesh layanan memungkinkan pola perutean traffic lanjutan. Gateway API memungkinkan Anda mendesain dan mengelola aturan pemilihan rute yang kompleks.
  • Dengan Gateway API, developer dapat berfokus pada penentuan aturan dan kebijakan perutean tingkat tinggi untuk microservice mereka tanpa memerlukan pengetahuan mendalam tentang implementasi mesh layanan yang mendasarinya.
  • API ini dirancang agar dapat diperluas, sehingga memungkinkan peningkatan di masa mendatang dan dukungan untuk protokol dan kasus penggunaan baru.
  • Gateway API memiliki dukungan komunitas yang kuat dan didukung oleh ekosistem penyedia dan alat mesh layanan yang terus berkembang.

Pekerjaan inisiatif GAMMA untuk mendukung kasus penggunaan mesh layanan telah menjadi bagian dari Saluran Standar sejak v1.1.0 dan dianggap GA.

Spesifikasi mengusulkan bahwa pemilik aplikasi harus mengonfigurasi aturan traffic untuk layanan mesh dengan mengonfigurasi Route resource (terkadang disebut sebagai xRoute) dengan resource Service Kubernetes sebagai parentRef. Pendekatan ini bergantung pada peran "frontend" dan "backend" Service Kubernetes seperti yang ditentukan dalam GEP-1324: Mesh Layanan di Gateway API, dengan peran "frontend" digunakan sebagai parentRef dan peran "backend" Service digunakan sebagai backendRef. Implementasi yang sesuai menggunakan nama Service untuk mencocokkan traffic dan endpoint backendRef untuk alamat IP kanonis.

Gateway API untuk Mesh

Gateway API, sebuah project Kubernetes, berfokus pada pemilihan rute Lapisan 4 dan 7 dalam Kubernetes. API ini menggantikan API Ingress, Load Balancing, dan Mesh Layanan. Didesain agar serbaguna, deskriptif, dan berfokus pada peran, konfigurasinya terutama berada di lapisan Perutean. Resource khusus protokol seperti HTTPRoute dan GRPCRoute memungkinkan perutean mesh dan ingress lanjutan.

GAMMA Initiative (Gateway API untuk Mesh Layanan) menentukan cara Gateway API juga dapat digunakan untuk traffic antar-layanan atau traffic Timur/Barat dalam cluster yang sama. GAMMA bertujuan untuk menetapkan cara menggunakan Gateway API untuk mengonfigurasi mesh layanan dengan modifikasi minimal pada Gateway API sekaligus mempertahankan sifatnya yang berorientasi pada peran. GAMMA juga menekankan pentingnya mempromosikan konsistensi di antara berbagai implementasi mesh layanan Gateway API, terlepas dari teknologi atau proxy yang mendasarinya.

GAMMA memanfaatkan titik ekstensibilitas yang ada dalam spesifikasi Gateway API, sehingga tidak memerlukan perubahan API atau resource baru. Hal ini dilakukan dengan memperluas definisi resource rute (GRPCRoute atau HTTPRoute di Gateway API) untuk memberi sinyal kasus penggunaan mesh layanan, khususnya dengan mengaitkan resource rute dengan resource Service seperti yang dijelaskan dalam Gateway API untuk Mesh Layanan.

Contoh berikut mengilustrasikan kasus penggunaan mesh dalam penggunaan HTTPRoute:

apiVersion:  gateway.networking.k8s.io
kind: HTTPRoute
metadata:
  name: echo-route
spec:
  parentRefs:
  - kind: Service
    group: ""
    name: echo-service
  rules:
  - backendRefs:
    - name: echo-v1
      port: 80
      weight: 9
  - backendRefs:
    - name: echo-v2
      port: 80
      weight: 1

Diagram HTTPRoute

HTTPRoute mereferensikan Service sebagai parentRef-nya, yang menandakan bahwa rute HTTPRoute dikonfigurasi untuk kasus penggunaan mesh layanan. Pada contoh sebelumnya, Service echo-service ditentukan sebagai parentRef, yang berarti HTTPRoute dilampirkan ke frontend echo-service. Setiap traffic yang dikirim ke echo-service oleh klien akan dirutekan sesuai dengan HTTPRoute echo-route.

GRPCRoute adalah resource Kubernetes Gateway API lainnya, yang digunakan untuk merutekan traffic gRPC ke layanan Kubernetes. Pengguna memilih untuk menggunakan GRPCRoute, bukan HTTPRoute, jika mereka ingin merutekan traffic gRPC secara khusus dan memanfaatkan fitur yang disesuaikan untuk gRPC, seperti pencocokan metode dan layanan gRPC.

Contoh berikut mengilustrasikan penggunaan GRPCRoute:

apiVersion:  gateway.networking.k8s.io
kind: GRPCRoute
metadata:
  name: echo-route
spec:
  parentRefs:
  - kind: Service
    group: ""
    name: echo-service
  rules:
   - matches:
    - method:
        service:echo_basic.grpcecho.GrpcEcho
        method: Echo
    backendRefs:
    - name: grpc-infra-backend-v1
      port: 8080
  - matches:
    - method:
        service:echo_basic.grpcecho.GrpcEcho
        method: EchoTwo
    backendRefs:
    - name: grpc-infra-backend-v2
      port: 8080

Diagram GRPCRoute

Sama seperti contoh HTTPRoute, GRPCRoute ini dikonfigurasi untuk kasus penggunaan mesh layanan. Setiap traffic yang dikirim ke xds:///echo-service.default.svc.cluster.local:8080 oleh klien gRPC tanpa proxy akan dirutekan sesuai dengan echo-route GRPCRoute. Aturan rute dalam contoh ini cocok dengan metode gRPC dan merutekan traffic ke backendRef tertentu. GRPCRoute juga dapat digunakan untuk merutekan permintaan dari klien yang di-proxy dengan injeksi sidecar, seperti Envoy, saat awalan xds:/// dihapus.

Diagram mesh cluster tunggal

Langkah berikutnya