סקירה כללית
Cloud Service Mesh מספק לאפליקציות שלכם יכולות של רשת שירותים, כולל ניהול מתקדם של תעבורת נתונים, ניראות (observability) ואבטחה. עם זאת, הגדרה והפעלה של רשת Service mesh היא משימה מורכבת. בדף הזה מוסבר איך להגדיר את Cloud Service Mesh באמצעות Kubernetes Gateway APIs. ממשקי ה-API האלה נועדו לפשט ולשפר את חוויית ההגדרה הכוללת של הרשת.
ממשקי Kubernetes Gateway API ל-Mesh מאפשרים להגדיר את Cloud Service Mesh לפריסות של gRPC בלי שרת Proxy ושל שרת Proxy של Envoy. ל-Gateway API for Mesh model יש כמה יתרונות מרכזיים:
- ממשקי Gateway API מספקים ממשק יחיד ועקבי לניהול תעבורת נתונים נכנסת (צפון-דרום) ותעבורת Service mesh (מזרח-מערב) בתוך אשכול Kubernetes.
- רשתות שירות מאפשרות דפוסי ניתוב מתקדמים של תעבורת נתונים. ממשקי API של שערים מאפשרים לכם לעצב ולנהל כללי ניתוב מורכבים.
- בעזרת Gateway APIs, מפתחים יכולים להתמקד בהגדרת כללים ומדיניות לניתוב ברמה גבוהה למיקרו-שירותים שלהם, בלי צורך בידע מעמיק לגבי ההטמעה של Service mesh הבסיסית.
- ה-API מתוכנן להיות ניתן להרחבה, כדי לאפשר שיפורים עתידיים ותמיכה בפרוטוקולים חדשים ובתרחישי שימוש חדשים.
- ממשקי API של שערים נהנים מתמיכה חזקה של הקהילה, והם נתמכים על ידי מערכת אקולוגית גדלה של ספקי Service mesh וכלים.
העבודה על יוזמת GAMMA לתמיכה בתרחישי שימוש ב-Service mesh היא חלק מהערוץ הרגיל מאז גרסה v1.1.0, והיא נחשבת לזמינה לקהל הרחב (GA).
במפרט מוצע שבעלי אפליקציה יגדירו כללי תנועה לשירות רשת על ידי הגדרת Route resource (לפעמים נקרא xRoute) עם משאב Kubernetes Service בתור parentRef. הגישה תלויה בתפקידים 'קצה קדמי' ו'בק-אנד' של Kubernetes Service, כפי שמוגדרים ב-GEP-1324: Service Mesh in Gateway API, כאשר התפקיד 'קצה קדמי' משמש כ-parentRef והתפקיד 'בק-אנד' של Service משמש כ-backendRef. ההטמעה התואמת משתמשת בשם Service כדי להתאים תנועה ובנקודות הקצה backendRef לכתובות ה-IP הקנוניות.
Gateway API for Mesh
Gateway API, פרויקט Kubernetes, מתמקד בניתוב בשכבות 4 ו-7 בתוך Kubernetes. הוא מחליף את ממשקי ה-API של Ingress, Load Balancing ו-Service Mesh. ההגדרות שלו מיועדות להיות מגוונות, תיאוריות וממוקדות בתפקיד, והן נמצאות בעיקר בשכבת הניתוב.
משאבים ספציפיים לפרוטוקול כמו HTTPRoute ו-GRPCRoute מאפשרים ניהול מתקדם של תעבורת נתונים נכנסת (ingress) וניתוב של רשתות.
יוזמת GAMMA (Gateway API for Service Mesh) מגדירה איך אפשר להשתמש ב-Gateway API גם לתקשורת בין שירותים או לתנועה מזרחית/מערבית באותו אשכול. מטרת GAMMA היא להסביר איך להשתמש ב-Gateway API כדי להגדיר Service mesh עם שינויים מינימליים ב-Gateway API, תוך שמירה על האופי מבוסס-התפקידים שלו. בנוסף, ב-GAMMA מדגישים את החשיבות של קידום עקביות בין יישומי Gateway API שונים של Service mesh, ללא קשר לטכנולוגיה או לשרת ה-proxy הבסיסיים שלהם.
GAMMA משתמשת בנקודות הרחבה קיימות במפרט Gateway API, ולא נדרשים שינויים ב-API או משאבים חדשים. הפעולה הזו מתבצעת על ידי הרחבת ההגדרות של משאבי המסלול (GRPCRoute או HTTPRoute ב-Gateway API) כדי לציין את תרחיש השימוש ברשת שירותים, במיוחד על ידי שיוך משאבי המסלול למשאבי השירות, כפי שמתואר במאמר Gateway API for Service Mesh.
בדוגמה הבאה מוצג תרחיש שימוש ברשת בשימוש ב-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 מפנה אל Service כאל parentRef, מה שמציין שהמסלול של ה-HTTPRoute מוגדר לתרחיש שימוש ב-Service mesh. בדוגמה הקודמת, השירות echo-service מצוין כ-parentRef, כלומר HTTPRoute מצורף לקצה הקדמי של echo-service. כל התנועה שנשלחת אל echo-service על ידי לקוח מנותבת בהתאם ל-echo-route של HTTPRoute.
GRPCRoute הוא עוד משאב של Kubernetes Gateway API, שמשמש לניתוב תעבורת gRPC לשירותי Kubernetes. משתמשים בוחרים להשתמש ב-GRPCRoute במקום ב-HTTPRoute כשהם רוצים לנתב תנועת gRPC באופן ספציפי וליהנות מתכונות שמותאמות ל-gRPC, כמו התאמה של שיטות ושירותים של gRPC.
בדוגמה הבאה מוצג שימוש ב-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
בדומה לדוגמה של HTTPRoute, GRPCRoute מוגדרת לתרחישי שימוש ב-Service mesh. כל התנועה שנשלחת אל xds:///echo-service.default.svc.cluster.local:8080 על ידי לקוח gRPC בלי שרת Proxy מנותבת בהתאם ל-echo-route של GRPCRoute. כללי הניתוב בדוגמה הזו תואמים לשיטת gRPC ומנתבים את התנועה ל-backendRef ספציפי. אפשר גם להשתמש ב-GRPCRoutes כדי להפנות בקשות מלקוחות עם פרוקסי עם הזרקות של sidecar, כמו Envoy, כשמוסרים את הקידומת xds:///.
