פתרון בעיות בשרת LDAP

במסמך הזה מפורטת הדרכה לפתרון בעיות בשרת LDAP כשניגשים לאשכולות של חברי צי. המסמך הזה רלוונטי רק לסוגי אשכולות נתמכים.

בעיה בקישוריות

יכול להיות שתיתקלו בבעיות בחיבור כשאתם מנסים להתחבר לשרת LDAP. בעיית הקישוריות יכולה להתרחש גם אם האישור שמשמש לזיהוי שרת ה-LDAP לא תואם לאישור שמוזכר ב-ClientConfig.

הודעת השגיאה

ההודעות הבאות רלוונטיות לשגיאות שמתרחשות כשמריצים את הפקודה 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

פתרון

אפשר לפתור את הבעיות באחת מהדרכים הבאות:

  • אם האשכול לא יכול להתחבר לשרת ה-LDAP, צריך לבצע את הפעולות הבאות:
    • כדי לבדוק אם תעבורת רשת יכולה להגיע לשרת ה-LDAP (ספק הזהויות) מהאשכול, משתמשים בפקודה telnet, nc או בפקודה דומה כדי להתחבר לשרת ה-LDAP. כדי להתחבר לשרת LDAP, צריך להריץ את הפקודה בצומת או ב-Pod שבהם פועל ה-Pod של שירות הזהויות.
    • אם הפקודה מצליחה, ה-Pod של שירות הזהויות אמור להתחבר לשרת ה-LDAP.
    • אם הפקודה נכשלת, זה מצביע על בעיה בקישוריות לרשת. כדי לפתור את בעיית החיבור, צריך לבדוק את הגדרות הרשת או לפנות לאדמין של הרשת.
  • צריך לוודא שהאישור הציבורי בהגדרה בפורמט הנכון ושהוא תואם לשרת ה-LDAP במקרים הבאים:
    • אתם משתמשים ב-LDAP עם TLS.
    • אתם מבצעים אימות ל-LDAP באמצעות חשבון שירות. משתמשים באישור כדי לזהות את חשבון השירות בשרת ה-LDAP.

בעיית אימות

בעיית אימות מתרחשת באחד מהמקרים הבאים:

  • ההגדרות של ספק ה-LDAP מוגדרות בצורה שגויה ב-ClientConfig.
  • פרטי הכניסה של המשתמש שסיפקתם לא קיימים בשרת ה-LDAP.
  • השרת LDAP מושבת.

הודעת השגיאה

ההודעות הבאות רלוונטיות לשגיאות שמתרחשות כשמריצים את הפקודה 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

פתרון

אדמינים של אשכולות יכולים לבדוק את היומנים של ה-Pod של שירות הזהויות ולפתור את בעיות האימות בדרכים הבאות:

  • Can't contact LDAP server: מידע נוסף על פתרון הבעיה זמין במאמר בנושא בעיות בחיבור.
  • Attempting to bind as the LDAP service account: האשכול מנסה להתחבר לשרת LDAP באמצעות פרטי הכניסה של חשבון השירות שסופקו ב-ClientConfig. אם הודעת היומן הזו לא מופיעה, סימן שיש בעיה בקישוריות.
  • Successfully completed BIND as LDAP service account: האשכול יכול להתחבר לשרת LDAP ולהשתמש בחשבון השירות שלו לאימות משתמשים. אם הודעת היומן הזו לא מופיעה, סימן שיש בעיה בהגדרות.
  • Successfully found an entry for the user in the database: קיים ערך משתמש בשרת LDAP. המשמעות היא שהשדות baseDN,‏ filter ו-loginAttribute מוגדרים בצורה נכונה לאחזור משתמשים. ההודעה הזו מוצגת רק אם רמת הפירוט של הרישום גבוהה מרמת ברירת המחדל. מידע נוסף על הפעלת יומנים זמין במאמר הפעלת יומן ניפוי הבאגים.
  • Attempting to BIND as the user to verify their credentials: האשכול מנסה לאמת את פרטי הכניסה של המשתמש.
  • Successfully completed LDAP authentication: אימות המשתמש הצליח. אם הודעת היומן הזו לא מופיעה, סימן שפרטי הכניסה לא תקינים.

פג התוקף של טוקן האימות

למרות שהכניסה לחשבון הצליחה, יכול להיות שתיתקלו בבעיות שקשורות לטוקן אימות שתוקפו פג.

הודעת השגיאה

ERROR: You must be logged in to the server (Unauthorized)

פתרון

כדי לפתור את הבעיה, צריך להתחבר שוב לשרת.

בעיה בקשירת תפקיד RBAC למשתמש או לקבוצה

הבעיה הזו מתרחשת כשהאימות מצליח אבל ההרשאה נכשלת בגלל היעדר תפקידים של RBAC שמשויכים למשתמש או לקבוצה. לדוגמה, הבעיה הזו נמשכת כשמנסים להריץ את הפקודה kubectl get pods.

הודעת השגיאה

Error from server (Forbidden): <SERVICE or PODS> is forbidden: <MORE DETAILS>

פתרון

כדי לפתור את הבעיה:

  1. נכנסים לשרת ה-LDAP כדי לראות את הקבוצות של משתמש היעד.
  2. מוודאים שהתפקידים והקישורים לתפקידים ב-Kubernetes מוגדרים בצורה נכונה ושהם תואמים לערכים בספריית ה-LDAP. אדמין יכול לעזור לאמת את הקשרים בין התפקידים באמצעות התחזות למשתמש ב-Kubernetes.
  3. מעדכנים את הקשר בין התפקיד לקבוצה כך שהקבוצה של משתמש היעד מורשית לבצע את הפעולה הנדרשת.
  4. מוודאים שהערכים של baseDN ושל filter ו-identifierAttribute (אם יש) נכונים. האשכול משתמש בהגדרת הקבוצה מהשדות האלה כדי לשלוח שאילתה לכל הקבוצות שהמשתמש משתייך אליהן. אם baseDN ריק, לא מועברות קבוצות לשרת ה-API של Kubernetes. במקרה כזה, לא מתבצע רישום של הודעות ביומן. אם baseDN לא ריק, האשכול שולח שאילתה למסד הנתונים כדי לקבל את הקבוצות של המשתמש.
    • אם השאילתה מצליחה, הקבוצות מועברות לשרת Kubernetes API.
    • אם השאילתה לא מצליחה, הקבוצות לא מועברות לשרת Kubernetes API. במקרה כזה, צריך לתקן את ערכי ההגדרה של baseDN ו-filter לקבוצות.

המשתמש שייך לכמה קבוצות

הבעיה הזו מתרחשת כשמשתמש שייך לכמה קבוצות.

הודעת השגיאה

could not obtain an STS token: STS token exceeds allowed size limit. Possibility of too many groups associated with the credentials provided.

פתרון

כאדמינים של אשכול, אתם צריכים להגדיר את השדה filter ב-ClientConfig כדי לצמצם את מספר הקבוצות שמוחזרות על ידי השאילתה לשרת ה-LDAP.

בעיית תאימות של גרסה

הבעיה הזו מתרחשת כשאין התאמה בין גרסת רכיב שירות הזהויות לבין גרסת Google Cloud CLI שהותקנה.

הודעת השגיאה

  • unable to parse STS Token Response
  • could not obtain an STS token: JSON parse error: The request was malformed.
  • could not obtain an STS token: Grant type must confirm that the request is intended for a token exchange.
  • could not obtain an STS token: Requested token type must correspond to an access token.
  • could not obtain an STS token: Subject token type must be a valid token type supported for token exchange.

פתרון

צריך לשדרג את כלי gcloud ואת האשכול לגרסה העדכנית ביותר שזמינה.

קוד סטטוס 401: האימות נכשל

הבעיה הזו מתרחשת כששרת ה-API של Kubernetes לא מצליח לאמת את השירות ומחזיר את קוד השגיאה 401.

הודעת השגיאה

  • ERROR: LDAP login failed: STSToken() failed: could not obtain an STS token: Post "https://127.0.0.1:15001/sts/v1beta/token": DialContext() failed: podEndpoint() failed to obtain an endpoint for deployment anthos-identity-service/ais: Unauthorized

  • ERROR: Configuring Anthos authentication failed

פתרון

אפשר לפתור את הבעיה הזו באחת מהדרכים הבאות:

  • כדי לבדוק אם ה-Pod של שירות הזהויות נמצא במצב running, משתמשים בפקודה הבאה:
    kubectl get pods -l k8s-app=ais -n anthos-identity-service --kubeconfig USER_CLUSTER_KUBECONFIG
  • כדי לבדוק את הגדרת ה-LDAP ב-ClientConfig, משתמשים בפקודה הבאה:
    kubectl get clientconfig -n kube-public -o jsonpath='{.items[].spec.authentication[].ldap}' --kubeconfig USER_CLUSTER_KUBECONFIG
  • כדאי לעיין ביומנים כדי לקבל מידע מפורט על השגיאה. מידע נוסף על רישום ביומן זמין במאמר שימוש ברישום ביומן ובמעקב לרכיבי מערכת.