בדף הזה מוסבר איך להשתמש בשער Connect כדי להתחבר לאשכול רשום. לפני שקוראים את הדף הזה, חשוב לוודא שמכירים את המושגים שמוסברים בסקירה הכללית. המדריך מניח שאדמין הפרויקט כבר הגדיר את השער והעניק לכם את התפקידים וההרשאות הנדרשים.
לפני שמתחילים
ודאו שכלי שורת הפקודה הבאים מותקנים:
- הגרסה האחרונה של Google Cloud CLI, כלי שורת הפקודה לאינטראקציה עם Google Cloud.
kubectl
אם אתם משתמשים ב-Cloud Shell כסביבת המעטפת שלכם לאינטראקציה עם Google Cloud, הכלים האלה מותקנים בשבילכם.
מוודאים שאתחלתם את ה-CLI של gcloud לשימוש בפרויקט.
כניסה לחשבון Google Cloud
אתם יכולים להשתמש ב Google Cloud חשבון שלכם או ב Google Cloud חשבון שירות כדי לקיים אינטראקציה עם אשכולות מחוברים באמצעות Gateway API.
פועלים לפי ההוראות במאמר איך נותנים ל-CLI של Google Cloud הרשאות גישה ל-Google Cloud כדי להיכנס לחשבון המשתמש. שער Connect תומך בהתחזות לחשבון שירות, כך שגם אם אתם מחוברים לחשבון המשתמש שלכם, אתם יכולים להשתמש בחשבון שירות כדי ליצור אינטראקציה עם אשכולות, כמו שתוכלו לראות בקטעים הבאים.
בחירת אשכול רשום
אם אתם לא יודעים את השם של האשכול שאליו אתם רוצים לגשת, אתם יכולים להריץ את הפקודה הבאה כדי לראות את כל האשכולות הרשומים של צי המכונות הנוכחי שלכם:
gcloud container fleet memberships list
בקטע הזה מפורטים כל האשכולות בצי, כולל שמות החברים והמזהים החיצוניים שלהם. לכל אשכול בצי יש שם חברות ייחודי. במקרה של אשכולות GKE, שם החברות בדרך כלל זהה לשם שנתתם לאשכול כשנוצר, אלא אם השם של האשכול לא היה ייחודי בפרויקט שלו בזמן הרישום.
קבלת השער של האשכול kubeconfig
משתמשים בפקודה הבאה כדי לקבל את kubeconfig שדרוש לאינטראקציה עם האשכול שצוין:
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
מחליפים את MEMBERSHIP_NAME בשם החברות בצי של האשכול.
הפקודה הזו מחזירה שער Connect ספציפי kubeconfig שמאפשר להתחבר לאשכול דרך שער Connect.
אם רוצים להשתמש בחשבון שירות ולא בחשבון Google Cloud שלכם, משתמשים ב-gcloud config כדי להגדיר את auth/impersonate_service_account לכתובת האימייל של חשבון השירות.
כדי לאחזר את פרטי הכניסה של האשכול שמשמש לאינטראקציה עם שער Connect באמצעות חשבון שירות, מריצים את הפקודות הבאות: שימו לב:
- אשכולות Google Distributed Cloud (תוכנה בלבד) בשרת פיזי וב-VMware: שם החברות זהה לשם האשכול.
GKE ב-AWS: משתמשים ב-
gcloud container aws clusters get-credentials.GKE ב-Azure: שימוש ב-
gcloud container azure clusters get-credentials.
מידע נוסף על מתן הרשאה למשתמשים להתחזות לחשבון שירות זמין במאמר ניהול הגישה לחשבונות שירות.
gcloud config set auth/impersonate_service_account SA_EMAIL_ADDRESS
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
מחליפים את SA_EMAIL_ADDRESS בכתובת האימייל של חשבון השירות. מידע נוסף על מתן הרשאה למשתמשים להתחזות לחשבון שירות זמין במאמר ניהול הגישה לחשבונות שירות.
הרצת פקודות באשכול
אחרי שיש לכם את פרטי הכניסה הדרושים, אתם יכולים להריץ פקודות באמצעות kubectl או go-client, כמו שאתם עושים בדרך כלל בכל אשכול Kubernetes. הפלט אמור להיראות כך:
# Get namespaces in the Cluster.
kubectl get namespaces
NAME STATUS AGE
default Active 59d
gke-connect Active 4d
פקודות kubectl exec/cp/attach/port-forward
הפקודות הבאות של kubectl הן פקודות סטרימינג ויש להן דרישות נוספות:
attachcpexecport-forward
חשוב לשים לב לדרישות הבאות:
הגרסה של האשכולות צריכה להיות 1.30 ואילך כדי להשתמש בפקודות
attach,cpו-exec, וגרסה 1.31 ואילך כדי להשתמש בפקודהport-forward.הלקוח
kubectlצריך להיות בגרסה 1.31 ואילך.כדי לבדוק את גרסת הלקוח, מעיינים בפלט של הפקודה
kubectl version. כדי להתקין גרסה חדשה יותר שלkubectl, אפשר לעיין במאמר בנושא התקנת כלים.
למשתמשים ולחשבונות שירות עם תפקיד ה-IAM roles/gkehub.gatewayAdmin והתפקיד cluster-admin ClusterRole יש את ההרשאות הנדרשות להרצת הפקודות attach, cp, exec ו-port-forward. אם למשתמשים ולחשבונות שירות הוקצה תפקיד IAM בהתאמה אישית או תפקיד RBAC בהתאמה אישית, יכול להיות שתצטרכו להעניק הרשאות נוספות. מידע נוסף מופיע בקטעים הבאים.
נותנים הרשאה נוספת אם צריך
כדי להריץ את הפקודות attach, cp, exec ו-port-forward דרך שער Connect, נדרשת הרשאת IAM gkehub.gateway.stream. הרשאה זו כלולה ב-roles/gkehub.gatewayAdmin.
למשתמשים שהם לא בעלי הפרויקט, או למשתמשים או לחשבונות שירות שלא קיבלו את ההרשאה roles/gkehub.gatewayAdmin בפרויקט, צריך להעניק את ההרשאה roles/gkehub.gatewayAdmin או ליצור תפקיד בהתאמה אישית שכולל את שאר התפקידים הנדרשים ואת ההרשאה gkehub.gateway.stream. במאמר יצירה וניהול של תפקידים בהתאמה אישית בחומרי העזר של IAM מוסבר איך יוצרים תפקיד בהתאמה אישית.
יצירה והחלה של מדיניות נוספת של RBAC אם צריך
למשתמשים ולחשבונות שירות עם התפקיד cluster-admin ClusterRole יש את ההרשאות הנדרשות להרצת הפקודות attach, cp, exec ו-port-forward.
כדי להריץ את הפקודות, צריך לפחות את הכללים הבאים:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: stream-role
namespace: NAMESPACE # Specify the namespace
rules:
- apiGroups: ["*"]
resources: ["pods/exec", "pods/attach", "pods/portforward"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: stream-rolebinding
namespace: NAMESPACE # Specify the namespace
roleRef:
apiGroup: "rbac.authorization.k8s.io"
kind: Role
name: stream-role
subjects:
- kind: User
name: EMAIL # Specify the user that should have stream access
namespace: NAMESPACE # Specify the namespace
פתרון בעיות
אם נתקלתם בבעיות בהתחברות לאשכול דרך שער, אתם או האדמין שלכם יכולים לבדוק את הבעיות הנפוצות הבאות.
- לשרת אין סוג משאב: יכול להיות שתופיע הודעת השגיאה הזו כשהפקודה
kubectl get nsנכשלת. יכולות להיות כמה סיבות לשגיאה הזו. מריצים את הפקודותkubectlבמצב מפורט כדי לראות פרטים נוספים, לדוגמהkubectl get ns -v 10. - Cannot find active connections for cluster(project: 12345, membership: my-cluster): השגיאה הזו עשויה להופיע אם סוכן Connect מאבד את הקישוריות או לא מותקן בצורה תקינה (במקרה של אשכולות מחוץ ל- Google Cloud בלבד). כדי לפתור את הבעיה, צריך לוודא שמרחב השמות
gke-connectקיים באשכול. אם מרחב השמותgke-connectקיים באשכול, אפשר לעיין בדף פתרון בעיות בחיבור כדי לפתור את בעיות הקישוריות. - כתובת ה-URL המבוקשת לא נמצאה בשרת הזה: יכול להיות שהשגיאה הזו תוצג אם
kubeconfigמכיל כתובת שרת שגויה. מוודאים שמשתמשים בגרסה העדכנית ביותר של Google Cloud CLI ומנסים שוב ליצור את שערkubeconfig. אל תערכו את הקובץkubeconfigבאופן ידני, כי זה עלול לגרום לשגיאות לא צפויות. - לזהות המשתמש אין הרשאות מספיקות לשימוש ב-API של השער: כדי להשתמש ב-API, צריך להיות לכם תפקיד
roles/gkehub.gatewayAdminroles/gkehub.gatewayReaderאוroles/gkehub.gatewayEditor. פרטים נוספים זמינים במאמר הקצאת תפקידי IAM למשתמשים במדריך להגדרת שער. - לסוכן Connect אין הרשאה לשלוח את הבקשות של המשתמש: צריך לאפשר לסוכן Connect להעביר בקשות בשמכם. ההרשאה הזו מוגדרת באמצעות מדיניות התחזות באשכול. במדריך להגדרת שערים מוסבר איך להוסיף משתמש לתפקיד
gateway-impersonate. - לזהות המשתמש אין הרשאות RBAC מספיקות לביצוע הפעולה: כדי להריץ את הפעולות שבחרתם, אתם צריכים הרשאות מתאימות באשכול. במדריך להגדרת שערים מוסבר איך להוסיף משתמש ל-
ClusterRoleהמתאים. אפשר לעיין במאמר בנושא הגדרת הרשאות RBAC. - לזהות המשתמש אין מספיק הרשאות לביצוע הפעולה כשמשתמשים ב-קבוצות Google או בתמיכה של צד שלישי: במאמר איסוף יומנים של שירות הזהויות של GKE מוסבר איך לבדוק יומנים שקשורים לפרטי הזהות.
- הסוכן Connect לא תקין: כדאי לעיין בדף פתרון הבעיות של Connect כדי לוודא שהאשכול מחובר.
- לא נמצא קובץ הפעלה gke-gcloud-auth-plugin או לא נמצא ספק אימות בשם gcp: יכול להיות שהשגיאה הזו תוצג בגרסאות 1.26 ואילך של kubectl בגלל שינויים באימות kubectl החל מגרסה 1.26 של GKE. מתקינים את
gke-gcloud-auth-pluginומריצים מחדש אתgcloud container fleet memberships get-credentials MEMBERSHIP_NAMEעם הגרסה האחרונה של Google Cloud CLI. - החיבורים לשער נכשלים בגרסאות ישנות יותר של Google Cloud CLI: באשכולות GKE, סוכן Connect כבר לא נדרש כדי שהשער יפעל, ולכן הוא לא מותקן כברירת מחדל במהלך רישום החברות. בגרסאות קודמות של Google Cloud CLI (גרסה 399.0.0 ומטה), ההנחה היא שסוכן Connect קיים באשכול. ניסיון להשתמש בשער עם גרסאות קודמות עלול להיכשל באשכולות שרשומים בגרסה חדשה יותר של Google Cloud CLI. כדי לפתור את הבעיה, אפשר לשדרג את לקוח Google Cloud CLI לגרסה חדשה יותר או להריץ מחדש את פקודת הרישום עם הדגל
--install-connect-agent. - הגודל של הקבוצות שמוחזרות בקבוצה
gke-security-groupsחורג ממגבלת הגודל של כותרת HTTP, שהיא 8KB. ארגון מחדש של היררכיית הקבוצות וניסיון חוזר: אין הגבלה קשיחה על מספר הקבוצות, אבל שמות ארוכים של קבוצות עלולים לגרום לכך שהבקשה תחרוג מהגודל המקסימלי של כותרת HTTP (8 KB) ולגרום לשגיאות. במקרה כזה, יכול להיות שתצטרכו לשנות את המבנה של היררכיית הקבוצות.
פתרון בעיות ב-kubectl exec/cp/attach/port-forward
השגיאה שמוחזרת מהרצת הפקודה היא לרוב שגיאה כללית 400 Bad Request
שלא ברורה מספיק כדי לנפות את הבעיה. כדי לקבל הודעות שגיאה מפורטות יותר, צריך להשתמש בגרסה 1.32 ואילך של kubectl כדי להריץ את הפקודה עם רמת פירוט של 4 ומעלה, לדוגמה:
kubectl exec -v 4 ....
ביומנים שמוחזרים, מחפשים את היומן שמכיל את התגובות הבאות:
- לפקודה
kubectl exec/cp/attach:RemoteCommand fallback: - לפקודה
kubectl port-forward:fallback to secondary dialer from primary dialer err:
בקטע הבא מוסבר איך לפתור בעיות שקשורות לחלק מהודעות השגיאה הנפוצות שאולי תקבלו מהפקודה kubectl exec -v 4 ....
חסרות הרשאות IAM
אם הודעת השגיאה מכילה את generic::permission_denied: Permission'gkehub.gateway.stream' denied on resource, יכול להיות שלא קיבלתם את הרשאות ה-IAM הנדרשות להרצת הפקודה. כדי להשתמש בתכונה הזו, למשתמשים צריכה להיות הרשאת ה-IAM gkehub.gateway.stream, שכלולה כברירת מחדל בתפקיד roles/gkehub.gatewayAdmin. הוראות מפורטות זמינות בקטע בנושא הרשאות IAM.
חסרות הרשאות RBAC נדרשות
אם הודעת השגיאה מכילה את הערך ...generic::failed_precondition: failed to connect to the cluster's API Server with response (status=403 Forbidden..., זה מצביע על כך שחסרות לכם הרשאות RBAC. כדי להריץ את הפקודות האלה של kubectl, צריך להגדיר ב-cluster הרשאות RBAC.
מידע נוסף על הגדרת הרשאות RBAC הנדרשות זמין במאמר יצירה והחלה של מדיניות RBAC נוספת אם צריך.
הודעת שגיאה generic::resource_exhausted: Gateway's active_streams quota exhausted
יש מכסת הגבלה של 10 זרמים פעילים לכל פרויקט מארח של Fleet. ההגדרה הזו מופיעה במכסת connectgateway.googleapis.com/active_streams. איך רואים ומנהלים את המכסות?
הודעת השגיאה generic::failed_precondition: error encountered within the cluster
אם מופיעה השגיאה generic::failed_precondition: error encountered within
the cluster, צריך לבדוק את היומנים של Connect Agent באשכול כדי לזהות את הסיבה הבסיסית:
kubectl logs -n gke-connect -l app=gke-connect-agent --tail -1
היומן שצריך לחפש ב-Connect Agent הוא
failed to create the websocket connection....
הודעת השגיאה generic::failed_precondition: connection to Agent failed/terminated
אם השגיאה הזו מופיעה מיד כשמריצים את הפקודה, יש בעיה בחיבור של האשכול ל-Google. מידע נוסף זמין במדריך הכללי לפתרון בעיות.
אם השגיאה הזו מופיעה אחרי שהסשן פעיל במשך כ-20 עד 30 דקות, מדובר במגבלה צפויה מסיבות אבטחה. צריך ליצור מחדש את החיבור.
kubectl --raw פתרון בעיות
שימוש בנקודת קצה מקוצרת (כמו kubectl get --raw /version) עלול לגרום לשגיאה הבאה: Error from server (NotFound): the server could not find the requested resource. חובה לציין את כתובת השרת המלאה.
מאחזרים את נקודת הקצה מ-kubeconfig:
# e.g. https://connectgateway.googleapis.com/v1/projects/1234567/locations/global/gkeMemberships/my-membership
FULL_GATEWAY_ENDPOINT=$(kubectl config view --minify -o jsonpath='{.clusters[*].cluster.server}')
echo $FULL_GATEWAY_ENDPOINT
אחר כך משתמשים בנקודת הקצה בפקודה, למשל עם /version:
kubectl get --raw $FULL_GATEWAY_ENDPOINT/version
מה השלב הבא?
- במדריך שילוב עם Cloud Build יש דוגמה לשימוש בשער Connect כחלק מאוטומציית DevOps.