שימוש במדיניות Egress NAT להגדרת מיסוך כתובות IP באשכולות Autopilot

בדף הזה מוסבר איך להגדיר אשכולות שנוצרו במצב אוטומטי של Google Kubernetes Engine ‏ (GKE) כדי לבצע הסוואת כתובות IP באמצעות מדיניות NAT ליציאה.

מידע נוסף על הסתרת כתובות IP במצב GKE Standard זמין במאמר הגדרת סוכן להסתרת כתובות IP.

סקירה כללית

מדיניות ה-NAT לתעבורת נתונים יוצאת (egress) ב-GKE מאפשרת להגדיר את התנהגות ה-IP masquerade באשכולות Autopilot.

‫GKE תומך בשתי מדיניות NAT ליציאה שנוצרות באופן אוטומטי:

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

בדף הזה מוסבר איך לערוך ולפרוס מדיניות Egress NAT. אפשר לערוך את מדיניות ברירת המחדל או ליצור מדיניות Egress NAT. בדף הזה מוסבר גם איך למחוק מדיניות NAT ליציאה שנוצרה.

מידע נוסף על התנהגות המדיניות של Egress NAT זמין במאמר בנושא התנהגות של הסתרת תנועה באשכולות של Autopilot.

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

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

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
  • מוודאים שיש לכם אשכול Autopilot שפועלת בו גרסה 1.23.4-gke.1600 ואילך, או גרסה 1.22.7-gke.1500 ואילך. צריך להפעיל את GKE Dataplane V2 באשכול.

  • מוודאים שיש עומס עבודה שפועל באשכול. מידע נוסף זמין במאמר בנושא איך מבקשים משאבים.

בדיקת הסטטוס של מדיניות Egress NAT

אתם יכולים לבדוק אם באשכול שלכם מופעלת הגדרת משאב מותאם אישית (CRD) של מדיניות Egress NAT באמצעות הכלי Google Cloud CLI:

  1. מקבלים את פרטי הכניסה לאשכול:

    gcloud container clusters get-credentials CLUSTER-NAME
    

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

  2. בודקים אם מדיניות ה-NAT של תעבורת נתונים יוצאת (egress) פועלת:

    ‫
    kubectl get crds egressnatpolicies.networking.gke.io
    

    אם מדיניות NAT ליציאה פועלת, הפלט ייראה כך:

     NAME                                  CREATED AT
     egressnatpolicies.networking.gke.io   2022-03-16T21:05:43Z
    
  3. מקבלים את רשימת כללי המדיניות של NAT ליציאה שנוצרו:

    kubectl get egressnatpolicies
    

    הפלט אמור להיראות כך:

      NAME             AGE
      default          44h
      gke-bbfa6c0e-1   44h
    

עריכה של מדיניות ברירת המחדל הקיימת

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

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

  1. מקבלים את פרטי הכניסה לאשכול:

    gcloud container clusters get-credentials CLUSTER_NAME
    

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

  2. עורכים את מדיניות ברירת המחדל של Egress NAT:

    kubectl edit egressnatpolicies default
    
  3. להוסיף או להסיר יעדים באמצעות הפעולה NoSNAT כמאפיין cidr בפורמט CIDR:

      apiVersion: networking.gke.io/v1
      kind: EgressNATPolicy
      metadata:
        name: default
      spec:
        action: NoSNAT
        destinations:
        - cidr:  10.0.0.0/8
        - cidr:  172.16.0.0/12
        - cidr:  192.168.0.0/16
        - cidr:  240.0.0.0/4
        - cidr:  192.0.2.0/24
        - cidr:  198.51.100.0/24
        - cidr:  203.0.113.0/24
        - cidr:  100.64.0.0/10
        - cidr:  198.18.0.0/15
        - cidr:  192.0.0.0/24
        - cidr:  192.88.99.0/24
    

    כשמנות נשלחות ליעדים האלה, האשכול לא מסווה את כתובות ה-IP של מקורות ולא משנה את כתובות ה-IP של מקורות ה-Pod.

  4. כדי לוודא שהמדיניות שערכתם הופעלה, בודקים את האירועים ב-Kubernetes:

    kubectl get events
    

    הפלט אמור להיראות כך:

    LAST SEEN   TYPE     REASON           OBJECT                    MESSAGE
    13s         Normal   EnsuringPolicy   egressnatpolicy/default   Ensuring IP masquerade config for policy "default"
    

    יכול להיות שיעברו עד שלוש דקות עד שהשינויים ייכנסו לתוקף.

פריסת מדיניות חדשה של Egress NAT

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

כדי ליצור מדיניות חדשה של תעבורת נתונים יוצאת (egress) NAT שלא נכללת במדיניות ברירת המחדל, מבצעים את השלבים הבאים:

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

    kind: EgressNATPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: POLICY_NAME
    spec:
      action: NoSNAT
      destinations:
      - cidr: CIDR_1
      - cidr: CIDR_2
    

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

    • ‫POLICY_NAME: השם של המדיניות החדשה.
    • ‫CIDR_1 ו-CIDR_2: טווחי כתובות ה-IP בפורמט CIDR. כשמנות נשלחות ליעדים האלה, האשכול לא מסווה את כתובות ה-IP של מקורות ולא משנה את כתובות ה-IP של מקורות ה-Pod. אם אתם צריכים יותר משני CIDR, מוסיפים עוד רשומות לרשימה destinations באותו פורמט.
  2. פורסים את המדיניות החדשה:

    kubectl create -f egress_nat_policy.yaml
    
  3. כדי לוודא שהמדיניות נפרסה, בודקים את האירועים ב-Kubernetes:

    kubectl get events
    

    הפלט אמור להיראות כך:

    LAST SEEN   TYPE     REASON           OBJECT                              MESSAGE
    13s         Normal   EnsuringPolicy   egressnatpolicy/mypolicy            Ensuring IP masquerade config for policy "mypolicy"
    

מחיקת מדיניות Egress NAT

כדי למחוק לחלוטין מדיניות Egress NAT, מריצים את הפקודה הבאה:

kubectl delete egressnatpolicies POLICY_NAME

מחליפים את POLICY_NAME בשם המדיניות שרוצים למחוק.

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