ממשקי אינטרנט של אשכולות

חלק מרכיבי הליבה של קוד פתוח שנכללים באשכולות Dataproc, כמו Apache Hadoop ו-Apache Spark, מספקים ממשקי אינטרנט. אפשר להשתמש בממשקי הנתונים האלה כדי לנהל ולנטר את משאבי האשכול והמתקנים, כמו מנהל המשאבים של YARN, מערכת הקבצים המבוזרת של Hadoop ‏ (HDFS),‏ MapReduce ו-Spark. רכיבים או אפליקציות אחרים שמתקינים באשכול יכולים גם לספק ממשקי אינטרנט (לדוגמה, התקנה והפעלה של מחברת Jupyter באשכול Dataproc).

ממשקים זמינים

הממשקים הבאים זמינים בצומת הראשי של אשכול Dataproc (מחליפים את master-host-name בשם של הצומת הראשי).

ממשק משתמש באינטרנט יציאה כתובת URL
YARN ResourceManager 80881 http://master-host-name:8088
HDFS NameNode 98702,3 http://master-host-name:9870

1 באשכולות שמופעל בהם Kerberos, יציאת ממשק האינטרנט של YARN ResourceManager היא 8090, והיא פועלת ב-HTTPS.

2 באשכולות עם Kerberos, יציאת ממשק האינטרנט של HDFS Namenode היא 9871, והיא פועלת ב-HTTPS.

3 בגרסאות קודמות של Dataproc (לפני גרסה 1.2), היציאה של ממשק המשתמש באינטרנט של HDFS Namenode הייתה 50070.

ל-YARN ResourceManager יש קישורים לכל ממשקי האינטרנט של MapReduce ו-Spark Applications שפועלים כרגע או שהסתיימו, בעמודה Tracking UI (ממשק משתמש למעקב).

ממשקי REST API מותרים של YARN ResourceManager

כשיוצרים אשכול, Dataproc מגדיר את המאפיין yarn.resourcemanager.webapp.methods-allowedyarn-site.xml לערך GET,HEAD, שמגביל את ה-methods של HTTP שאפשר להפעיל בממשק המשתמש האינטרנטי של YARN מנהל המשאבים וב- API בארכיטקטורת REST ל-methods‏ GET ו-HEAD. הגדרת ברירת המחדל הזו גם משביתה את שליחת העבודות ואת השינויים באמצעות YARN API בארכיטקטורת REST.

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

דוגמה:

gcloud dataproc clusters create cluster-name \
    --properties=^#^yarn:yarn.resourcemanager.webapp.methods-allowed=GET,POST,DELETE \
    --region=region \

המלצה: אם מגדירים את המאפיין הזה כך שיאפשר שימוש בשיטות HTTP שאינן ברירת מחדל, חשוב להגדיר כללי חומת אש והגדרות אבטחה אחרות כדי להגביל את הגישה ליציאה 8088.

התחברות לממשקי אינטרנט

אפשר להתחבר לממשקי אינטרנט שפועלים באשכול Dataproc באמצעות שער הרכיבים של Dataproc, Cloud Shell של הפרויקט או כלי שורת הפקודה gcloud של Google Cloud CLI:

  • שער רכיבים: התחבר בלחיצה אחת ל-Hadoop, ל-Spark ולממשקי משתמש אחרים של רכיבים באינטרנט מהמסוף Google Cloud . מפעילים את Component Gateway כשיוצרים את האשכול.

  • ‫Cloud Shell: ב-Cloud Shell במסוף מותקנים מראש הפקודות והכלים של ה-CLI של gcloud, ויש בו תכונה של תצוגה מקדימה באינטרנט שמאפשרת להתחבר במהירות דרך מנהרת SSH ליציאת ממשק אינטרנט באשכול. Google Cloud עם זאת, חיבור לאשכול מ-Cloud Shell משתמש בהעברת יציאות מקומית, שפותחת חיבור רק ליציאה אחת בממשק האינטרנט של האשכול – צריך כמה פקודות כדי להתחבר לכמה יציאות. בנוסף, סשנים ב-Cloud Shell מסתיימים באופן אוטומטי אחרי תקופה של חוסר פעילות (30 דקות).

  • ‫Google Cloud CLI: הפקודה gcloud compute ssh עם העברת יציאות דינמית מאפשרת ליצור מנהרת SSH ולהריץ שרת proxy של SOCKS על גבי המנהרה. אחרי שמריצים את הפקודה הזו, צריך להגדיר את הדפדפן המקומי לשימוש ב-SOCKS proxy. שיטת החיבור הזו מאפשרת להתחבר לכמה יציאות בממשק האינטרנט של אשכול. האם אפשר להשתמש בהפניית יציאות מקומית במקום בשרת proxy מסוג SOCKS? לקבלת מידע נוסף.

הגדרת משתני פקודה נפוצים

כדי להקל על העתקה והרצה של דוגמאות לשורת פקודה במחשב המקומי או ב-Cloud Shell, מגדירים משתני פקודה gcloud dataproc. יכול להיות שיהיה צורך להגדיר משתנים נוספים עבור חלק מדוגמאות הפקודות שמוצגות בדף הזה.

‫Linux/mac/Shell

export PROJECT=project;export HOSTNAME=hostname;export ZONE=zone

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • מגדירים את PROJECT ל Google Cloud מזהה הפרויקט
  • מגדירים את HOSTNAME לשם של צומת הראשי באשכול Dataproc (השם הראשי מסתיים בסיומת -m)
  • מגדירים את ZONE לתחום של המכונות הווירטואליות באשכול Dataproc (לדוגמה, us-central1-b).

יצירת מנהרת SSH

פקודת gcloud

מריצים את הפקודה gcloud במחשב המקומי כדי להגדיר מנהרת SSH מיציאה פתוחה במחשב המקומי למכונת הניהול של האשכול, ומריצים שרת SOCKS proxy מקומי שמקשיב ליציאה.

לפני שמריצים את הפקודה, במחשב המקומי:

  1. הגדרת משתני פקודות בשימוש נפוץ
  2. מגדירים משתנה PORT ליציאה פתוחה במחשב המקומי. ‫Port 1080 הוא בחירה שרירותית אבל טיפוסית, כי סביר להניח שהוא פתוח.
    PORT=number
    

‫Linux/macOS

gcloud compute ssh ${HOSTNAME} \
    --project=${PROJECT} --zone=${ZONE}  -- \
    -D ${PORT} -N

Windows

gcloud compute ssh %HOSTNAME% ^
    --project=%PROJECT% --zone=%ZONE%  -- ^
    -D %PORT% -N

התו המפריד -- מאפשר להוסיף ארגומנטים של SSH לפקודה gcloud compute ssh, באופן הבא:

  • -Dspecifies dynamic application-level port forwarding.
  • -N instructs gcloud not to open a remote shell.

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

אם פקודת ה-SSH נכשלת ומופיעה הודעת השגיאה bind: Cannot assign requested address, סביר להניח שהיציאה המבוקשת נמצאת בשימוש. כדאי לנסות להריץ את הפקודה עם ערך אחר של משתנה PORT.

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

Cloud Shell

  1. פותחים את Google Cloud Cloud Shell.
  2. מריצים את הפקודה gcloud שבהמשך ב-Cloud Shell כדי להגדיר מנהרת SSH מיציאת תצוגה מקדימה של Cloud Shell ליציאת ממשק אינטרנט בצומת הראשי באשכול. לפני שמריצים את הפקודה, ב-Cloud Shell :

    1. הגדרת משתני פקודות בשימוש נפוץ
    2. מגדירים משתנה PORT1 ליציאת Cloud Shell בטווח היציאות 8080 עד 8084, ומגדירים משתנה PORT2 ליציאת ממשק האינטרנט בצומת הראשי באשכול Dataproc.
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    המפריד -- מאפשר להוסיף ארגומנטים של SSH לפקודה gcloud compute ssh, באופן הבא:

    • -4 מורה ל-SSH להשתמש רק ב-IPv4.
    • -N instructs gcloud not to open a remote shell.
    • -L ${PORT1}:${HOSTNAME}:${PORT2} מציין העברה ליציאה אחרת מקומית מ-Cloud Shell שצוין PORT1 לאשכול HOSTNAME:PORT2.

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

הגדרת הדפדפן

פקודת gcloud

מנהרת ה-SSH תומכת בהעברת תנועה באמצעות פרוקסי באמצעות פרוטוקול SOCKS. כדי להגדיר את הדפדפן לשימוש בשרת proxy, צריך להתחיל סשן חדש בדפדפן עם פרמטרים של שרת proxy. הנה דוגמה לשימוש בדפדפן Google Chrome. ‫HOSTNAME הוא השם של הצומת הראשי של האשכול (ראו הגדרת משתני פקודות נפוצים).

Linux

/usr/bin/google-chrome \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

macOS

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

Windows

"%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" ^
    --proxy-server="socks5://localhost:%PORT%" ^
    --user-data-dir="%Temp%\%HOSTNAME%"

בפקודה הזו נעשה שימוש בדגלים הבאים של דפדפן Chrome:

  • -proxy-server="socks5://localhost:1080" אומר ל-Chrome לשלוח את כל הבקשות לכתובות URL של http:// ושל https:// דרך שרת ה-proxy של SOCKS‏ localhost:${PORT}, באמצעות גרסה 5 של פרוטוקול SOCKS. ‫${PORT} הוא משתנה היציאה שהגדרתם במאמר בנושא יצירת מנהרת SSH. שמות המארחים של כתובות ה-URL מפוענחים על ידי שרת ה-Proxy, ולא באופן מקומי על ידי Chrome.
  • --user-data-dir=/tmp/${HOSTNAME} מאלץ את Chrome לפתוח חלון חדש שלא קשור לסשן קיים של Chrome. בלי הדגל הזה, יכול להיות ש-Chrome יפתח חלון חדש שמצורף להפעלה קיימת של Chrome, וידלג על ההגדרה --proxy-server. הערך שמוגדר עבור --user-data-dir יכול להיות כל נתיב שלא קיים.

Cloud Shell

כשמשתמשים ב-Cloud Shell, לא צריך להגדיר את הדפדפן המקומי. אחרי יצירת מנהרת SSH, משתמשים בתצוגה מקדימה באינטרנט של Cloud Shell כדי להתחבר לממשק של האשכול.

חיבור לממשק של האשכול

פקודת gcloud

אחרי שמגדירים את הדפדפן המקומי לשימוש ב-Proxy, אפשר לעבור לכתובת ה-URL של ממשק האינטרנט באשכול Dataproc (ראו ממשקים זמינים). כתובת ה-URL בדפדפן היא בפורמט ובתוכן הבאים: http://cluster-name-m:port (יציאת ממשק של אשכול)

Cloud Shell

לוחצים על הלחצן Web Preview (תצוגה מקדימה של אתר) של Cloud Shell web-preview-button, ואז בוחרים באחת מהאפשרויות הבאות:

  • ‫Preview on port 8080 (תצוגה מקדימה ביציאה 8080) או
  • ‫"Change port" (שינוי היציאה) והזנת מספר היציאה בתיבת הדו-שיח
בהתאם למספר PORT1 ב-Cloud Shell (יציאה 8080 עד 8084) שהעברתם לפקודה gcloud compute ssh ביצירת מנהרת SSH.

ייפתח חלון דפדפן שמתחבר ליציאת ממשק האינטרנט בצומת הראשי של האשכול.

שאלות נפוצות וטיפים לניפוי באגים

מה אם ממשק המשתמש לא מופיע בדפדפן?

אם אתם לא רואים את ממשקי המשתמש בדפדפן, יכולות להיות לכך שתי סיבות נפוצות:

  1. יש בעיה בחיבור לרשת, יכול להיות בגלל חומת אש. מריצים את הפקודה הבאה (אחרי הגדרת משתנים מקומיים) כדי לבדוק אם אפשר להתחבר באמצעות SSH למופע הראשי. אם לא מצליחים, סימן שיש בעיה בקישוריות.

    ‫Linux/macOS

    gcloud compute ssh ${HOSTNAME}-m \
        --project=${PROJECT}
    

    Windows

    gcloud compute ssh %HOSTNAME%-m ^
        --project=%PROJECT%
    

  2. פרוקסי אחר מפריע לפרוקסי SOCKS. כדי לבדוק את ה-proxy, מריצים את הפקודה הבאה של curl (זמינה ב-Linux וב-macOS):

    ‫Linux/macOS

    curl -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    

    Windows

    curl.exe -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    
    אם מוצגת תגובת HTTP, שרת ה-Proxy פועל, ולכן יכול להיות ששרת ה-Proxy מסוג SOCKS מופרע על ידי שרת Proxy אחר או תוסף לדפדפן.

האם אפשר להשתמש בהעברת יציאות מקומית במקום בשרת proxy מסוג SOCKS?

במקום פרוקסי SOCKS, אפשר לגשת לממשקי משתמש של אפליקציות אינטרנט שפועלות במכונת המאסטר באמצעות העברה ליציאה מקומית באמצעות SSH, שמעבירה את היציאה של המאסטר ליציאה מקומית. לדוגמה, הפקודה הבאה מאפשרת לכם לגשת אל localhost:1080 כדי להגיע אל cluster-name-m:8088 בלי SOCKS (ראו הגדרת משתני פקודה בשימוש נפוץ):

‫Linux/macOS

gcloud compute ssh ${HOSTNAME}-m \
    --project=${PROJECT} -- \
    -L 1080:${HOSTNAME}-m:8088 -N -n

Windows

gcloud compute ssh %HOSTNAME%-m ^
    --project=%PROJECT% -- ^
    -L 1080:%HOSTNAME%-m:8088 -N -n

יכול להיות שעדיף להשתמש ב-SOCKS proxy במקום בהעברת יציאות מקומית, כי ה-proxy:

  • מאפשרת לכם לגשת לכל היציאות של אפליקציות האינטרנט בלי שתצטרכו להגדיר מנהרת העברת יציאות לכל יציאת ממשק משתמש
  • מאפשר ל-UI של Spark ו-Hadoop באינטרנט לפתור נכון את מארחי ה-DNS