יצירת מכונות וירטואליות עם מספר ממשקי רשת
בדף הזה מוסבר איך ליצור מכונות וירטואליות עם כמה ממשקי רשת.
לפני שמתחילים
לפני שמתחילים, חשוב להכיר את המאפיינים של מופעים עם כמה ממשקי רשת, כפי שמתואר במאמר סקירה כללית על כמה ממשקי רשת.
תפקידי IAM
כדי ליצור מופע עם כמה ממשקי רשת, צריך להיות לכם אחד מהתפקידים הבאים:
- התפקיד 'בעלי הפרויקט' או 'עריכה בפרויקט'
- התפקיד אדמין מכונות של Compute (v1) (
roles/compute.instanceAdmin.v1)
יצירה ומחיקה של מכונות ותבניות של הגדרות מכונה עם כמה ממשקים בפרויקט שלא משתמש בסביבת VPC משותפת: משתמש עם התפקיד 'בעלים', 'עריכה' או 'אדמין מכונות של Compute' (גרסה 1) יכול ליצור מכונה עם כמה ממשקים שמשויכים לרשתות VPC ולרשתות משנה שמהוות חלק מאותו פרויקט.
יצירה ומחיקה של מופעים ותבניות של מופעים עם כמה ממשקים בסביבות של VPC משותף:
משתמש עם התפקיד 'בעלים', 'עורך' או 'אדמין מכונות של Compute' (גרסה 1) יכול ליצור מופע עם כמה ממשקים. אם אחד מהממשקים מצורף לתת-רשת בפרויקט מארח של VPC משותף, צריך גם לקבל את התפקיד Compute Network User (roles/compute.networkUser) לכל הפרויקט המארח או לתת-הרשתות שבהן רוצים להשתמש.
מידע נוסף על הרשאות זמין במסמכי התיעוד של Compute Engine IAM.
יצירת מכונות וירטואליות עם כמה ממשקי רשת
בקטע הזה נסביר איך ליצור מכונה עם כמה ממשקי רשת, כולל vNICs ו-Dynamic NICs. הוראות כלליות ליצירת מכונות זמינות במאמר יצירה והפעלה של מכונת VM.
הממשק הראשון תמיד נוצר כ-nic0, והוא תמיד ממשק ברירת המחדל.
המסוף
נכנסים לדף Create an instance במסוף Google Cloud .
בחלונית Machine configuration:
- בשדה Name, מזינים שם למכונה.
- בשדה אזור, בוחרים אזור.
- בשדה Zone, בוחרים אזור.
בתפריט הניווט, לוחצים על Networking (רשת) כדי להציג את החלונית Networking (רשת).
בקטע Network interfaces (ממשקי רשת), מרחיבים את ממשק הרשת כדי לערוך אותו.
בקטעים Network (רשת) ו-Subnetwork (רשת משנה), בוחרים את הרשת ואת הרשת המשנה שרוצים להשתמש בהן.
אם רוצים להגדיר כתובות IPv6 בממשק, בוחרים רשת משנה עם
/64טווח כתובות IPv6 מוגדר. סוג הגישה ל-IPv6 של רשת המשנה קובע אם המכונה מקבלת טווח כתובות IPv6 פנימיות/96או טווח כתובות IPv6 חיצוניות/96.בוחרים אחת מהאפשרויות הבאות עבור סוג מחסנית ה-IP של הממשק:
- IPv4 (single-stack)
- IPv4 ו-IPv6 (dual-stack)
- IPv6 (single-stack)
לממשקים עם כתובות IPv4, מבצעים את הפעולות הבאות:
בקטע כתובת IPv4 פנימית ראשית, בוחרים באחת מהאפשרויות הבאות:
- Ephemeral (Automatic) כדי להקצות באופן אוטומטי כתובת IPv4 זמנית חדשה
- Ephemeral (Custom) (ארעית (בהתאמה אישית)) כדי לציין ידנית כתובת IPv4 ארעית חדשה
- כתובת IPv4 פנימית סטטית שמורה מהרשימה
- שמירת כתובת IPv4 פנימית סטטית כדי לשמור ולהקצות כתובת IPv4 פנימית סטטית חדשה
בקטע External IPv4 address (כתובת IPv4 חיצונית), בוחרים אחת מהאפשרויות הבאות:
- Ephemeral כדי להקצות כתובת IPv4 ארעית חדשה
- None (ללא) כדי לא להקצות כתובת IPv4 חיצונית
- כתובת IPv4 סטטית ושמורה מהרשימה
- שמירת כתובת IP חיצונית סטטית כדי לשמור ולהקצות כתובת IPv4 חיצונית סטטית חדשה
אפשר להקצות לממשק הרשת טווח כתובות IP של כינוי אחד או יותר. כדי להקצות טווח כתובות IP של כינוי, מבצעים את הפעולות הבאות:
- בקטע טווחים של כתובות IP חלופיות, לוחצים על הוספת טווח IP.
- בקטע Subnet range, בוחרים טווח כתובות IPv4 ראשי של תת-רשת או טווח כתובות IPv4 משני של תת-רשת לשימוש.
- בשדה טווח כתובות IP של כינוי, מזינים טווח כתובות IP בסימון CIDR. הטווח הזה צריך להיות טווח לא בשימוש מתוך טווח כתובות ה-IP של רשת המשנה שבחרתם.
מידע נוסף על הקצאת טווחי IP של כתובות וירטואליות לממשקי רשת של מכונות וירטואליות זמין במאמר בנושא הגדרה של טווחי IP של כתובות וירטואליות.
בממשקים עם כתובות IPv6, מבצעים את הפעולות הבאות, בהתאם לסוג הגישה של רשת המשנה המחוברת:
- בקטע כתובת IPv6 פנימית ראשית, בוחרים אחת מהאפשרויות הבאות:
- Ephemeral (זמני) כדי להקצות באופן אוטומטי טווח כתובות IPv6 פנימיות זמניות
- Ephemeral (Custom) (ארעית (בהתאמה אישית)) כדי לציין באופן ידני טווח כתובות IPv6 פנימיות ארעיות חדש
- טווח כתובות IPv6 פנימיות סטטיות שמורות מהרשימה
- שמירת טווח כתובות IPv6 פנימיות סטטיות כדי לשמור ולהקצות טווח חדש של כתובות IPv6 פנימיות סטטיות
- בקטע כתובת IPv6 חיצונית, בוחרים באחת מהאפשרויות הבאות:
- Ephemeral (Automatic) (ארעית (אוטומטית)) כדי להקצות באופן אוטומטי טווח כתובות IPv6 חיצוניות ארעיות חדש
- ארעית (בהתאמה אישית) כדי לציין באופן ידני טווח כתובות IPv6 חיצוניות ארעיות חדש
- טווח כתובות IPv6 חיצוניות סטטיות שמורות מהרשימה
- שמירת כתובת IPv6 חיצונית סטטית כדי לשמור ולהקצות טווח חדש של כתובות IPv6 חיצוניות סטטיות
- בקטע כתובת IPv6 פנימית ראשית, בוחרים אחת מהאפשרויות הבאות:
כדי לסיים את השינוי של ממשק הרשת, לוחצים על Done.
כדי להוסיף עוד ממשק רשת:
כדי להוסיף vNIC, לוחצים על הוספת ממשק רשת וממלאים את הטופס עם הפרטים של ה-vNIC.
כדי להוסיף NIC דינמי, לוחצים על הוספת ממשק רשת דינמי ומבצעים את הפעולות הבאות:
- בשדה Parent network interface (ממשק רשת אב), בוחרים את ה-vNIC של האב שעבורו רוצים ליצור את ה-NIC הדינמי.
- בשדה VLAN ID (מזהה VLAN), מזינים את מזהה ה-VLAN של כרטיס ה-NIC הדינמי.
- ממלאים את שאר הפרטים של כרטיס ה-NIC הדינמי בטופס.
ממשיכים בתהליך יצירת המופע.
לוחצים על יצירה.
gcloud
כדי ליצור ממשקי רשת במכונה חדשה, משתמשים בפקודה gcloud compute instances create.
צריך לכלול את הדגל --network-interface לכל ממשק, ואחריו את כל מפתחות הרשת המתאימים, כמו network, subnet, private-network-ip, address, external-ipv6-address ו-vlan.
הוספת המפתח vlan יוצרת NIC דינמי.
אם יוצרים NIC דינמי, צריך גם לבצע את השלבים להגדרת מערכת ההפעלה של האורח ל-NIC דינמיים אחרי שיוצרים את המופע.
כדי לראות דוגמאות לאופן יצירת מכונות עם כמה ממשקים, אפשר לעיין בהגדרות לדוגמה.
קטע הקוד הזה ממחיש רק את הדגל --network-interface, שהוא אחד מתוך הרבה פרמטרים אפשריים שאפשר לציין כשיוצרים מכונה.
gcloud compute instances create INSTANCE_NAME \
--zone ZONE \
--network-interface \
network=NETWORK_A,subnet=SUBNET_A, \
stack-type=STACK_TYPE, \
private-network-ip=INTERNAL_IPV4_ADDRESS, \
address=EXTERNAL_IPV4_ADDRESS | no-address, \
internal-ipv6-address=INTERNAL_IPV6_ADDRESS \
...
--network-interface \
network=NETWORK_B,subnet=SUBNET_B, \
stack-type=STACK_TYPE, \
external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
external-ipv6-prefix-length=96, \
ipv6-network-tier=PREMIUM, \
vlan=VLAN_ID \
...
מחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE_NAME: השם של המכונה שרוצים ליצור. -
ZONE: האזור שבו נוצרת המכונה. -
NETWORK_A,NETWORK_B: הרשת שאליה הממשק מחובר. -
SUBNET_A,SUBNET_B: רשת המשנה שאליה הממשק מצורף.
STACK_TYPE: סוג המערך של הממשק.ערך ברירת המחדל הוא
IPV4_ONLY. מצייניםIPV4_IPV6כדי להגדיר ממשק עם שני פרוטוקולים, אוIPV6_ONLYכדי להגדיר ממשק עם IPv6 בלבד.ערכים לממשקים עם כתובות IPv4:
-
INTERNAL_IPV4_ADDRESS: כתובת ה-IPv4 הפנימית שרוצים להקצות לממשק ברשת המשנה של היעד. אפשר להשמיט את הפרמטר הזה אם רוצים להקצות כתובת תקינה כלשהי.
EXTERNAL_IPV4_ADDRESS: כתובת ה-IPv4 החיצונית של הממשק.צריך להזמין מראש כתובת IPv4 חיצונית. אם לא רוצים שלממשק תהיה כתובת IP חיצונית, מציינים no-address במקום
address=EXTERNAL_IPV4_ADDRESS. אם רוצים שממשק יקבל כתובת IP חיצונית ארעית, מציינים את האפשרותaddress=''.
-
ערכים לממשקים עם כתובות IPv6:
-
INTERNAL_IPV6_ADDRESS: טווח כתובות ה-IPv6 הפנימיות שרוצים להקצות לממשק ברשת המשנה של היעד. אם לא מציינים טווח,Google Cloud מקצה אוטומטית טווח כתובות IPv6 פנימיות מתת-הרשת. -
EXTERNAL_IPV6_ADDRESS: טווח כתובות ה-IPv6 החיצוניות שרוצים שהממשק יקבל ברשת המשנה של היעד. אם לא מציינים,Google Cloud מקצה באופן אוטומטי טווח כתובות IPv6 חיצוניות מרשת המשנה.
-
VLAN_ID: מזהה VLAN. ציון מזהה VLAN מגדיר את ממשק הרשת כממשק רשת דינמי. בפקודה, צריך למקם את ה-NIC הדינמי אחרי ה-vNIC של האב.
API
משתמשים ב-method instances.insert כדי ליצור מכונה עם כמה ממשקי רשת.
הכללת השדה vlan יוצרת NIC דינמי.
אם יוצרים NIC דינמי, צריך גם לבצע את השלבים להגדרת מערכת ההפעלה של האורח ל-NIC דינמיים אחרי שיוצרים את המופע.
דוגמאות:
כדי ליצור מכונה עם כתובות IPv4 פנימיות בלבד:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { .... "networkInterfaces": [ { "networkIP": "IPV4_ADDRESS_A", "subnetwork": "regions/REGION/subnetworks/SUBNET_A" }, { "networkIP": "IPV4_ADDRESS_B", "subnetwork": "regions/REGION/subnetworks/SUBNET_B", "vlan": "VLAN_ID" }, for each interface, specify a network... ], other instance settings... }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את המופע. -
ZONE: האזור שבו נמצאת המכונה. -
IPV4_ADDRESS_A,IPV4_ADDRESS_B: כתובות ה-IPv4 הפנימיות שרוצים להקצות לכל ממשק רשת. -
REGION: האזור שבו נמצאת המכונה. -
SUBNET_A, SUBNET_B: רשתות המשנה שבהן נמצא כל ממשק רשת. -
VLAN_ID: מזהה VLAN. ציון מזהה VLAN מגדיר את ממשק הרשת כממשק רשת דינמי. צריך למקם NIC דינמי אחרי ה-vNIC של האב בבקשה.
-
כדי ליצור מכונה עם כתובות IPv4 פנימיות וכתובות IPv6 פנימיות, מבצעים את הפעולות הבאות:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { .... "networkInterfaces": [ { "subnetwork": "regions/REGION/subnetworks/SUBNET_A", "ipv6Address": "IPV6_ADDRESS_A", "internalIpv6PrefixLength": 96, "stackType": IPV4_IPV6, "ipv6AccessType": INTERNAL }, { "subnetwork": "regions/REGION/subnetworks/SUBNET_B", "ipv6Address": "IPV6_ADDRESS_B", "internalIpv6PrefixLength": 96, "stackType": IPV4_IPV6, "ipv6AccessType": INTERNAL, "vlan": "VLAN_ID" }, for each interface, specify a network... ], other instance settings... }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את המופע. -
ZONE: האזור שבו נמצאת המכונה. -
REGION: האזור שבו נמצאת המכונה. -
SUBNET_A, SUBNET_B: רשתות המשנה שבהן נמצא כל ממשק רשת. -
IPV6_ADDRESS_A, IPV6_ADDRESS_B: טווח כתובות ה-IPv6 הפנימיות שרוצים להקצות לממשק ברשת המשנה של היעד. אם לא מציינים טווח,Google Cloud מקצה אוטומטית טווח כתובות IPv6 פנימיות מתת-הרשת. -
VLAN_ID: מזהה VLAN. ציון מזהה VLAN מגדיר את ממשק הרשת כממשק רשת דינמי. צריך למקם NIC דינמי אחרי ה-vNIC ההורה שלו.
-
כדי ליצור מכונה עם כתובות IPv6 פנימיות בלבד, מבצעים את הפעולות הבאות:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { .... "networkInterfaces": [ { "subnetwork": "regions/REGION/subnetworks/SUBNET_A", "ipv6Address": "IPV6_ADDRESS_A", "internalIpv6PrefixLength": 96, "stackType": IPV6_ONLY, "ipv6AccessType": INTERNAL }, { "subnetwork": "regions/REGION/subnetworks/SUBNET_B", "ipv6Address": "IPV6_ADDRESS_B", "internalIpv6PrefixLength": 96, "stackType": IPV6_ONLY, "ipv6AccessType": INTERNAL, "vlan": "VLAN_ID" }, for each interface, specify a network... ], other instance settings... }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את המופע. -
ZONE: האזור שבו נמצאת המכונה. -
REGION: האזור שבו נמצאת המכונה. -
SUBNET_A, SUBNET_B: רשתות המשנה שבהן נמצא כל ממשק רשת. -
IPV6_ADDRESS_A, IPV6_ADDRESS_B: טווח כתובות ה-IPv6 הפנימיות שרוצים להקצות לממשק ברשת המשנה של היעד. אם לא מציינים טווח,Google Cloud מקצה אוטומטית טווח כתובות IPv6 פנימיות מתת-הרשת. -
VLAN_ID: מזהה VLAN. ציון מזהה VLAN מגדיר את ממשק הרשת כממשק רשת דינמי. צריך למקם NIC דינמי אחרי ה-vNIC ההורה שלו.
-
Terraform
אתם יכולים להשתמש במשאב של Terraform כדי ליצור מכונה עם כמה ממשקי רשת.
הארגומנטים של Terraform כוללים ערכים לדוגמה שאפשר לשנות.
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
הגדרות לדוגמה
בקטעים הבאים מוסבר איך ליצור מופעים עם כמה ממשקים.
הגדרת כמה כרטיסי רשת וירטואליים (vNIC) וכרטיסי רשת דינמיים
הפקודה לדוגמה הבאה יוצרת מכונה עם ממשקי הרשת הבאים:
- ממשק vNIC בשם
nic0שהוא ההורה של הרכיבים הבאים:- כרטיס NIC דינמי בשם
nic0.2
- כרטיס NIC דינמי בשם
- ממשק vNIC בשם
nic1שהוא ההורה של הרכיבים הבאים:- כרטיס NIC דינמי בשם
nic1.4 - כרטיס NIC דינמי בשם
nic1.5
- כרטיס NIC דינמי בשם
gcloud compute instances create vm1 \
--zone zone-a \
--network-interface=network=network-a,subnet=subnet-a \
--network-interface=network=network-b,subnet=subnet-b,vlan=2 \
--network-interface=network=network-c,subnet=subnet-c \
--network-interface=network=network-d,subnet=subnet-d,vlan=4 \
--network-interface=network=network-e,subnet=subnet-e,vlan=5
אחרי שיוצרים מכונה עם כרטיסי רשת דינמיים, צריך גם להגדיר את מערכת ההפעלה של האורח לכרטיסי רשת דינמיים.
הגדרת כמה ממשקי רשת עם כתובות IPv4 בלבד
הפקודה לדוגמה הבאה יוצרת מופע עם שלושה ממשקי רשת.
gcloud compute instances create vm1 --machine-type=n1-standard-4 \
--network-interface '' \
--network-interface network=net1,subnet=subnet-a,private-network-ip=10.10.10.2,address=EXTERNAL_IPV4_ADDRESS \
--network-interface network=net2,subnet=subnet-b,private-network-ip=10.10.20.2,no-address
הממשקים נוצרים באופן הבא:
nic0נוצר עם הגדרות ברירת מחדל. הממשק מצורף לרשת משנה ברשת ה-VPC שמוגדרת כברירת מחדל, עם כתובת IP פנימית שהוקצתה באופן אוטומטי וכתובת IP חיצונית זמנית.
nic1מצורפת לרשת המשנהsubnet-aברשתnet1, עם כתובת IPv4 פנימית10.10.10.2וכתובת IPv4 חיצונית סטטיתEXTERNAL_IPV4_ADDRESS.
nic2מצורפת לרשת המשנהsubnet-bברשתnet2, עם כתובת IPv4 פנימית10.10.20.2וללא כתובת IP חיצונית.
תיאור מלא של הפקודה gcloud compute instances create והדגל --network-interface מופיע במסמכי התיעוד של הפקודה.
אתם יכולים להשתמש בכתובת ה-IP מממשק הרשת שהוספתם כדי להגדיר העברת DNS. מידע נוסף על הגדרת אזורי העברה ב-Cloud DNS זמין במאמר בנושא אזורי העברה.
הגדרת כמה ממשקי רשת עם כתובות IPv4 ו-IPv6
הפקודה לדוגמה הבאה יוצרת מכונה עם שני ממשקי רשת.
gcloud compute instances create vm1 \
--network-interface network=dual-int,subnet=int-subnet,stack-type=IPV4_IPV6 \
--network-interface network=dual-ext,subnet=ext-subnet,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
--machine-type=n1-standard-4 --zone=ZONE_A
הממשקים נוצרים באופן הבא:
nic0מצורף לרשת המשנהint-subnetברשתdual-int, עם כתובת IPv4 פנימית ארעית וטווח כתובות IPv6 פנימיות ארעיות.
nic1מצורף לרשת המשנהext-subnetברשתdual-ext, עם כתובת IPv4 פנימית ארעית וטווח כתובות IPv6 חיצוניות ארעיות.
הגדרת כמה ממשקי רשת עם כתובות IPv6 בלבד
הפקודה לדוגמה הבאה יוצרת מכונה עם IPv6 בלבד ושלושה ממשקי רשת.
gcloud compute instances create vm1 \
--network-interface network=ipv6-only-int-a,subnet=int-subnet-a,stack-type=IPV6_ONLY \
--network-interface network=ipv6-only-int-b,subnet=int-subnet-b,stack-type=IPV6_ONLY,internal-ipv6-address=fd20:db8:0:0:1:0:: \
--network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM,external-ipv6-address=EXTERNAL_IPV6_ADDRESS \
--machine-type=n1-standard-4 --zone=us-west2-a
הממשקים נוצרים באופן הבא:
nic0מצורף לרשת המשנהint-subnet-aברשתipv6-only-int-a, עם כתובת IPv6 פנימית זמנית שהוקצתה באופן אוטומטי.
nic1מצורף לתת-רשתint-subnet-bברשתipv6-only-int-b, עם טווח כתובות IPv6 פנימיות ארעיות מותאם אישיתfd20:db8:0:0:1:0::/96.
nic2מצורף לרשת המשנהext-subnetברשתipv6-only-ext, עם טווח כתובות IPv6 חיצוניות סטטיות,EXTERNAL_IPV6_ADDRESS.
הגדרה של כמה ממשקי רשת לקבוצות של מכונות
אפשר להשתמש במופעים עם כמה ממשקי רשת בקבוצות של מופעים לא מנוהלים ובקבוצות של מופעים מנוהלים.
בקבוצות של מופעים לא מנוהלים, צריך ליצור כל מופע בנפרד ולוודא שממשק הרשת nic0 של כל מופע מחובר לאותה רשת משנה. לאחר מכן מוסיפים את המופעים לקבוצת המופעים הלא מנוהלת.
כדי להגדיר כמה ממשקי רשת לקבוצות של מכונות מנוהלות, צריך לציין את הגדרת הרשת לכל ממשק בתבנית המכונה, על ידי הגדרת הדגל --network-interface פעם אחת לכל ממשק.
בדוגמה הבאה נוצרת תבנית של הגדרות מכונה עם שלושה ממשקי רשת:
gcloud compute instance-templates create template-1 \
--network-interface subnet=net0-subnet-a \
--network-interface subnet=net1-subnet-b,no-address \
--network-interface subnet=net2-subnet-c,no-address \
--region REGION_A
שמות של תת-רשתות בכל אזור בפרויקט חייבים להיות ייחודיים, ולכן ציון תת-רשתות לפי שם משייך באופן מרומז כל ממשק לרשת VPC. בדוגמה הזו, כל ממשק משתמש ברשת משנה שנמצאת ברשת VPC ייחודית:
-
nic0משתמשת ברשת המשנהnet0-subnet-a -
nic1משתמשת ברשת המשנהnet1-subnet-b -
nic2משתמשת ברשת המשנהnet2-subnet-c
האפשרות no-address בדגל --network-interface מציינת שהממשק מוגדר ללא כתובת IPv4 חיצונית. כתובת ה-IP הפנימית מגיעה מתת-הרשת שבה נעשה שימוש בממשק. מידע מלא על הדגלים והתחביר זמין במאמר בנושא הדגל --network-interface של הפקודה instance-templates create.
המאמרים הבאים
- הגדרת ניתוב לממשק נוסף
- הוספת כרטיסי רשת דינמיים למופע
- איך צופים בממשקי רשת של מופע
- עדכון ממשקי הרשת של מכונה
- מחיקת כרטיסי רשת דינמיים ממופע