חלק מרכיבי הקוד הפתוח שכלולים כברירת מחדל באשכולות של Google Dataproc, כמו Apache Hadoop ו-Apache Spark, מספקים ממשקי אינטרנט. אפשר להשתמש בממשקים האלה כדי לנהל ולנטר משאבים ומתקנים של אשכולות, כמו מנהל המשאבים YARN, מערכת הקבצים המבוזרת של Hadoop (HDFS), MapReduce ו-Spark. Component Gateway מספק גישה מאובטחת לנקודות קצה באינטרנט עבור ברירת המחדל של Dataproc ורכיבים אופציונליים.
בקטעים הבאים מוסבר איך להפעיל גישה לממשקי אינטרנט של רכיבים בלי להסתמך על מנהרות SSH או על שינוי כללים של חומת אש כדי לאפשר תעבורה נכנסת. הפעולה הזו אפשרית באשכולות שנוצרו באמצעות גרסאות נתמכות של תמונות Dataproc.
לתשומת ליבכם
- למשתמשים צריכה להיות הרשאת dataproc.clusters.use לניהול זהויות והרשאות גישה (IAM) כדי לגשת לממשקי אינטרנט של רכיבים מופעלים. מידע נוסף על תפקידים ב-Dataproc
- אפשר להשתמש ב-Component Gateway כדי לגשת לממשקי REST API, כמו Apache Hadoop YARN ו-Apache Livy, וגם לשרתי היסטוריה.
- כששער הרכיבים מופעל, Dataproc מוסיף את השירותים הבאים לצומת הראשי הראשון של האשכול:
- Apache Knox. אישור ה-SSL של Knox Gateway שמוגדר כברירת מחדל תקף למשך 13 חודשים מתאריך היצירה של האשכול. אם התוקף שלו יפוג, כל כתובות ה-URL של ממשק האינטרנט של Component Gateway יהפכו ללא פעילות. כדי לקבל אישור חדש, אפשר לעיין במאמר בנושא יצירה מחדש של אישור SSL של Component Gateway.
- Inverting Proxy
- שער הרכיבים לא מאפשר גישה ישירה לממשקי
node:port, אלא מעביר באופן אוטומטי קבוצת משנה ספציפית של שירותים. אם רוצים לגשת לשירותים בצמתים (node:port), צריך להשתמש בשרת proxy של SSH SOCKS.
יצירת אשכול באמצעות Component Gateway
המסוף
ה-Component Gateway של Dataproc מופעל כברירת מחדל כשיוצרים אשכול באמצעות מסוף Google Cloud . כדי להשבית את ההגדרה הזו, מבטלים את הסימון בתיבת הסימון Enable component gateway (הפעלת Component Gateway) בקטע Components (רכיבים) בחלונית Set up cluster (הגדרת אשכול) בדף Create a Dataproc cluster on Compute Engine (יצירת אשכול Dataproc ב-Compute Engine).
פקודת 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 מופעל באשכול, אפשר להתחבר לממשקי אינטרנט של רכיבים שפועלים בצומת הראשי הראשון של האשכול על ידי לחיצה על קישורים שמופיעים במסוף Google Cloud . בנוסף, Component Gateway מגדיר את endpointConfig.httpPorts עם מיפוי של שמות יציאות לכתובות URL. כאפשרות חלופית לשימוש במסוף, אפשר להשתמש בכלי gcloud של שורת הפקודה או ב-Dataproc API בארכיטקטורת REST כדי להציג את פרטי המיפוי האלה, ואז להעתיק את כתובת ה-URL ולהדביק אותה בדפדפן כדי להתחבר לממשק המשתמש של הרכיב.
המסוף
עוברים לטופס Clusters (אשכולות) ב-Dataproc במסוף Google Cloud , ואז בוחרים את האשכול כדי לפתוח את הטופס Cluster details (פרטי האשכול). לוחצים על הכרטיסייה Web Interfaces (ממשקי אינטרנט) כדי להציג רשימה של קישורי Component Gateway לממשקי האינטרנט של רכיבי ברירת המחדל והרכיבים האופציונליים שהותקנו באשכול. לוחצים על קישור כדי לפתוח את ממשק האינטרנט שפועל בצומת הראשי של האשכול בדפדפן המקומי.
פקודת gcloud
מריצים את הפקודה של ה-CLI של gcloud gcloud dataproc clusters describe באופן מקומי בחלון טרמינל או ב-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 נחשבות כחלק מ-Dataproc API surface, וכל מדיניות גישה ששולטת בהרשאות ל-dataproc.googleapis.com תשלוט גם בגישה לממשקי המשתמש של Component Gateway.
Component Gateway תומך גם בהגדרות של VPC-SC שמסתמכות על קישוריות פרטית ל-Google לאשכולות Dataproc ללא כתובות IP חיצוניות, אבל צריך להגדיר את הרשת באופן ידני כדי לאפשר גישה מהמכונה הווירטואלית הראשית של Dataproc אל *.dataproc.cloud.google.com דרך טווח כתובות ה-IP הווירטואליות המוגבל של Google 199.36.153.4/30. לשם כך, צריך לבצע את הפעולות הבאות:
- פועלים לפי ההוראות להגדרת קישוריות פרטית ל-Google לכל ממשקי Google API.
- אפשר להגדיר DNS באמצעות Cloud DNS או להגדיר DNS באופן מקומי בצומת הראשי של Dataproc כדי לאפשר גישה אל
*.dataproc.cloud.google.com.
הגדרת 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 באופן מקומי בצומת הראשי של Dataproc באמצעות פעולת אתחול
אפשר להגדיר DNS באופן מקומי בצמתי מאסטר של Dataproc כדי לאפשר קישוריות פרטית אל 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-dataproc/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 שאפשר לגשת אליה מאשכול Dataproc.
יוצרים אשכול Dataproc עם פעולת אתחול זמנית ועם 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
Component Gateway הוא שרת proxy שמשולב בו Apache Knox. נקודות הקצה שנחשפות על ידי Apache Knox זמינות דרך https://component-gateway-base-url/component-path.
כדי לבצע אימות פרוגרמטי באמצעות Component Gateway, צריך להעביר את הכותרת Proxy-Authorization עם אסימון Bearer מסוג 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,
...
רכיב Gateway מסיר את הכותרת Proxy-Authorization לפני העברת הבקשות אל Apache Knox.
כדי למצוא את כתובת הבסיס של Component Gateway, מריצים את הפקודה:
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 Gateway שמוגדר כברירת מחדל ב-Component Gateway תקף ל:
5 שנים מתאריך היצירה של אשכול Dataproc באשכולות שנוצרו עם גרסאות התמונות 2.0.93, 2.1.41, 2.2.7 ואילך.
13 חודשים מתאריך היצירה של אשכול Dataproc באשכולות שנוצרו באמצעות גרסאות קודמות של תמונות.
אם תוקף האישור פג, כל כתובות ה-URL של ממשק האינטרנט של Component Gateway הופכות ללא פעילות.
אם הארגון שלכם סיפק את אישור ה-SSL, צריך לקבל אישור חדש מהארגון ואז להחליף את האישור הישן באישור החדש.
אם אתם משתמשים באישור SSL בחתימה עצמית שמוגדר כברירת מחדל, אתם צריכים לחדש אותו באופן הבא:
משתמשים ב-SSH כדי להתחבר לצומת הראשי של אשכול Dataproc עם הסיומת
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
המאמרים הבאים
- יוצרים אשכול עם רכיבי Dataproc.