Managed Service for Apache Spark Component Gateway

שער הרכיבים מאפשר לכם לגשת באופן מאובטח לנקודות קצה (endpoints) באינטרנט בשביל רכיבי ברירת מחדל ורכיבים אופציונליים באשכולות של Google Managed Service for Apache Spark. אתם יכולים להשתמש בממשקי האינטרנט האלה כדי לנהל ולנטר את המשאבים והמתקנים של האשכול, כמו מנהל המשאבים של YARN, מערכת הקבצים המבוזרת של Hadoop‏ (HDFS),‏ MapReduce,‏ Apache Hadoop ו-Apache Spark.

באשכולות שנוצרו עם גרסאות תמונה נתמכות של Managed Service for Apache Spark, שער הרכיבים מספק גישה לממשקי האינטרנט של הרכיבים בלי צורך במנהרות SSH או בשינוי כללי חומת האש כדי לאפשר תנועה נכנסת.

לתשומת ליבכם

  • כדי לגשת לממשקי האינטרנט של הרכיבים שהופעלו, המשתמשים צריכים הרשאת dataproc.clusters.use לניהול זהויות והרשאות גישה (IAM). למידע נוסף, קראו את המאמר תפקידים ב-Managed Service for Apache Spark.
  • אפשר להשתמש בשער הרכיבים כדי לגשת לממשקי API בארכיטקטורת REST, כמו Apache Hadoop YARN ו-Apache Livy, ולשרתי היסטוריה.
  • כשמפעילים את שער הרכיבים, Managed Service for Apache Spark מוסיף את השירותים הבאים לצומת הראשי הראשון של האשכול:
  • שער הרכיבים לא מאפשר גישה ישירה לממשקי node:port, אלא משמש כשרת proxy לקבוצת משנה ספציפית של שירותים באופן אוטומטי. אם רוצים לגשת לשירותים בצמתים (node:port), צריך להשתמש בשרת proxy של SSH SOCKS.

יצירת אשכול עם Component Gateway

מסוףGoogle Cloud

ממשקי המשתמש של רכיבי Managed Service for Apache Spark (דרך שער הרכיבים) מופעלים כברירת מחדל כשיוצרים אשכול באמצעות מסוף Google Cloud . כדי להשבית את ההגדרה הזו, מבטלים את הסימון בתיבה הפעלת רכיבים בממשק המשתמש:

  1. פותחים את הדף Create cluster.
  2. לוחצים על הגדרות נוספות כדי להרחיב את הקטע.
  3. עורכים את Optional components.
  4. בחלונית שנפתחת, מסמנים את התיבה הפעלת רכיבים בממשק המשתמש או מבטלים את הסימון שלה.
  5. לוחצים על Save.

פקודת ה-CLI של gcloud

מריצים את הפקודה gcloud dataproc clusters create של ה-CLI של gcloud באופן מקומי בחלון הטרמינל או ב-Cloud Shell.

gcloud dataproc clusters create cluster-name \
    --enable-component-gateway \
    --region=region \
    other args ...

‫API בארכיטקטורת REST

מגדירים את המאפיין EndpointConfig.enableHttpPortAccess לערך true כחלק מבקשת clusters.create.

שימוש בכתובות URL של Component Gateway כדי לגשת לממשקי אינטרנט

כשהתכונה Component Gateway מופעלת באשכול, אפשר להתחבר לממשקי האינטרנט של הרכיבים שפועלים בצומת הראשי הראשון של האשכול, על ידי לחיצה על הקישורים שמופיעים במסוף Google Cloud . בנוסף, שער הרכיבים מגדיר את endpointConfig.httpPorts עם מיפוי של שמות היציאות לכתובות URL. במקום להשתמש במסוף, אתם יכולים להשתמש בכלי שורת הפקודה gcloud או ב-Dataproc API בארכיטקטורת REST כדי להציג את פרטי המיפוי, ואז להעתיק ולהדביק את כתובת ה-URL בדפדפן כדי להתחבר לממשק המשתמש של הרכיב.

המסוף

במסוף Google Cloud , נכנסים לטופס Clusters של Managed Service for Apache Spark ובוחרים את האשכול כדי לפתוח את הטופס Cluster details. לוחצים על הכרטיסייה Web Interfaces כדי להציג רשימה של קישורי Component Gateway לממשקי האינטרנט של רכיבי ברירת המחדל והרכיבים האופציונליים שמותקנים באשכול. לוחצים על קישור כדי לפתוח את ממשק האינטרנט שפועל בצומת הראשי של האשכול בדפדפן המקומי.

פקודת ה-CLI של gcloud

מריצים את הפקודה gcloud dataproc clusters describe של ה-CLI של gcloud באופן מקומי בחלון הטרמינל או ב-Cloud Shell.

gcloud dataproc clusters describe cluster-name \
    --region=region

פלט לדוגמה

...
config:
  endpointConfig:
    enableHttpPortAccess: true
    httpPorts:
      HDFS NameNode:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/hdfs/ MapReduce Job History:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/jobhistory/ Spark HistoryServer:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/sparkhistory/ YARN ResourceManager:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/yarn/ YARN Application Timeline:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/apphistory/ ...

‫API בארכיטקטורת REST

מפעילים את clusters.get כדי לקבל את המפה endpointConfig.httpPorts של שמות היציאות לכתובות ה-URL.

שימוש ב-Component Gateway עם VPC-SC

שער הרכיבים תומך ב-VPC Service Controls. כדי לאכוף את גבולות הגזרה לשירות, בקשות לממשקים דרך Component Gateway נחשבות כחלק מה-API של Dataproc, וכל מדיניות גישה ששולטת בהרשאות של dataproc.googleapis.com שולטת גם בגישה לממשקי המשתמש של Component Gateway.

שער הרכיבים תומך גם בהגדרות VPC-SC שמסתמכות על קישוריות פרטית ל-Google בשביל אשכולות Managed Service for Apache Spark בלי כתובות IP חיצוניות, אבל צריך להגדיר את הרשת באופן ידני כדי לאפשר גישה מהמכונה הווירטואלית הראשית של Managed Service for Apache Spark אל *.dataproc.cloud.google.com דרך טווח ה-IP הווירטואלי המוגבל של Google‏ 199.36.153.4/30. כדי לעשות את זה:

  1. פועלים לפי ההוראות להגדרת קישוריות פרטית ל-Google לכל ממשקי ה-API של Google.
  2. כדי לאפשר גישה אל *.dataproc.cloud.google.com, צריך להגדיר את ה-DNS באמצעות Cloud DNS או להגדיר את ה-DNS באופן מקומי בצומת הראשי של Managed Service for Apache Spark.

הגדרת DNS באמצעות Cloud DNS

יוצרים תחום DNS ב-Cloud DNS שממפה את תעבורת הנתונים שמיועדת ל-*.dataproc.cloud.google.com לטווח כתובות ה-IP הווירטואליות המוגבלות של Google API.

  1. יוצרים אזור פרטי מנוהל לרשת ה-VPC.

    gcloud dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --description=DESCRIPTION \
     --dns-name=dataproc.cloud.google.com \
     --project=PROJECT_ID
    
    • ‫ZONE_NAME הוא שם האזור שאתם יוצרים. לדוגמה, vpc. השם הזה ישמש בכל אחד מהשלבים הבאים.

    • ‫PROJECT_ID הוא מזהה הפרויקט שמארח את רשת ה-VPC.

    • ‫NETWORK_NAME הוא השם של רשת ה-VPC.

    • ‫DESCRIPTION הוא תיאור אופציונלי וקריא לאנשים של האזור המנוהל.

  2. מתחילים עסקה.

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ‫ZONE_NAME הוא שם האזור.
  3. מוסיפים רשומות DNS.

    gcloud dns record-sets transaction add --name=*.dataproc.cloud.google.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ‫ZONE_NAME הוא שם האזור.
    gcloud dns record-sets transaction add --name=dataproc.cloud.google.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ‫ZONE_NAME הוא שם האזור.
  4. מבצעים את העסקה.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
    
    • ‫ZONE_NAME הוא שם האזור.

    • ‫PROJECT_ID הוא מזהה הפרויקט שמארח את רשת ה-VPC.

הגדרת DNS באופן מקומי בצומת הראשי של Managed Service for Apache Spark באמצעות פעולת אתחול

אתם יכולים להגדיר DNS באופן מקומי בצומתי המאסטר של Managed Service for Apache Spark כדי לאפשר קישוריות פרטית אל dataproc.cloud.google.com. ההליך הזה מיועד לבדיקות ולפיתוח לטווח קצר. לא מומלץ להשתמש בו בעומסי עבודה בסביבת ייצור.

  1. העברת פעולת האתחול ל-Cloud Storage.

    cat <<EOF >component-gateway-vpc-sc-dns-init-action.sh
    #!/bin/bash
    readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)"
    
    if [[ "${ROLE}" == 'Master' ]]; then
      readonly PROXY_ENDPOINT=$(grep "^dataproc.proxy.agent.endpoint=" \
        "/etc/google-managed-spark/dataproc.properties" | \
        tail -n 1 | cut -d '=' -f 2- | sed -r 's/\\([#!=:])/\1/g')
    
      readonly HOSTNAME=$(echo ${PROXY_ENDPOINT} | \
        sed -n -E 's;^https://([^/?#]*).*;\1;p')
    
      echo "199.36.153.4 ${HOSTNAME}  # Component Gateway VPC-SC" >> "/etc/hosts"
    fi
    EOF
    
    gcloud storage cp component-gateway-vpc-sc-dns-init-action.sh gs://BUCKET/
    
    • ‫BUCKET היא קטגוריה של Cloud Storage שאפשר לגשת אליה מהאשכול של Managed Service for Apache Spark.
  2. יוצרים אשכול Managed Service for Apache Spark עם פעולת האתחול בשלבים ועם Component Gateway מופעל.

    gcloud dataproc clusters create cluster-name \
        --region=region \
        --initialization-actions=gs://BUCKET/component-gateway-vpc-sc-dns-init-action.sh \
        --enable-component-gateway \
        other args ...
    
    • ‫BUCKET היא הקטגוריה של Cloud Storage שבה השתמשתם בשלב 1.

שימוש פרוגרמטי בממשקי HTTP API דרך Component Gateway

שער הרכיבים הוא שרת proxy שמשלב את Apache Knox. נקודות הקצה שחשופות על ידי Apache Knox זמינות דרך https://component-gateway-base-url/component-path.

כדי לבצע אימות באופן פרוגרמטי באמצעות Component Gateway, מעבירים את הכותרת Proxy-Authorization עם טוקן למוכ"ז OAuth 2.0.

$ ACCESS_TOKEN="$(gcloud auth print-access-token)"
$ curl -H "Proxy-Authorization: Bearer ${ACCESS_TOKEN}" "https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/jmx"
{
  "beans" : [ {
    "name" : "Hadoop:service=ResourceManager,name=RpcActivityForPort8031",
    "modelerType" : "RpcActivityForPort8031",
    "tag.port" : "8031",
    "tag.Context" : "rpc",
    "tag.NumOpenConnectionsPerUser" : "{\"yarn\":2}",
    "tag.Hostname" : "demo-cluster-m",
    "ReceivedBytes" : 1928581096,
    "SentBytes" : 316939850,
    "RpcQueueTimeNumOps" : 7230574,
    "RpcQueueTimeAvgTime" : 0.09090909090909091,
    "RpcProcessingTimeNumOps" : 7230574,
    "RpcProcessingTimeAvgTime" : 0.045454545454545456,
...

שער הרכיבים מסיר את הכותרת Proxy-Authorization לפני העברת הבקשות ל-Apache Knox.

כדי למצוא את כתובת ה-URL הבסיסית של שער הרכיבים, מריצים את הפקודה: gcloud dataproc clusters describe:

$ gcloud dataproc clusters describe <var>cluster-name</var> &#92;
    &nbsp;&nbsp;&nbsp;&nbsp;--region=<var>region</var>
...
  endpointConfig:
    enableHttpPortAccess: true
    httpPorts:
      HDFS NameNode: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/hdfs/dfshealth.html
      MapReduce Job History: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/jobhistory/
      Spark History Server: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/sparkhistory/
      Tez: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/tez-ui/
      YARN Application Timeline: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/
      YARN ResourceManager: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/

...

כתובת ה-URL הבסיסית היא החלקים של הסכימה והרשות של כתובות ה-URL בקטע httpPorts. בדוגמה הזו, זה https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/.

יצירה מחדש של אישור ה-SSL של Component Gateway

אישור ה-SSL של שער Knox שמוגדר כברירת מחדל בשער הרכיבים תקף למשך:

  • ‫5 שנים מתאריך היצירה של אשכול Managed Service for Apache Spark, באשכולות שנוצרו עם גרסאות אימג' 2.0.93,‏ 2.1.41,‏ 2.2.7 ואילך.

  • ‫13 חודשים מתאריך היצירה של אשכול Managed Service for Apache Spark באשכולות שנוצרו באמצעות גרסאות קודמות של קובצי אימג'.

אם פג התוקף של האישור, כל כתובות ה-URL של ממשק האינטרנט של Component Gateway הופכות ללא פעילות.

אם הארגון סיפק את אישור ה-SSL, צריך לקבל אישור חדש מהארגון ולהחליף את האישור הישן באישור החדש.

אם אתם משתמשים באישור SSL שמוגדר כברירת מחדל בחתימה עצמית, אתם יכולים לחדש אותו באופן הבא:

  1. משתמשים ב-SSH כדי להתחבר לצומת הראשי של אשכול Managed Service for Apache Spark עם הסיומת m-0.

  2. מאתרים את gateway.jks בנתיב /var/lib/knox/security/keystores/gateway.jks.

    keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
    
  3. מעבירים את הקובץ gateway.jks לספריית גיבוי.

    mv /var/lib/knox/security/keystores/gateway.jks /tmp/backup/gateway.jks
    
  4. כדי ליצור אישור חדש בחתימה עצמית, צריך להפעיל מחדש את שירות Knox.

    systemctl restart knox
    
  5. בודקים את הסטטוס של Component Gateway ו-Knox.

    systemctl status google-dataproc-component-gateway
    systemctl status knox
    

המאמרים הבאים