הגדרת הרשאות גישה בתוך הצומת

במדריך הזה נסביר איך להגדיר חשיפה בתוך הצומת באשכול Google Kubernetes Engine ‏ (GKE).

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

היכולת לראות את הצמתים מושבתת כברירת מחדל באשכולות רגילים ומופעלת כברירת מחדל באשכולות במצב Autopilot.

ארכיטקטורה

האפשרות 'חשיפה בתוך הצומת' עוזרת לוודא שמנות שנשלחות בין Pods מעובדות על ידי רשת ה-VPC. אחר כך רשת ה-VPC מחילה על החבילות האלה כללי חומת אש, מסלולים, יומני תעבורה והגדרות של רפליקציה של חבילות נתונים.

כש-Pod שולח מנה ל-Pod אחר באותו צומת, המנה יוצאת מהצומת ומעובדת על ידי הרשת Google Cloud . אחר כך החבילה נשלחת מיד בחזרה לאותו צומת ומועברת ל-Pod היעד.

ההגדרה 'הרשאות גישה בתוך הצומת' פורסת את netd DaemonSet.

יתרונות

היתרונות של נראות בתוך הצומת:

  • יומני זרימה מציגים את כל התנועה בין ה-Pods, כולל התנועה בין ה-Pods באותו הצומת.
  • יוצרים כללים של חומת אש שחלים על כל תעבורת הנתונים בין קבוצות ה-Pod, כולל תעבורת נתונים בין קבוצות Pod באותו צומת.
  • אפשר להשתמש ברפליקציה של חבילות נתונים כדי לשכפל את התעבורה, כולל התעבורה בין Pods באותו צומת, ולהעביר אותה לבדיקה.

דרישות ומגבלות

אלה הדרישות והמגבלות שחלות על חשיפה בתוך הצומת:

  • האשכול צריך להיות ב-GKE בגרסה 1.15 ואילך.
  • אין תמיכה בניראות בתוך הצומת במאגרי צמתים של Windows Server.
  • כדי למנוע בעיות בקישוריות, כשמשתמשים בדגל ip-masq-agent עם הגדרת חשיפה בתוך הצומת, רשימת nonMasqueradeCIDRs המותאמת אישית צריכה לכלול את טווחי כתובות ה-IP של הצומת וה-Pod של האשכול.

כללי חומת אש

כשמפעילים את האפשרות 'חשיפה בתוך הצומת', רשת ה-VPC מעבדת את כל המנות שנשלחות בין ה-Pods, כולל מנות שנשלחות בין Pods באותו צומת. כלומר, כללי חומת האש של VPC ומדיניות חומת האש ההיררכית חלים באופן עקבי על תקשורת בין פודים, ללא קשר למיקום הפוד.

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

לפני שמתחילים

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

  • מפעילים את ממשק Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

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

אפשר ליצור אשכול עם גישה לנתונים של צמתים באמצעות gcloud CLI או מסוף Google Cloud .

gcloud

כדי ליצור אשכול עם צומת יחיד שמופעלת בו חשיפה בין צמתים, משתמשים בדגל --enable-intra-node-visibility:

gcloud container clusters create CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-intra-node-visibility

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

  • CLUSTER_NAME: השם של האשכול החדש.
  • CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים.

המסוף

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

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. לוחצים על יצירה.

  3. מזינים את השם של האשכול.

  4. בתיבת הדו-שיח Configure cluster, לצד GKE Standard, לוחצים על Configure.

  5. מגדירים את האשכול לפי הצורך.

  6. בחלונית הניווט, בקטע Cluster, לוחצים על Networking.

  7. מסמנים את תיבת הסימון Enable intranode visibility (הפעלת חשיפה בתוך הצומת).

  8. לוחצים על יצירה.

הפעלת חשיפה של צמתים באשכול קיים

אפשר להפעיל את ההגדרה 'חשיפה בתוך הצומת' באשכול קיים באמצעות gcloud CLI או מסוף Google Cloud .

כשמפעילים את ההגדרה 'חשיפה בתוך הצומת' באשכול קיים, GKE מפעיל מחדש רכיבים במישור הבקרה ובצמתים של העובדים.

gcloud

כדי להפעיל את ההגדרה 'חשיפה בתוך הצומת' באשכול קיים, משתמשים בדגל --enable-intra-node-visibility:

gcloud container clusters update CLUSTER_NAME \
    --enable-intra-node-visibility

מחליפים את CLUSTER_NAME בשם האשכול.

המסוף

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

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. בקטע Networking, לוחצים על Edit intranode visibility (עריכת רמת החשיפה של צמתים פנימיים).

  4. מסמנים את תיבת הסימון Enable intranode visibility (הפעלת חשיפה בתוך הצומת).

  5. לוחצים על שמירת השינויים.

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

השבתה של הנראות בין הצמתים

אפשר להשבית את ההגדרה 'חשיפה בתוך הצומת' באשכול באמצעות gcloud CLI או מסוף Google Cloud .

כשמשביתים את ההגדרה 'חשיפה בתוך הצומת' באשכול קיים, GKE מפעיל מחדש רכיבים במישור הבקרה ובצמתי העובדים.

gcloud

כדי להשבית את החשיפה בתוך הצומת, משתמשים בדגל --no-enable-intra-node-visibility:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-intra-node-visibility

מחליפים את CLUSTER_NAME בשם האשכול.

המסוף

כדי להשבית את הנראות בין הצמתים, מבצעים את השלבים הבאים:

  1. עוברים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. בקטע Networking, לוחצים על Edit intranode visibility.

  4. מבטלים את הסימון של התיבה Enable intranode visibility (הפעלת חשיפה בתוך הצומת).

  5. לוחצים על שמירת השינויים.

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

תרגיל: בדיקת הנראות בין הצמתים

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

בשיעור הזה תבצעו את השלבים הבאים:

  1. מפעילים יומני תנועה עבור רשת המשנה שמוגדרת כברירת מחדל באזור us-central1.
  2. יוצרים אשכול עם צומת יחיד שבו מופעלת הרשאות הגישה בין הצמתים באזור us-central1-a.
  3. יוצרים שני Pod באשכול.
  4. שליחת בקשת HTTP מ-Pod אחד ל-Pod אחר.
  5. מעיינים ברשומה ביומן הזרימה של הבקשה מ-Pod ל-Pod.

הפעלת יומני זרימה

  1. הפעלת יומני תעבורה ברשת המשנה שמוגדרת כברירת מחדל:

    gcloud compute networks subnets update default \
        --region=us-central1 \
        --enable-flow-logs
    
  2. מוודאים שהאפשרות 'יומני תנועה' מופעלת ברשת המשנה שמוגדרת כברירת מחדל:

    gcloud compute networks subnets describe default \
        --region=us-central1
    

    הפלט יראה שהפעלתם את יומני התנועה, כמו בדוגמה הבאה:

    ...
    enableFlowLogs: true
    ...
    

יצירת אשכול

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

    gcloud container clusters create flow-log-test \
        --location=us-central1-a \
        --num-nodes=1 \
        --enable-intra-node-visibility
    
  2. מקבלים את פרטי הכניסה לאשכול:

    gcloud container clusters get-credentials flow-log-test \
        --location=us-central1-a
    

ליצור שני Pod

  1. יוצרים Pod.

    שומרים את המניפסט הבא בקובץ בשם pod-1.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-1
    spec:
      containers:
      - name: container-1
        image: google/cloud-sdk:slim
        command:
        - sh
        - -c
        - while true; do sleep 30; done
    
  2. מחילים את המניפסט על האשכול:

    kubectl apply -f pod-1.yaml
    
  3. יוצרים עוד פוד.

    שומרים את המניפסט הבא בקובץ בשם pod-2.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-2
    spec:
      containers:
      - name: container-2
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
    
  4. מחילים את המניפסט על האשכול:

    kubectl apply -f pod-2.yaml
    
  5. צפייה בתרמילים:

    kubectl get pod pod-1 pod-2 --output wide
    

    הפלט יציג את כתובות ה-IP של ה-Pods, כמו בדוגמה הבאה:

    NAME      READY     STATUS    RESTARTS   AGE       IP           ...
    pod-1     1/1       Running   0          1d        10.52.0.13   ...
    pod-2     1/1       Running   0          1d        10.52.0.14   ...
    

    שימו לב לכתובות ה-IP של pod-1 ו-pod-2.

שליחת בקשה

  1. מקבלים מעטפת לקונטיינר ב-pod-1:

    kubectl exec -it pod-1 -- sh
    
  2. במעטפת, שולחים בקשה אל pod-2:

    curl -s POD_2_IP_ADDRESS:8080
    

    מחליפים את POD_2_IP_ADDRESS בכתובת ה-IP של pod-2.

    הפלט מציג את התשובה מהמאגר שפועל ב-pod-2.

    Hello, world!
    Version: 2.0.0
    Hostname: pod-2
    
  3. מקלידים exit כדי לצאת מהמעטפת ולחזור לסביבת שורת הפקודה הראשית.

צפייה בערכים ביומן של רצף פעולות

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

gcloud logging read \
    'logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND jsonPayload.connection.src_ip="POD_1_IP_ADDRESS" AND jsonPayload.connection.dest_ip="POD_2_IP_ADDRESS"'

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

  • PROJECT_ID: מזהה הפרויקט.
  • POD_1_IP_ADDRESS: כתובת ה-IP של pod-1.
  • POD_2_IP_ADDRESS: כתובת ה-IP של pod-2.

הפלט מציג רשומה ביומן של תעבורת נתונים לבקשה מ-pod-1 אל pod-2. בדוגמה הזו, ל-pod-1 יש כתובת IP‏ 10.56.0.13, ול-pod-2 יש כתובת IP‏ 10.56.0.14.

...
jsonPayload:
  bytes_sent: '0'
  connection:
    dest_ip: 10.56.0.14
    dest_port: 8080
    protocol: 6
    src_ip: 10.56.0.13
    src_port: 35414
...

הסרת המשאבים

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

  1. מחיקת האשכול:

    gcloud container clusters delete -q flow-log-test
    
  2. משביתים את יומני התנועה ברשת המשנה שמוגדרת כברירת מחדל:

    gcloud compute networks subnets update default --no-enable-flow-logs
    

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