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

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

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

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

ארכיטקטורה

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

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

ההגדרה 'הרשאות גישה ל-Intranode' פורסת את netd DaemonSet.

יתרונות

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

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

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

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

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

כללי חומת אש

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

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

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

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

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

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

אפשר ליצור אשכול עם הפעלת ההגדרה 'חשיפה בתוך הצומת' באמצעות ה-CLI של gcloud או מסוף 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. לוחצים על יצירה.

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

אפשר להפעיל את ההגדרה 'חשיפה בתוך הצומת' באשכול קיים באמצעות ה-CLI של gcloud או מסוף 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. לוחצים על שמירת השינויים.

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

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

אפשר להשבית את ההגדרה 'חשיפה בתוך הצומת' באשכול באמצעות ה-CLI של gcloud או מסוף 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. לוחצים על שמירת השינויים.

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

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

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

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

  1. הפעלת יומני תנועה ברשת המשנה שמוגדרת כברירת מחדל באזור us-central1.
  2. יוצרים אשכול עם צומת יחיד שבו מופעלת הרשאות הגישה בתוך הצומת באזור us-central1-a.
  3. יוצרים שני פודים באשכול.
  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
    

יצירת שני Pods

  1. יוצרים פוד.

    שומרים את המניפסט הבא בקובץ בשם 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.

    שומרים את המניפסט הבא בקובץ בשם 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
    

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