יצירה ושימוש ברשתות וירטואליות עבור VM Runtime ב-GDC

המסמך הזה מיועד לאדמינים של IT, לאופרטורים ולמומחי רשתות שמפעילים את Google Distributed Cloud. במאמר הזה מוסבר איך ליצור רשתות וירטואליות ולהשתמש בהן כדי לתמוך בעומסי עבודה של מכונות וירטואליות שמשתמשות ב-VM Runtime ב-GDC. כדי לקבל מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בתוכן, אפשר לעיין במאמר תפקידים נפוצים של משתמשי GKE ומשימות. Google Cloud

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

כדי להשלים את המסמך הזה, תצטרכו גישה למקורות המידע הבאים:

סקירה כללית על רשתות וירטואליות

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

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

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

רשת ברירת מחדל של פוד

לכל אשכול נוצרת כברירת מחדל קבוצת pod-network. אי אפשר לשנות את הרשת הזו. המסלולים ל-CIDR של הפוד ול-CIDR של השירות, והגדרת ה-DNS, מאוכלסים אוטומטית. הגדרת ה-DNS משתמשת באותם ערכים כמו האשכול.

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

ההגדרה הזו של pod-network מאפשרת לכם לבדוק את VM Runtime ב-GDC בלי שתצטרכו לבצע שלבים נוספים כדי ליצור רשתות וירטואליות משלכם. בהרבה מהמסמכים שלנו אנחנו משתמשים בערך ברירת המחדל pod-network כדי לפשט את הדוגמאות. הצרכים של עומסי העבודה של מכונת ה-VM יקבעו אם רשת ברירת המחדל pod-network מספיקה, או אם צריך ליצור רשתות וירטואליות משלכם ולהשתמש בהן.

קובץ המניפסט הבא ב-YAML מציג הגדרת דוגמה ל-pod-network. הערכים של routes,‏ DNS ושם הממשק מולאו על ידי האשכול:

  ​​apiVersion: networking.gke.io/v1
  kind: Network
  metadata:
    name: pod-network
  spec:
    routes:
    - to: 192.168.0.0/16
    - to: 10.96.0.0/12
    dnsConfig:
      nameservers:
      - 10.96.0.10

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

כדי לתמוך בעומסי עבודה של ייצור, צריך ליצור רשתות שתומכות בתכונות שאתם צריכים, כמו שימוש בשרת DHCP חיצוני או שימוש במזהה VLAN. הרשתות האלה מספקות קישוריות בשכבה 2 (L2) למכונות הווירטואליות.

שימוש בשרת DHCP חיצוני

‫VM Runtime ב-GDC לא מספק שרתי DHCP. צריך לציין כתובות IP למכונות וירטואליות באופן ידני או להגדיר שימוש בשרתי DHCP חיצוניים. כשמפעילים את השימוש בשרת DHCP חיצוני, אפשר לדלג על הגדרת DNS והגדרות שער אם הן מסופקות על ידי DHCP.

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

  1. יוצרים קובץ מניפסט Network, כמו use-dhcp-network.yaml, בעורך לבחירתכם:

    nano use-dhcp-network.yaml
    
  2. מעתיקים ומדביקים את מניפסט ה-YAML הבא:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    מחליפים את הערכים הבאים:

    • NETWORK_NAME: השם של הרשת.
    • INTERFACE_NAME: שם הממשק בצומת Google Distributed Cloud שאליו רוצים לצרף את הרשת. מציינים את השם של הממשק הפיזי בצומת שבו רוצים להשתמש. לכל הצמתים באשכול צריך להיות אותו שם ממשק.

    בNetwork קובץ המניפסט הזה, הערכים הבאים מוגדרים:

    • הערך של type הוא L2. עם ההגדרה הזו, עומסי עבודה יכולים לכלול רק צירוף של שכבה 2 לרשת הזו. זו הרשת היחידה type שאפשר ליצור ב-VM Runtime ב-GDC.
    • externalDHCP4 מוגדר ל-true. ההגדרה הזו מאפשרת DHCP חיצוני לרשת. שרת ה-DHCP החיצוני אחראי להקצאת כתובות IPv4, מסלולים, שער והגדרת DNS לעומסי עבודה שמחוברים לרשת הזו.
  3. שומרים וסוגרים את קובץ המניפסט Network בכלי העריכה.

  4. יוצרים את הרשת באמצעות kubectl:

    kubectl apply -f use-dhcp-network.yaml
    

הגדרה ידנית של הגדרות הרשת

‫VM Runtime ב-GDC לא מספק שרתי DHCP. צריך לציין כתובות IP למכונות וירטואליות באופן ידני או להגדיר שימוש בשרתי DHCP חיצוניים. אם מציינים כתובות IP באופן ידני, צריך להגדיר את הגדרות הרשת עבור DNS, נתיבים ושער ברירת מחדל.

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

  1. יוצרים Network מניפסט, כמו manual-network.yaml, בעורך לבחירתכם:

    nano manual-network.yaml
    
  2. מעתיקים ומדביקים את מניפסט ה-YAML הבא:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      routes:
      - to: "ROUTE_ADDRESS"
      gateway4: GATEWAY_ADDRESS
      dnsConfig:
        nameservers:
        - NAMESERVER_ADDRESS
    

    מחליפים את הערכים הבאים:

    • NETWORK_NAME: השם של הרשת.
    • INTERFACE_NAME: שם הממשק בצומת Google Distributed Cloud שאליו רוצים לצרף את הרשת. מציינים את השם של הממשק הפיזי בצומת שבו רוצים להשתמש. לכל הצמתים באשכול צריך להיות אותו שם ממשק.
    • ROUTE_ADDRESS: מסלולים אופציונליים בסימון CIDR להגדרה בכל מכונה וירטואלית שמתחברת לרשת הזו.
    • GATEWAY_ADDRESS: כתובת ה-IP של השער לשימוש במכונות הווירטואליות.
    • NAMESERVER_ADDRESS: כתובות ה-IP של שרת שמות DNS אחד או יותר לשימוש במכונות הווירטואליות.
  3. שומרים וסוגרים את קובץ המניפסט Network בכלי העריכה.

  4. יוצרים את הרשת באמצעות kubectl:

    kubectl apply -f manual-network.yaml
    

שימוש במזהה VLAN

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

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

  1. יוצרים Network מניפסט, כמו vlan-network.yaml, בעורך לבחירתכם:

    nano vlan-network.yaml
    
  2. מעתיקים ומדביקים את מניפסט ה-YAML הבא:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      networkLifecycle: AnthosManaged
      l2NetworkConfig:
        vlanID: VLAN_ID
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    מחליפים את הערכים הבאים:

    • NETWORK_NAME: השם של הרשת.
    • INTERFACE_NAME: שם הממשק בצומת Google Distributed Cloud שאליו רוצים לצרף את הרשת. מציינים את השם של הממשק הפיזי בצומת שבו רוצים להשתמש. לכל הצמתים באשכול צריך להיות אותו שם ממשק.
    • VLAN_ID: מזהה ה-VLAN שרוצים לתייג את התנועה שלו.

    בNetwork קובץ המניפסט הזה, הערכים הבאים מוגדרים:

    • עומסי עבודה יכולים לכלול רק L2 קבצים מצורפים לרשת הזו.
    • הרשת היא AnthosManaged. זוהי ברירת המחדל של מחזור החיים אם לא מציינים אחרת.
      • במצב הזה, לאשכול יש הרשאה ליצור ולמחוק את ממשק ה-VLAN בכל צומת, כמו INTERFACE_NAME.VLAN_ID.
      • אם רוצים ליצור את ממשקי ה-VLAN בצמתים, או אם כבר יצרתם אותם, צריך להגדיר את הערך networkLifecycle ל-UserManaged כמו שמוצג בקטע הבא.
    • ברשת מופעל DHCP חיצוני. שרת ה-DHCP החיצוני אחראי להקצאת כתובות IPv4, מסלולים, שער והגדרת DNS לעומסי עבודה שמחוברים לרשת הזו.
  3. שומרים וסוגרים את קובץ המניפסט Network בכלי העריכה.

  4. יוצרים את הרשת באמצעות kubectl:

    kubectl apply -f vlan-network.yaml
    

יצירת רשת שמנוהלת על ידי משתמש

בדוגמה הבאה של רשת וירטואלית, הרשת היא בניהול המשתמש, בניגוד לניהול על ידי Anthos בדוגמה הקודמת. ברשתות שמנוהלות על ידי המשתמש, אתם אחראים ליצירה או למחיקה של ממשק ה-VLAN במארח.

כדי ליצור רשת במצב ניהול על ידי המשתמש ולהגדיר ידנית את תצורת ממשק ה-VLAN, מבצעים את השלבים הבאים:

  1. יוצרים קובץ Network manifest, כמו user-managed-network.yaml, בכלי העריכה הרצוי:

    nano user-managed-network.yaml
    
  2. מעתיקים ומדביקים את הגדרת ה-YAML הבאה:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      networkLifecycle: UserManaged
      l2NetworkConfig:
        vlanID: VLAN_ID
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    מחליפים את הערכים הבאים:

    • NETWORK_NAME: השם של הרשת.
    • INTERFACE_NAME: ממשק המארח שאליו רוצים לצרף את הרשת.
    • VLAN_ID: מזהה ה-VLAN שרוצים לתייג את התנועה שלו.

    בNetwork קובץ המניפסט הזה, הערכים הבאים מוגדרים:

    • עומסי עבודה יכולים לכלול רק L2 קבצים מצורפים לרשת הזו.
    • הרשת היא UserManaged. צריך ליצור או למחוק את ממשק ה-VLAN VLAN_ID בכל צומת לפני יצירת הרשת או אחרי מחיקת הרשת.
    • ברשת מופעל DHCP חיצוני. שרת ה-DHCP החיצוני אחראי להקצאת כתובות IPv4, מסלולים, שער והגדרת DNS לעומסי עבודה שמחוברים לרשת הזו.
  3. שומרים וסוגרים את קובץ המניפסט Network בכלי העריכה.

  4. יוצרים את הרשת באמצעות kubectl:

    kubectl apply -f user-managed-network.yaml
    

חיבור מכונה וירטואלית לרשת

הגדרות הרשת של המכונה הווירטואלית, כמו DNS ו-DHCP, מוקצות באופן סטטי או דינמי, בהתאם לאופן שבו מוגדרות אפשרויות מסוימות של הגדרות הרשת:

  • אם מגדירים כתובת IP קבועה במכונה הווירטואלית, לא נשלחת שאילתה לשרת DHCP. מידע נוסף להגדרת השער והמסלול צריך להגיע ממשאב הרשת.
  • אם לא מגדירים כתובת IP קבועה במכונה הווירטואלית, נשלחת שאילתה לשרת DHCP. המכונה הווירטואלית מקבלת את כל המידע משרת ה-DHCP ומתעלמת מכל הגדרה שמגדירים במשאב הרשת.
  • אם לא מגדירים את DHCP חיצוני ל-true במשאב הרשת, צריך להגדיר כתובת IP סטטית למכונה הווירטואלית. כל שאר המידע מגיע מההגדרה שאתם מגדירים במשאב הרשת.

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

CLI

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

    kubectl virt create vm VM_NAME \
      --image ubuntu20.04 \
      --network NETWORK_NAME
    

    מחליפים את הערכים הבאים:

    • VM_NAME: השם של המכונה הווירטואלית.
    • NETWORK_NAME: השם של הרשת שאליה רוצים להתחבר.
      • אם הרשת מוגדרת כך שניתן להשתמש בשרתי DHCP חיצוניים, למכונה הווירטואלית מוקצית כתובת IP באופן אוטומטי. אם צריך להגדיר כתובת IP סטטית, מוסיפים את הפרמטר --ip IP_ADDRESS האופציונלי ואת הערך שלו.

מניפסט

כדי ליצור מכונה וירטואלית באמצעות מניפסט YAML:

  1. יוצרים VirtualMachine מניפסט, כמו my-vm.yaml, בעורך לבחירתכם:

    nano my-vm.yaml
    
  2. מעתיקים ומדביקים את מניפסט ה-YAML הבא:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
          ipAddresses:
            - IP_ADDRESS
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
    

    במניפסט ה-YAML הזה, מגדירים את ההגדרות הבאות:

    • VM_NAME: השם של המכונה הווירטואלית.
    • NETWORK_NAME: השם של הרשת שאליה רוצים להתחבר.
    • IP_ADDRESS: כתובת ה-IP בסימון CIDR שרוצים להקצות ל-VM, למשל 192.0.2.10/24.
      • אם הרשת שלכם מוגדרת כך שניתן להשתמש בשרתי DHCP חיצוניים, צריך להסיר את השדה הזה מהמניפסט VirtualMachine.

    דיסק האתחול בשם VM_NAME-boot-dv צריך כבר להתקיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.

  3. שומרים וסוגרים את קובץ המניפסט VirtualMachine בכלי העריכה.

  4. יוצרים את המכונה הווירטואלית באמצעות kubectl:

    kubectl apply -f my-vm.yaml
    

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