כדי לאבחן ולפתור כשלים באימות ובהרשאה ב-Google Distributed Cloud, אתם יכולים לבדוק את ההתקנה של gcloud anthos auth, את הטוקנים, את הרשאות ה-RBAC, את הקישוריות לרשת ואת ההגדרות של GKE Identity Service. הבדיקות האלה עוזרות לבודד שגיאות של OpenID Connect (OIDC) ושל Lightweight Directory Access Protocol (LDAP), ולשחזר את הגישה של המשתמשים לאשכולות.
לפני שאתם פותרים בעיות באימות, ודאו שהגדרתם ספק זהויות חיצוני, כמו Google OIDC, Microsoft AD FS, Microsoft Entra ID, Okta או ספק LDAP. כדי לבדוק יומני בקשות מפורטים ולבדוק את יכולת ההגעה (reachability) של הספק, אפשר לעיין במדריך לפתרון בעיות של ספק הזהויות ב-GKE Identity Service.
פתרון בעיות כלליות
הטיפים הבאים לפתרון בעיות יכולים לעזור לכם לפתור בעיות כלליות באימות ובאישור ב-Google Distributed Cloud. אם הבעיות האלה לא רלוונטיות או שיש לכם בעיות עם OIDC או LDAP, המשיכו לקטע בנושא פתרון בעיות ב-GKE Identity Service.
עדכון של gcloud anthos auth
כדי למנוע הרבה בעיות נפוצות, כדאי לוודא שהרכיבים של התקנת gcloud anthos auth מעודכנים.
יש שני חלקים שצריך לאמת. הלוגיקה של הפקודה gcloud anthos auth נמצאת ברכיב הליבה של Google Cloud CLI, ורכיב anthos-auth נארז בנפרד.
כדי לעדכן את Google Cloud CLI:
gcloud components updateכדי לעדכן את הרכיב
anthos-auth:gcloud components install anthos-auth
הגדרת הספק לא תקינה
אם ההגדרה של ספק הזהויות לא תקינה, אחרי שתלחצו על LOGIN יופיע מסך שגיאה מספק הזהויות. פועלים לפי ההוראות הספציפיות לספק כדי להגדיר נכון את הספק או את האשכול.
הגדרות אישיות לא תקינות
אם מסוף Google Cloud לא יכול לקרוא את הגדרת ה-OIDC מהאשכול, הלחצן LOGIN מושבת. כדי לפתור בעיות בהגדרת ה-OIDC של האשכול, עיינו בקטע פתרון בעיות ב-OIDC בהמשך המסמך.
הרשאות לא תקינות
אם השלמתם את תהליך האימות אבל אתם עדיין לא רואים את פרטי האשכול, ודאו שהענקתם את הרשאות ה-RBAC הנכונות לחשבון שבו השתמשתם עם OIDC. יכול להיות שזה חשבון שונה מהחשבון שמשמש אתכם כדי לגשת למסוף Google Cloud .
חסר טוקן רענון
הבעיה הבאה מתרחשת כששרת ההרשאות מבקש הסכמה, אבל פרמטר האימות הנדרש לא סופק.
Error: missing 'RefreshToken' field in 'OAuth2Token' in credentials struct
כדי לפתור את הבעיה, צריך להוסיף את prompt=consent לשדה authentication.oidc.extraParams במשאב ClientConfig. ואז ליצור מחדש את קובץ האימות של הלקוח.
פג התוקף של טוקן הרענון
הבעיה הבאה מתרחשת כשטוקן הרענון בקובץ kubeconfig פג:
Unable to connect to the server: Get {DISCOVERY_ENDPOINT}: x509:
certificate signed by unknown authority
כדי לפתור את הבעיה, מריצים שוב את הפקודה gcloud anthos auth login.
ההתחברות ל-gcloud anthos auth נכשלת עם proxyconnect tcp
הבעיה הזו מתרחשת כשיש שגיאה בהגדרות של משתני הסביבה https_proxy או HTTPS_PROXY. אם צוין https:// במשתני הסביבה, יכול להיות שספריות הלקוח של GoLang HTTP ייכשלו אם שרת ה-proxy מוגדר לטפל בחיבורי HTTPS באמצעות פרוטוקולים אחרים כמו SOCK5.
יכול להיות שתתקבל הודעת השגיאה הבאה:
proxyconnect tcp: tls: first record does not look like a TLS handshake
כדי לפתור את הבעיה, צריך לשנות את משתני הסביבה https_proxy ו-HTTPS_PROXY כך שלא יכללו את https:// prefix. ב-Windows, משנים את משתני הסביבה של המערכת. לדוגמה, משנים את הערך של משתנה הסביבה https_proxy מ-https://webproxy.example.com:8000 ל-webproxy.example.com:8000.
הגישה לאשכול נכשלת כשמשתמשים ב-kubeconfig שנוצר על ידי gcloud anthos auth login
הבעיה הזו מתרחשת כששרת ה-API של Kubernetes לא מצליח לאשר את המשתמש. זה יכול לקרות אם חסרים בקרות גישה מבוססות-תפקידים (RBAC) מתאימות או שהן שגויות, או אם יש שגיאה בהגדרת ה-OIDC של האשכול. יכול להיות שתוצג הודעת השגיאה הבאה:
Unauthorized
כדי לפתור את הבעיה, מבצעים את השלבים הבאים:
בקובץ kubeconfig שנוצר על ידי
gcloud anthos auth login, מעתיקים את הערך שלid-token.kind: Config ... users: - name: ... user: auth-provider: config: id-token: xxxxyyyyמתקינים את jwt-cli ומריצים:
jwt ID_TOKENמאמתים את הגדרות ה-OIDC.
המשאב
ClientConfigמכיל את השדותgroupו-username. השדות האלה משמשים להגדרת הדגלים--oidc-group-claimו---oidc-username-claimבשרת ה-API של Kubernetes. כשהאסימון מוצג לשרת ה-API, הוא מעביר אותו ל-GKE Identity Service, שמחזיר את ה-group-claimוה-username-claimשחולצו בחזרה לשרת ה-API. שרת ה-API משתמש בתגובה כדי לוודא שלקבוצה או למשתמש המתאימים יש את ההרשאות הנכונות.מוודאים שההצהרות שהוגדרו ל-
groupול-userבמשאבClientConfigקיימות בטוקן של מזהה.בודקים את בקרות הגישה מבוססות התפקידים (RBAC) שהוחלו.
מוודאים שיש RBAC עם ההרשאות הנכונות למשתמש שצוין ב-
username-claimאו לאחת מהקבוצות שמופיעות ב-group-claimמהשלב הקודם. השם של המשתמש או הקבוצה ב-RBAC צריך להתחיל ב-usernameprefixאו ב-groupprefixשצוינו במשאבClientConfig.אם
usernameprefixריק, ו-usernameהוא ערך שונה מ-email, ברירת המחדל של הקידומת היאissuerurl#. כדי להשבית את הקידומות של שמות המשתמשים, מגדירים אתusernameprefixלערך-.למידע נוסף על קידומות של משתמשים וקבוצות, קראו את המאמר אימות באמצעות OIDC.
משאב
ClientConfig:oidc: ... username: "unique_name" usernameprefix: "-" group: "group" groupprefix: "oidc:"טוקן של מזהה:
{ ... "email": "cluster-developer@example.com", "unique_name": "EXAMPLE\cluster-developer", "group": [ "Domain Users", "EXAMPLE\developers" ], ... }קישורי ה-RBAC הבאים מקצים לקבוצה ולמשתמש האלה את התפקיד
pod-readerבאשכול. שימו לב לקו הנטוי היחיד בשדה השם, במקום קו נטוי כפול:Group ClusterRoleBinding:
apiVersion: kind: ClusterRoleBinding metadata: name: example-binding subjects: - kind: Group name: "oidc:EXAMPLE\developers" apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: pod-reader apiGroup: rbac.authorization.k8s.ioClusterRoleBinding של המשתמש:
apiVersion: kind: ClusterRoleBinding metadata: name: example-binding subjects: - kind: User name: "EXAMPLE\cluster-developer" apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: pod-reader apiGroup: rbac.authorization.k8s.ioבודקים את יומני שרת ה-API של Kubernetes.
אם הפלאגין של OIDC שמוגדר בשרת ה-API של Kubernetes לא מופעל כמו שצריך, שרת ה-API מחזיר שגיאה מסוג
Unauthorizedכשמוצג לו הטוקן של המזהה. כדי לבדוק אם היו בעיות בפלאגין של OIDC בשרת ה-API, מריצים את הפקודה:kubectl logs statefulset/kube-apiserver -n USER_CLUSTER_NAME \ --kubeconfig ADMIN_CLUSTER_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
USER_CLUSTER_NAME: השם של אשכול המשתמשים שאתם רוצים לראות את היומנים שלו. -
ADMIN_CLUSTER_KUBECONFIG: קובץ ה-kubeconfig של אשכול האדמין.
-
הפקודה gkectl create-login-config לא מצליחה לקבל את clientconfig
הבעיה הזו מתרחשת כשקובץ ה-kubeconfig שמועבר אל gkectl create-login-config לא מיועד לאשכול משתמשים, או כשמשאב ClientConfig לא עלה במהלך יצירת האשכול.
Error getting clientconfig using KUBECONFIG
כדי לפתור את הבעיה, ודאו שיש לכם את קובץ ה-kubeconfig הנכון לאשכול המשתמשים. ואז בודקים אם המשאב ClientConfig נמצא באשכול:
kubectl get clientconfig default -n kube-public \
--kubeconfig USER_CLUSTER_KUBECONFIG
מחליפים את USER_CLUSTER_KUBECONFIG בנתיב לקובץ ה-kubeconfig של אשכול המשתמש.
הפקודה gkectl create-login-config נכשלת בגלל שם אשכול כפול
הבעיה הזו מתרחשת אם מנסים לכתוב נתוני הגדרות של פרטי כניסה שמכילים שם אשכול שכבר קיים בקובץ היעד. כל קובץ תצורה של התחברות חייב להכיל שמות ייחודיים של אשכולות.
error merging with file MERGE_FILE because MERGE_FILE contains a cluster with
the same name as the one read from KUBECONFIG. Please write to a new
output file
כדי לפתור את הבעיה, השתמשו בדגל --output כדי לציין קובץ יעד חדש.
אם לא תציינו את --output, נתוני ההגדרות של ההתחברות ייכתבו בקובץ בשם kubectl-anthos-config.yaml בספרייה הנוכחית.
פתרון בעיות ב-OIDC
אם אימות OIDC לא פועל ב-Google Distributed Cloud, בדרך כלל זה בגלל שמפרט ה-OIDC במשאב ClientConfig לא הוגדר כמו שצריך.
במשאב ClientConfig יש הוראות לבדיקת היומנים והמפרט של OIDC, כדי לעזור לזהות את הגורם לבעיה ב-OIDC.
במדריך לפתרון בעיות בספק הזהויות של GKE Identity Service מוסבר איך להפעיל ולבדוק את יומני הזהויות ולבדוק את הקישוריות. אחרי שמוודאים ש-GKE Identity Service פועל כמו שצריך או מזהים בעיה, בודקים את המידע הבא לפתרון בעיות ב-OIDC.
בדיקת מפרט ה-OIDC באשכול
פרטי ה-OIDC של האשכול מצוינים במשאב ClientConfig במרחב השמות kube-public.
משתמשים ב-
kubectl getכדי להדפיס את משאב ה-OIDC של אשכול המשתמשים:kubectl --kubeconfig KUBECONFIG -n kube-public get \ clientconfig.authentication.gke.io default -o yamlמחליפים את
KUBECONFIGבנתיב לקובץ ה-kubeconfig של אשכול המשתמשים.בודקים את ערכי השדות כדי לוודא שהמפרט מוגדר בצורה נכונה לספק ה-OIDC.
אם זיהיתם בעיה בהגדרות של המפרט, הגדירו מחדש את OIDC.
אם אתם לא מצליחים לזהות ולפתור את הבעיה בעצמכם, פנו לתמיכה של Google Cloud .
כדי לאבחן ולפתור בעיות ב-OIDC, צוות התמיכה שלGoogle Cloud צריך את היומנים של GKE Identity Service ואת המפרט של OIDC.
איך מוודאים שאימות OIDC מופעל
לפני שבודקים את אימות ה-OIDC, צריך לוודא שאימות ה-OIDC מופעל באשכול.
בודקים את היומנים של GKE Identity Service:
kubectl logs -l k8s-app=ais -n anthos-identity-serviceהפלט לדוגמה הבא מראה שאימות OIDC מופעל בצורה נכונה:
... I1011 22:14:21.684580 33 plugin_list.h:139] OIDC_AUTHENTICATION[0] started. ...אם אימות OIDC לא מופעל בצורה נכונה, מוצגות שגיאות כמו בדוגמה הבאה:
Failed to start the OIDC_AUTHENTICATION[0] authentication method with error:בודקים את השגיאות הספציפיות שדווחו ומנסים לתקן אותן.
בדיקת האימות של OIDC
כדי להשתמש בתכונה OIDC, צריך להשתמש בתחנת עבודה שבה ממשק המשתמש והדפדפן מופעלים. אי אפשר לבצע את השלבים האלה מסשן SSH מבוסס-טקסט. כדי לבדוק ש-OIDC פועל כמו שצריך באשכול:
- מורידים את Google Cloud CLI.
כדי ליצור את קובץ התצורה של ההתחברות, מריצים את הפקודה הבאה של
gcloud anthos create-login-config:gcloud anthos create-login-config \ --output user-login-config.yaml \ --kubeconfig KUBECONFIGמחליפים את
KUBECONFIGבנתיב לקובץ ה-kubeconfig של אשכול המשתמשים.כדי לאמת את המשתמש, מריצים את הפקודה הבאה:
gcloud anthos auth login --cluster CLUSTER_NAME \ --login-config user-login-config.yaml \ --kubeconfig AUTH_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
- CLUSTER_NAME בשם של אשכול המשתמשים שאליו רוצים להתחבר.
- AUTH_KUBECONFIG עם קובץ ה-kubeconfig החדש שצריך ליצור, שכולל את פרטי הכניסה לגישה לאשכול. למידע נוסף, קראו את המאמר אימות לאשכול.
דף הסכמה לכניסה אמור להיפתח בדפדפן האינטרנט שמוגדר כברירת מחדל בתחנת העבודה המקומית. צריך לספק פרטי אימות תקינים של משתמש בהודעת הכניסה הזו.
אחרי שתשלימו את שלב הכניסה הקודם, ייווצר קובץ kubeconfig בספרייה הנוכחית.
כדי לבדוק את קובץ ה-kubeconfig החדש שכולל את פרטי הכניסה שלכם, הציגו את הפודים באשכול המשתמש:
kubectl get pods --kubeconfig AUTH_KUBECONFIGמחליפים את AUTH_KUBECONFIG בנתיב לקובץ kubeconfig החדש שנוצר בשלב הקודם.
יכול להיות שתקבלו את הודעת השגיאה הבאה, שמראה שהאימות הצליח אבל לא הוקצו לחשבון אמצעי בקרת גישה מבוססי-תפקיד (RBAC):
Error from server (Forbidden): pods is forbidden: User "XXXX" cannot list resource "pods" in API group "" at the cluster scope
בדיקת יומני האימות של OIDC
אם אתם לא מצליחים לבצע אימות באמצעות OIDC, היומנים של GKE Identity Service מספקים את המידע הכי רלוונטי ושימושי לניפוי באגים בבעיה.
כדי להדפיס את יומני השירות של GKE Identity Service, משתמשים ב-
kubectl logs:kubectl --kubeconfig KUBECONFIG \ -n anthos-identity-service logs \ deployment/ais --all-containers=trueמחליפים את
KUBECONFIGבנתיב לקובץ ה-kubeconfig של אשכול המשתמשים.כדי לאבחן בעיות ב-OIDC, כדאי לבדוק אם יש שגיאות ביומנים.
לדוגמה, יכול להיות שבמשאב
ClientConfigיש שגיאת הקלדה בשדהissuerURL, כמוhtps://accounts.google.com(חסרtב-https). ביומנים של GKE Identity Service תופיע רשומה כמו בדוגמה הבאה:OIDC (htps://accounts.google.com) - Unable to fetch JWKs needed to validate OIDC ID token.אם זיהיתם בעיה בהגדרות ביומנים, הגדירו מחדש את OIDC ותקנו את הבעיות בהגדרות.
אם אתם לא מצליחים לזהות ולפתור את הבעיה בעצמכם, פנו לתמיכה של Google Cloud .
כדי לאבחן ולפתור בעיות ב-OIDC, צוות התמיכה שלGoogle Cloud צריך את יומני השירות של GKE Identity Service ואת מפרט ה-OIDC.
בעיות נפוצות ב-OIDC
אם נתקלתם בבעיות באימות OIDC, כדאי לעיין בבעיות הנפוצות הבאות. פועלים לפי ההנחיות לפתרון הבעיה.
אין נקודות קצה זמינות לשירות "ais"
כששומרים את המשאב ClientConfig, מוחזרת הודעת השגיאה הבאה:
Error from server (InternalError): Internal error occurred: failed calling webhook "clientconfigs.validation.com":
failed to call webhook: Post "https://ais.anthos-identity-service.svc:15000/admission?timeout=10s":
no endpoints available for service "ais"
השגיאה הזו נגרמת בגלל נקודת קצה לא תקינה של GKE Identity Service. ה-Pod של GKE Identity Service לא יכול להפעיל את ה-webhook לאימות.
כדי לוודא שה-Pod של GKE Identity Service לא תקין, מריצים את הפקודה הבאה:
kubectl get pods -n anthos-identity-service \ --kubeconfig KUBECONFIGמחליפים את
KUBECONFIGבנתיב לקובץ ה-kubeconfig של אשכול המשתמשים.הפלט לדוגמה הבא מציין ש-Pod של GKE Identity Service קורס:
NAME READY STATUS RESTARTS AGE ais-5949d879cd-flv9w 0/1 ImagePullBackOff 0 7m14sכדי להבין למה יש בעיה ב-Pod, בודקים את האירועים של ה-Pod:
kubectl describe pod -l k8s-app=ais \ -n anthos-identity-service \ --kubeconfig KUBECONFIGמחליפים את
KUBECONFIGבנתיב לקובץ ה-kubeconfig של אשכול המשתמשים.בפלט לדוגמה הבא מדווחת שגיאת הרשאה כשמושכים את קובץ האימג':
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 10m default-scheduler Successfully assigned anthos-identity-service/ais-5949d879cd-flv9w to pool-1-76bbbb8798-dknz5 Normal Pulling 8m23s (x4 over 10m) kubelet Pulling image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00" Warning Failed 8m21s (x4 over 10m) kubelet Failed to pull image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00": rpc error: code = Unknown desc = failed to pull and unpack image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00": failed to resolve reference "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00": pulling from host gcr.io failed with status code [manifests hybrid_identity_charon_20220808_2319_RC00]: 401 Unauthorized Warning Failed 8m21s (x4 over 10m) kubelet Error: ErrImagePull Warning Failed 8m10s (x6 over 9m59s) kubelet Error: ImagePullBackOff Normal BackOff 4m49s (x21 over 9m59s) kubelet Back-off pulling image "gcr.io/gke-on-prem-staging/ais:hybrid_identity_charon_20220808_2319_RC00"אם דוח אירועי ה-Pod מדווח על בעיה, המשיכו לפתור את הבעיות באזורים המושפעים. אם אתם צריכים עזרה נוספת, אתם יכולים לפנות לתמיכה של Google Cloud .
קריאת בייטים של תגובה מהשרת נכשלה
יכול להיות שתראו את השגיאות הבאות ביומנים של GKE Identity Service:
E0516 07:24:38.314681 65 oidc_client.cc:207] Failed fetching the Discovery URI
"https://oidc.idp.cloud.example.com/auth/idp/k8sIdp/.well-known/openid-configuration" with error:
Failed reading response bytes from server.
E0516 08:24:38.446504 65 oidc_client.cc:223] Failed to fetch the JWKs URI
"https://oidc.idp.cloud.example.com/auth/idp/k8sIdp/certs" with error:
Failed reading response bytes from server.
השגיאות האלה בחיבור לרשת יכולות להופיע ביומנים באחת מהדרכים הבאות:
מופיעות ביומן לעיתים רחוקות: סביר להניח ששגיאות שמופיעות לעיתים רחוקות הן לא הבעיה העיקרית, ויכול להיות שהן בעיות זמניות ברשת.
לפלאגין OIDC של GKE Identity Service יש תהליך דימון (daemon) לסנכרון תקופתי של כתובת ה-URL של מסמך Discovery של OIDC כל 5 שניות. אם החיבור לרשת לא יציב, יכול להיות שהבקשה הזו לייצוא נתונים תיכשל. כשלים מדי פעם לא משפיעים על אימות ה-OIDC. אפשר להשתמש מחדש בנתונים הקיימים במטמון.
אם אתם נתקלים בשגיאות ביומנים, המשיכו לשלבים הנוספים לפתרון בעיות.
מופיעות כל הזמן ביומן, או ש-GKE Identity Service לא מצליח להגיע לנקודת הקצה המוכרת: הבעיות הקבועות האלה מצביעות על בעיית קישוריות בין GKE Identity Service לבין ספק הזהויות של OIDC.
השלבים הבאים לפתרון בעיות יכולים לעזור לכם לאבחן את בעיות הקישוריות האלה:
- חשוב לוודא שחומת האש לא חוסמת את הבקשות היוצאות מ-GKE Identity Service.
- בודקים שהשרת של ספק הזהויות פועל כמו שצריך.
- מוודאים שכתובת ה-URL של מנפיק ה-OIDC במשאב
ClientConfigמוגדרת נכון. - אם הפעלתם את שדה ה-proxy במשאב
ClientConfig, בדקו את הסטטוס או את היומן של שרת ה-proxy של תעבורת הנתונים היוצאת. - בודקים את הקישוריות בין pod של GKE Identity Service לבין שרת ספק הזהויות של OIDC.
צריך להתחבר לשרת (אין הרשאה)
כשמנסים להיכנס באמצעות אימות OIDC, יכול להיות שתוצג הודעת השגיאה הבאה:
You must be logged in to the server (Unauthorized)
השגיאה הזו היא בעיית אימות כללית ב-Kubernetes, שלא מספקת מידע נוסף. עם זאת, השגיאה הזו מצביעה על בעיה בהגדרות.
כדי לזהות את הבעיה, עיינו בקטעים הקודמים: בדיקת מפרט ה-OIDC באשכול והגדרת המשאב ClientConfig.
הבקשה למאמת ה-webhook נכשלה
ביומנים של GKE Identity Service, יכול להיות שתופיע השגיאה הבאה:
E0810 09:58:02.820573 1 webhook.go:127] Failed to make webhook authenticator request:
error trying to reach service: net/http: TLS handshake timeout
השגיאה הזו מציינת ששרת ה-API לא מצליח ליצור חיבור עם Pod של GKE Identity Service.
כדי לבדוק אם אפשר להגיע לנקודת הקצה של GKE Identity Service מבחוץ, מריצים את הפקודה הבאה של
curl:curl -k -s -o /dev/null -w "%{http_code}" -X POST \ https://APISERVER_HOST/api/v1/namespaces/anthos-identity-service/services/https:ais:https/proxy/authenticate -d '{}'מחליפים את
APISERVER_HOSTבכתובת של שרת ה-API.התגובה הצפויה היא קוד סטטוס
HTTP 400. אם הזמן הקצוב לתפוגה של הבקשה חלף, צריך להפעיל מחדש את ה-Pod של GKE Identity Service. אם השגיאה נמשכת, סימן ששרת ה-HTTP של GKE Identity Service לא מצליח להתחיל לפעול. לקבלת עזרה נוספת, אפשר לפנות לתמיכה של Google Cloud .
כתובת ה-URL לכניסה לא נמצאה
הבעיה הבאה מתרחשת כשמסוף Google Cloud לא מצליח להגיע לספק הזהויות. ניסיון להיכנס לחשבון מופנה לדף עם השגיאה URL not found.
כדי לפתור את הבעיה, צריך לבצע את השלבים הבאים לפתרון בעיות. אחרי כל שלב, נסו להיכנס שוב לחשבון:
אם אי אפשר להגיע לספק הזהויות דרך האינטרנט הציבורי, צריך להפעיל את שרת ה-Proxy ל-HTTP של OIDC כדי להיכנס באמצעות מסוף Google Cloud . עורכים את המשאב המותאם אישית
ClientConfigומגדירים אתuseHTTPProxyלערךtrue:kubectl edit clientconfig default -n kube-public --kubeconfig USER_CLUSTER_KUBECONFIGמחליפים את
USER_CLUSTER_KUBECONFIGבנתיב לקובץ kubeconfig של אשכול המשתמש.אם ה-proxy ל-HTTP מופעל ועדיין מופיעה השגיאה הזו, יכול להיות שיש בעיה בהפעלת ה-proxy. צפייה ביומנים של שרת ה-proxy:
kubectl logs deployment/clientconfig-operator -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIGמחליפים את
USER_CLUSTER_KUBECONFIGבנתיב לקובץ kubeconfig של אשכול המשתמש.גם אם לספק הזהויות יש רשות אישורים (CA) מוכרת, צריך לספק ערך ל-
oidc.caPathבמשאב בהתאמה אישית שלClientConfigכדי ששרת ה-Proxy ל-HTTP יתחיל לפעול.אם שרת ההרשאות מבקש הסכמה, ולא כללתם את הפרמטרים
extraparamprompt=consent, ערכו את המשאב המותאם אישיתClientConfigוהוסיפו אתprompt=consentלפרמטרים שלextraparams:kubectl edit clientconfig default -n kube-public --kubeconfig USER_CLUSTER_KUBECONFIGמחליפים את
USER_CLUSTER_KUBECONFIGבנתיב לקובץ kubeconfig של אשכול המשתמש.אם הגדרות התצורה משתנות בשירות האחסון, יכול להיות שתצטרכו לצאת באופן מפורש מהסשנים הקיימים. במסוף Google Cloud , נכנסים לדף פרטי האשכול ולוחצים על Log out.
פתרון בעיות ב-LDAP
אם נתקלתם בבעיות באימות LDAP, ודאו שהגדרתם את הסביבה לפי אחד ממסמכי ההגדרות המתאימים:
אתם גם צריכים לוודא שאכלסתם את הסוד של חשבון השירות של LDAP והגדרתם את המשאב ClientConfig כדי להפעיל אימות LDAP.
במדריך לפתרון בעיות בספק הזהויות של GKE Identity Service מוסבר איך להפעיל ולבדוק את יומני הזהויות ולבדוק את הקישוריות. אחרי שמוודאים ש-GKE Identity Service פועל כצפוי או מזהים בעיה, בודקים את המידע הבא לפתרון בעיות ב-LDAP.
מוודאים שאימות LDAP מופעל
לפני שבודקים את אימות ה-LDAP, צריך לוודא שאימות ה-LDAP מופעל באשכול.
בודקים את היומנים של GKE Identity Service:
kubectl logs -l k8s-app=ais -n anthos-identity-serviceהפלט הבא לדוגמה מראה שאימות LDAP מופעל בצורה נכונה:
... I1012 00:14:11.282107 34 plugin_list.h:139] LDAP[0] started. ...אם אימות ה-LDAP לא מופעל כמו שצריך, יוצגו שגיאות כמו בדוגמה הבאה:
Failed to start the LDAP_AUTHENTICATION[0] authentication method with error:בודקים את השגיאות הספציפיות שדווחו ומנסים לתקן אותן.
בדיקת האימות באמצעות LDAP
כדי להשתמש בתכונת LDAP, צריך להשתמש בתחנת עבודה שבה ממשק המשתמש והדפדפן מופעלים. אי אפשר לבצע את השלבים האלה מסשן SSH מבוסס-טקסט. כדי לבדוק שאימות LDAP פועל כמו שצריך באשכול, מבצעים את השלבים הבאים:
- מורידים את Google Cloud CLI.
כדי ליצור את קובץ התצורה של ההתחברות, מריצים את הפקודה הבאה: gcloud anthos create-login-config
gcloud anthos create-login-config \ --output user-login-config.yaml \ --kubeconfig KUBECONFIGמחליפים את
KUBECONFIGבנתיב לקובץ ה-kubeconfig של אשכול המשתמשים.כדי לאמת את המשתמש, מריצים את הפקודה הבאה:
gcloud anthos auth login --cluster CLUSTER_NAME \ --login-config user-login-config.yaml \ --kubeconfig AUTH_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAMEבשם של אשכול המשתמשים שאליו רוצים להתחבר. -
AUTH_KUBECONFIGבקובץ kubeconfig החדש שרוצים ליצור, שכולל את פרטי הכניסה לגישה לאשכול. למידע נוסף, קראו את המאמר אימות לאשכול.
-
דף הסכמה לכניסה אמור להיפתח בדפדפן האינטרנט שמוגדר כברירת מחדל בתחנת העבודה המקומית. צריך לספק פרטי אימות תקינים של משתמש בהודעת הכניסה הזו.
אחרי שתשלימו את שלב הכניסה הקודם, ייווצר קובץ kubeconfig בספרייה הנוכחית.
כדי לבדוק את קובץ ה-kubeconfig החדש שכולל את פרטי הכניסה שלכם, הציגו את הפודים באשכול המשתמש:
kubectl get pods --kubeconfig AUTH_KUBECONFIGמחליפים את AUTH_KUBECONFIG בנתיב לקובץ ה-kubeconfig של אשכול המשתמש שנוצר בשלב הקודם.
Error from server (Forbidden): pods is forbidden: User "XXXX" cannot list resource "pods" in API group "" at the cluster scope
בעיות נפוצות ב-LDAP
אם נתקלתם בבעיות באימות LDAP, כדאי לעיין בבעיות הנפוצות הבאות. פועלים לפי ההנחיות לפתרון הבעיה.
המשתמשים לא יכולים לבצע אימות אם יש פסיקים בשם המקובל (CN) שלהם
כשמשתמשים ב-LDAP, יכולות להיות בעיות באימות של משתמשים אם ה-CN שלהם מכיל פסיק, כמו CN="a,b". אם מפעילים את יומן ניפוי הבאגים של GKE Identity Service, מופיעה הודעת השגיאה הבאה:
I0207 20:41:32.670377 30 authentication_plugin.cc:977] Unable to query groups from the LDAP server directory.example.com:636, using the LDAP service account
'CN=svc.anthos_dev,OU=ServiceAccount,DC=directory,DC=example,DC=com'.
Encountered the following error: Empty entries.
הבעיה הזו מתרחשת כי הפלאגין של LDAP ב-GKE Identity Service מוסיף תו בריחה כפול לפסיק. הבעיה הזו קורית רק בגרסאות Google Distributed Cloud 1.13 וגרסאות קודמות.
כדי לפתור את הבעיה, אתם יכולים לבצע אחת מהפעולות הבאות:
- לשדרג את האשכול לגרסה 1.13 ומעלה של Google Distributed Cloud.
- במקום להשתמש ב-CN, צריך לבחור
identifierAttributeאחר, כמוsAMAccountName. - מסירים את הפסיקים מתוך ה-CN בספריית ה-LDAP.
כשל באימות ב-Google Cloud CLI בגרסה 1.4.2
בגרסה 1.4.2 של Google Cloud CLI anthos-auth, יכול להיות שתופיע הודעת השגיאה הבאה כשמריצים את הפקודה gcloud anthos auth login:
Error: LDAP login failed: could not obtain an STS token: Post "https://127.0.0.1:15001/sts/v1beta/token":
failed to obtain an endpoint for deployment anthos-identity-service/ais: Unauthorized
ERROR: Configuring Anthos authentication failed
ביומן השירות של GKE Identity Service, מופיעה גם השגיאה הבאה:
I0728 12:43:01.980012 26 authentication_plugin.cc:79] Stopping STS authentication, unable to decrypt the STS token:
Decryption failed, no keys in the current key set could decrypt the payload.
כדי לפתור את השגיאה, מבצעים את השלבים הבאים:
בודקים אם משתמשים בגרסה 1.4.2 של Google Cloud CLI
anthos-auth:gcloud anthos auth versionבפלט לדוגמה הבא אפשר לראות שהגרסה היא 1.4.2:
Current Version: v1.4.2אם אתם משתמשים ב-Google Cloud CLI
anthos-authבגרסה 1.4.2, שדרגו לגרסה 1.4.3 ואילך.
בעיות נפוצות
בקטע הזה מפורטות בעיות אימות נפוצות ודרכים לפתור אותן.
אובדן הגישה לתחנת עבודה של אדמין בגלל שגיאה permission denied במפתח SSH
השגיאה הבאה מתרחשת כשמנסים להתחבר לתחנת עבודה אדמין ומקבלים הודעת "Permission denied" שדומה לדוגמה הבאה:
Authorized users only. All activity may be monitored and reported.
TARGET_MACHINE: Permission denied (publickey).
השגיאה הזו מתרחשת כשמשתמשים במפתח פרטי שגוי, או כשלא משתמשים במפתח, כשמתחברים לתחנת העבודה של האדמין באמצעות SSH.
כדי לפתור את הבעיה, צריך למצוא את מפתח ה-SSH הנכון ולהשתמש בו. אם אתם לא מוצאים את מפתח ה-SSH הנכון, אתם יכולים ליצור זוג מפתחות SSH חדש לתחנת העבודה של האדמין:
יוצרים מכונה וירטואלית זמנית לחילוץ. ה-VM הזה צריך להתחבר לאותם רשת ומאגר נתונים כמו ה-VM של תחנת העבודה הנוכחית של האדמין.
מכבים את ה-VM של תחנת העבודה של האדמין ואת ה-VM לחילוץ.
מחברים את דיסק הנתונים של ה-VM של תחנת הניהול ל-VM לחילוץ. דיסק הנתונים הוא בדרך כלל בנפח 512MB, אלא אם ציינתם גודל דיסק אחר בקובץ התצורה של תחנת העבודה של האדמין, שהוא נפרד מדיסק האתחול.
מפעילים את ה-VM לחילוץ.
מתחברים למכונה הווירטואלית לחילוץ באמצעות SSH.
במחשב המקומי, יוצרים זוג מפתחות SSH חדש.
במחשב המקומי, מעתיקים את המפתח הציבורי החדש של SSH ל-VM לחילוץ באמצעות הפקודה
ssh-copy-id:ssh-copy-id -i ~/.ssh/NEW_SSH_KEY ubuntu@RESCUE_VMמחליפים את מה שכתוב בשדות הבאים:
-
NEW_SSH_KEYבשם של מפתח ה-SSH החדש שיצרתם בשלב הקודם. -
RESCUE_VMמחליפים בכתובת ה-IP או ב-FQDN של המכונה הווירטואלית לחילוץ.
-
ב-VM החילוץ, טוענים את דיסק הנתונים:
sudo mkdir -p /mnt/ext-disk sudo mount DEVICE /mnt/ext-diskמחליפים את
DEVICEבמזהה הייחודי של הדיסק, למשל/dev/sdb1.ב-VM החילוץ, מעתיקים את המפתח הציבורי החדש של SSH לקובץ
authorized_keysבדיסק הנתונים שנטען מה-VM של תחנת הניהול.מציגים את התוכן של הקובץ
authorized_keysבמכונה הווירטואלית לחילוץ, שכולל את מפתח ציבורי SSH החדש שהועתק באמצעות הפקודהssh-copy-idבשלב הקודם:ls ~/.ssh/authorized_keysמעתיקים את הרשומה האחרונה של המפתח הציבורי SSH מהקובץ
authorized_keysוסוגרים את הקובץ.עורכים את הקובץ
authorized_keysבדיסק הנתונים שנטען מה-VM של תחנת העבודה של האדמין:vi /mnt/ext-disk/.ssh/authorized_keysמדביקים את התוכן של מפתח ציבורי SSH מהקובץ
authorized_keysשל ה-VM לחילוץ.שומרים וסוגרים את הקובץ
authorized_keysבדיסק הנתונים שנטען מה-VM של תחנת העבודה של האדמין.מוודאים שהקבצים ב-
/mnt/ext-disk/.ssh/כוללים את ההרשאות הנכונות:chown -R ubuntu /mnt/ext-disk/.ssh/* chmod -R 600 /mnt/ext-disk/.ssh/*יוצאים מחיבור ה-SSH למכונה הווירטואלית לחילוץ.
מכבים את ה-VM לחילוץ.
מנתקים את דיסק הנתונים מה-VM לחילוץ ומחברים אותו מחדש ל-VM של תחנת העבודה של האדמין.
מפעילים את תחנת העבודה של האדמין.
אחרי שה-VM פועל, מתחברים לתחנת העבודה של האדמין באמצעות SSH וזוג מפתחות ה-SSH החדש.
ssh -i ~/.ssh/NEW_SSH_KEY ubuntu@ADMIN_VMמחליפים את מה שכתוב בשדות הבאים:
-
NEW_SSH_KEYבשם של מפתח ה-SSH החדש שיצרתם בשלב קודם והעתקתם למכונה הווירטואלית של תחנת העבודה של האדמין. -
RESCUE_VMמחליפים בכתובת ה-IP או ב-FQDN של ה-VM של תחנת העבודה של האדמין.
מוודאים שאפשר להתחבר באמצעות SSH.
-
מוחקים את ה-VM לחילוץ.
המאמרים הבאים
אם אתם צריכים עזרה נוספת, תוכלו לפנות אל Cloud Customer Care.
במאמר קבלת תמיכה תוכלו לקרוא מידע נוסף על מקורות המידע לתמיכה, כולל: