סקירה כללית
Cloud Service Mesh מספק יכולות של רשתות שירות לאפליקציות, כולל ניהול מתקדם של תעבורת נתונים, ניראות (observability) ואבטחה. עם זאת, הגדרה והפעלה של רשת שירותים היא משימה מורכבת. בדף הזה מוסבר איך להגדיר את Cloud Service Mesh באמצעות ממשקי ה-API של Kubernetes Gateway. ממשקי ה-API האלה נועדו לפשט ולשפר את חוויית ההגדרה הכוללת של הרשת.
ממשקי ה-API של Kubernetes Gateway ל-Mesh מאפשרים להגדיר את Cloud Service Mesh גם לפריסות של gRPC בלי שרת proxy וגם לפריסות של שרת proxy של Envoy. למודל Gateway API for Mesh יש כמה יתרונות מרכזיים:
- ממשקי Gateway API מספקים ממשק אחד עקבי לניהול התנועה של Ingress (צפון-דרום) ושל Service mesh (מזרח-מערב) בתוך אשכול Kubernetes.
- Service mesh מאפשרות דפוסי ניתוב מתקדמים של תעבורת נתונים. ממשקי Gateway API מאפשרים לכם לתכנן ולנהל כללי ניתוב מורכבים.
- באמצעות ממשקי Gateway API, המפתחים יכולים להתמקד בהגדרה של כללי מסלול ומדיניות ברמה גבוהה למיקרו-שירות שלהם, בלי צורך בידע מעמיק על ההטמעה של Service mesh הבסיסית.
- ה-API תוכנן כך שיהיה אפשר להרחיב אותו, כדי לאפשר שיפורים עתידיים ותמיכה בפרוטוקולים ובתרחישי שימוש חדשים.
- ממשקי Gateway API נהנים מתמיכה חזקה של הקהילה, ונתמכים על ידי סביבה הולכת וגדלה של ספקים וכלים של Service mesh.
העבודה של יוזמת GAMMA לתמיכה בתרחישים לדוגמה של רשת שירותים היא חלק מהערוץ הרגיל החל מגרסה 1.1.0, ונחשבת לזמינה לכלל המשתמשים.
לפי המפרט, בעלי האפליקציה צריכים להגדיר את כללי התנועה לשירות רשת על ידי הגדרת Route resource (לפעמים נקרא xRoute) עם משאב Service ב-Kubernetes בתור parentRef. הגישה תלויה בתפקידי ה-frontend וה-backend של Service ב-Kubernetes, כמו שמוגדר ב-GEP-1324: Service Mesh in Gateway API, שבו תפקיד ה-frontend משמש כ-parentRef ותפקיד ה-backend של Service משמש כ-backendRef. ההטמעה התואמת משתמשת בשם Service כדי להתאים תנועה ובנקודות הקצה backendRef בשביל כתובות ה-IP הקנוניות.
Gateway API for Mesh
Gateway API, פרויקט של Kubernetes, מתמקד בניתוב בשכבות 4 ו-7 בתוך Kubernetes. הוא מחליף את ממשקי ה-API של Ingress, איזון עומסים ורשת שירות (Service Mesh). הוא מיועד להיות רב-תכליתי, תיאורי וממוקד תפקיד, וההגדרות שלו נמצאות בעיקר בשכבת הניתוב.
משאבים ספציפיים לפרוטוקול כמו HTTPRoute ו-GRPCRoute מאפשרים ניתוב מתקדם של Ingress ו-Mesh.
GAMMA Initiative (Gateway API for Service Mesh) מגדיר איך אפשר להשתמש ב-Gateway API גם לתעבורת נתונים בין שירותים או לתעבורת נתונים מזרח/מערב באותו אשכול. מטרת GAMMA היא לקבוע איך להשתמש ב-Gateway API כדי להגדיר Service mesh עם שינויים מינימליים ב-Gateway API, תוך שמירה על האופי מכוון התפקידים שלו. ב-GAMMA גם מודגשת החשיבות של קידום העקביות בין הטמעות שונות של Service mesh ב-Gateway API, בלי קשר לטכנולוגיה או לשרת ה-proxy שבהם משתמשים.
GAMMA משתמש בנקודות הרחבה קיימות במפרט של Gateway API, בלי צורך בשינויים ב-API או במשאבים חדשים. כדי לעשות את זה, מרחיבים את הגדרות המשאבים של המסלולים (GRPCRoute או HTTPRoute ב-Gateway API) כדי לאותת על תרחיש השימוש של רשת השירות, ובאופן ספציפי על ידי שיוך משאבי המסלולים למשאבי השירות, כפי שמתואר במאמר Gateway API לרשת שירות.
הדוגמה הבאה ממחישה את תרחיש השימוש ברשת (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 מוגדר לתרחיש לדוגמה של רשת שירות. בדוגמה הקודמת, השירות echo-service מוגדר בתור parentRef, כלומר ה-HTTPRoute מצורף לחזית של echo-service. כל תנועה שנשלחת אל echo-service על ידי לקוח מנותבת בהתאם ל-HTTPRoute echo-route.
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 מנותבת בהתאם ל-GRPCRoute echo-route. כללי המסלול בדוגמה הזו תואמים ל-method של gRPC ומנתבים את התנועה ל-backendRef ספציפי. אפשר גם להשתמש ב-GRPCRoutes כדי לנתב בקשות מלקוחות שמשתמשים בשרת proxy עם החדרות sidecar, כמו Envoy, כשמבטלים את הקידומת xds:///.
