שער הרכיבים מאפשר לכם לגשת באופן מאובטח לנקודות קצה (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 מוסיף את השירותים הבאים לצומת הראשי הראשון של האשכול:
- Apache Knox. אישור ה-SSL של Knox Gateway שמוגדר כברירת מחדל תקף ל-13 חודשים מתאריך היצירה של האשכול. אם הוא יפוג, כל כתובות ה-URL של ממשק האינטרנט של Component Gateway יהפכו ללא פעילות. כדי לקבל אישור חדש, קראו את המאמר יצירה מחדש של אישור ה-SSL של Component Gateway.
- Inverting Proxy
- שער הרכיבים לא מאפשר גישה ישירה לממשקי
node:port, אלא משמש כשרת proxy לקבוצת משנה ספציפית של שירותים באופן אוטומטי. אם רוצים לגשת לשירותים בצמתים (node:port), צריך להשתמש בשרת proxy של SSH SOCKS.
יצירת אשכול עם Component Gateway
מסוףGoogle Cloud
ממשקי המשתמש של רכיבי Managed Service for Apache Spark (דרך שער הרכיבים) מופעלים כברירת מחדל כשיוצרים אשכול באמצעות מסוף Google Cloud . כדי להשבית את ההגדרה הזו, מבטלים את הסימון בתיבה הפעלת רכיבים בממשק המשתמש:
- פותחים את הדף Create cluster.
- לוחצים על הגדרות נוספות כדי להרחיב את הקטע.
- עורכים את Optional components.
- בחלונית שנפתחת, מסמנים את התיבה הפעלת רכיבים בממשק המשתמש או מבטלים את הסימון שלה.
- לוחצים על 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. כדי לעשות את זה:
- פועלים לפי ההוראות להגדרת קישוריות פרטית ל-Google לכל ממשקי ה-API של Google.
- כדי לאפשר גישה אל
*.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.
יוצרים אזור פרטי מנוהל לרשת ה-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 הוא תיאור אופציונלי וקריא לאנשים של האזור המנוהל.
מתחילים עסקה.
gcloud dns record-sets transaction start --zone=ZONE_NAME
- ZONE_NAME הוא שם האזור.
מוסיפים רשומות 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 הוא שם האזור.
מבצעים את העסקה.
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. ההליך הזה מיועד לבדיקות ולפיתוח לטווח קצר. לא מומלץ להשתמש בו בעומסי עבודה בסביבת ייצור.
העברת פעולת האתחול ל-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.
יוצרים אשכול 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> \
--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 שמוגדר כברירת מחדל בחתימה עצמית, אתם יכולים לחדש אותו באופן הבא:
משתמשים ב-SSH כדי להתחבר לצומת הראשי של אשכול Managed Service for Apache Spark עם הסיומת
m-0.מאתרים את
gateway.jksבנתיב/var/lib/knox/security/keystores/gateway.jks.keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
מעבירים את הקובץ
gateway.jksלספריית גיבוי.mv /var/lib/knox/security/keystores/gateway.jks /tmp/backup/gateway.jks
כדי ליצור אישור חדש בחתימה עצמית, צריך להפעיל מחדש את שירות Knox.
systemctl restart knox
בודקים את הסטטוס של Component Gateway ו-Knox.
systemctl status google-dataproc-component-gateway systemctl status knox
המאמרים הבאים
- יוצרים אשכול עם רכיבי Managed Service for Apache Spark.