Ringkasan
Cloud Service Mesh menyediakan kemampuan jaringan layanan ke aplikasi Anda, termasuk pengelolaan traffic, kemampuan observasi, dan keamanan lanjutan. 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 gRPC tanpa proxy dan proxy Envoy. Model Gateway API untuk Mesh memungkinkan beberapa manfaat utama:
- Gateway API menyediakan satu antarmuka yang konsisten untuk mengelola traffic ingress (utara-selatan) dan mesh layanan (timur-barat) dalam cluster Kubernetes Anda.
- Mesh layanan memungkinkan pola pemilihan rute traffic lanjutan. Gateway API memungkinkan Anda mendesain dan mengelola aturan pemilihan rute yang kompleks.
- Dengan Gateway API, developer dapat berfokus untuk menentukan aturan dan kebijakan perutean tingkat tinggi ke microservice mereka tanpa memerlukan pengetahuan mendalam tentang implementasi mesh layanan yang mendasarinya.
- API ini dirancang agar dapat diperluas, sehingga memungkinkan peningkatan dan dukungan di masa mendatang 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.
Inisiatif GAMMA yang berfungsi untuk mendukung kasus penggunaan mesh layanan telah menjadi bagian dari Saluran Standar sejak v1.1.0 dan dianggap sebagai GA.
Spesifikasi
menyarankan 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: Service Mesh 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, project Kubernetes, berfokus pada perutean Lapisan 4 dan 7 dalam Kubernetes. API ini menggantikan API Ingress, Load Balancing, dan Service Mesh. Dirancang agar fleksibel, deskriptif, dan berfokus pada peran, konfigurasinya terutama berada di lapisan Pemilihan rute.
Resource khusus protokol seperti HTTPRoute
dan GRPCRoute
memungkinkan rute
mesh dan ingress lanjutan.
GAMMA Initiative (Gateway API untuk Service Mesh) menentukan cara Gateway API juga dapat digunakan untuk antar-layanan atau traffic East/West 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 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 ekstensi 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 menandakan kasus penggunaan mesh layanan, khususnya dengan mengaitkan resource rute dengan resource Layanan 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
HTTPRoute mereferensikan Service
sebagai parentRef
-nya, yang menandakan bahwa
rute HTTPRoute dikonfigurasi untuk kasus penggunaan mesh layanan. Pada contoh sebelumnya,
Layanan echo-service ditentukan sebagai parentRef
, yang berarti
HTTPRoute dilampirkan ke frontend echo-service. Setiap traffic yang dikirim ke layanan echo oleh klien akan dirutekan sesuai dengan rute echo HTTPRoute.
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 metode gRPC dan pencocokan layanan.
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
Sama seperti contoh HTTPRoute, GRPCRoute ini dikonfigurasi untuk kasus penggunaan
mesh layanan. Semua traffic yang dikirim ke xds:///echo-service.default.svc.cluster.local:8080
oleh klien gRPC tanpa proxy akan dirutekan sesuai dengan rute echo GRPCRoute. Aturan rute dalam contoh ini cocok dengan metode gRPC dan merutekan traffic ke backendRef
tertentu. GRPCRoutes juga dapat digunakan untuk merutekan permintaan dari
klien yang di-proxy dengan injeksi sidecar, seperti Envoy, saat awalan xds:///
dihapus.