המסמך הזה מיועד לבעלי אפליקציות שמריצים את Google Distributed Cloud. במסמך הזה מוסבר איך להתחבר למכונות וירטואליות (VM) שמשתמשות ב-VM Runtime ב-GDC. אפשר להתחבר למכונות וירטואליות ישירות באמצעות כתובת IP, או באמצעות כלים מובנים לגישה ל-SSH או למסוף.
לפני שמתחילים
כדי להשלים את המסמך הזה, תצטרכו גישה למקורות המידע הבאים:
- מכונה וירטואלית שפועלת באחד מהאשכולות שלכם. אם צריך, יוצרים מכונה וירטואלית ב-Google Distributed Cloud.
- כלי הלקוח
virtctlמותקן כפלאגין שלkubectl. במקרה הצורך, מתקינים את כלי הלקוח virtctl.
הגדרת גישת SSH למכונות וירטואליות ללא סיסמה
סוכן אורח שמותקן על ידי VM Runtime ב-GDC מאפשר גישת SSH ישירה ל-VM ללא סיסמה. בין היתר, סוכן האורח מתקין מפתחות SSH ומבטל את התוקף שלהם. היכולת הזו מאפשרת ליצור מנהרת SSH כדי לגשת למכונה הווירטואלית מלקוחות מחוץ לרשת האשכול.
הפעלת סוכן האורח
כדי להפעיל את סוכן האורח:
כדאי לבדוק את המשאב המותאם אישית
VirtualMachineכדי לוודא שהוא מוגדר להפעלת סוכן האורח:kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIGהשדה
spec.osTypeצריך להיות מוגדר למערכת ההפעלה של מכונת ה-VM,LinuxאוWindows. אסור להגדיר את הקטעspec.guestEnvironmentכריק. אם הקטע מוגדר כריק (guestEnvironment: {}), אפשר להסיר אותו לגמרי כדי להפעיל את סוכן האורח.משאב מותאם אישית
VirtualMachineשל המכונה הווירטואלית שאליה רוצים לגשת צריך להיראות כך:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: sample-vm spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi ... osType: Linux ...אם צריך, משתמשים בפקודה
kubectl editכדי לעדכן את המשאבVirtualMachineבהתאמה אישית.כדי לוודא שהסוכן האורח פועל, בודקים את
statusבמשאב המותאם אישית של מכונת ה-VM:kubectl get gvm VM_NAME --kubeconfig KUBECONFIGכשהסוכן האורח עובד, התנאים
status: "True"ו-GuestEnvironmentEnabledמופיעים עםstatus: "True".GuestEnvironmentDataSyncedapiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: ... name: vm-sample-01 ... status: conditions: - lastTransitionTime: "2022-10-05T22:40:26Z" message: "" observedGeneration: 1 reason: UserConfiguration status: "True" type: GuestEnvironmentEnabled - lastTransitionTime: "2022-10-06T21:55:57Z" message: "" observedGeneration: 1 reason: GuestEnvironmentDataSynced status: "True" type: GuestEnvironmentSynced ...
הפעלת גישת SSH ללא סיסמה
כדי להפעיל גישת SSH ללא סיסמה למכונה הווירטואלית:
יוצרים קובץ מניפסט
VirtualMachineAccessRequest, כמוvm-access-request.yaml, בכלי העריכה הרצוי:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: name: VMAR_NAME namespace: VM_NAMESPACE spec: vm: VM_NAME user: USERNAME ssh: key: PUBLIC_SSH_KEY ttl: EXPIRATION_TIMEמחליפים את מה שכתוב בשדות הבאים:
-
VMAR_NAME: השם של משאב בקשת הגישה. -
VM_NAMESPACE: מרחב השמות של המכונה הווירטואלית שרוצים לגשת אליה. -
VM_NAME: השם של המכונה הווירטואלית שרוצים לגשת אליה. -
USERNAME: שם המשתמש של המשתמש שניגש למכונה הווירטואלית. -
PUBLIC_SSH_KEY: המפתח הציבורי לגישת SSH. בדרך כלל זה התוכן של הקובץid_rsa.pub.
EXPIRATION_TIME: השדהttl(זמן החיים) מציין את משך התוקף של מפתח ה-SSH.לדוגמה, אם מציינים
30m, התוקף של מפתח ה-SSH יפוג אחרי 30 דקות.הדגל הזה משתמש ביחידות הבאות:
-
sשניות -
mלדקות -
hבמשך שעות -
dל- ימים
-
-
משתמשים ב-
kubectl applyכדי ליצור אתVirtualMachineAccessRequestמקובץ המניפסט. לדוגמה, אם שם קובץ המניפסט הואvm-access-request.yaml,kubectl apply -f MANIFEST --kubeconfig KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
MANIFEST: השם של קובץ המניפסט של בקשת הגישה. לדוגמה,vm-access-request.yaml. -
KUBECONFIG: הנתיב לקובץ kubeconfig של האשכול שמארח את המכונה הווירטואלית שאליה אתם ניגשים.
-
כדי לוודא שהגדרת בקשת הגישה בוצעה בהצלחה, בודקים את הסטטוס של
VirtualMachineAccessRequest:kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIGאם ההגדרה בוצעה בהצלחה, הקטע
statusכולל אתstate: configured:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: ... annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"vm.cluster.gke.io/v1","kind":"VirtualMachineAccessRequest", "metadata":{"annotations":{},"name":"vmar-sample","namespace":"default"}, "spec":{"ssh":{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host","ttl":"5h"},"user":"sample-user","vm":"vm-sample-01"}} creationTimestamp: "2022-10-06T21:55:57Z" finalizers: - vm.cluster.gke.io/vmar-finalizer generation: 2 name: vmar-sample namespace: default resourceVersion: "13033921" uid: 282d72ad-f48d-4e89-af22-336940ac9f58 spec: ssh: key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host ttl: 5m0s user: sample-user vm: vm-sample-01 status: processedAt: "2022-10-06T21:55:57Z" state: configured
השבתת סוכן האורח
כשיוצרים מכונה וירטואלית חדשה ומגדירים את השדה osType, סוכן האורח מופעל.
בזמן שהתכונה הזו נמצאת בגרסת טרום-השקה, אפשר להשבית אותה על ידי עריכה של
VirtualMachine המשאב המותאם אישית. השבתת סוכן האורח משביתה את הגישה ל-VM באמצעות SSH ללא סיסמה.
כדי להשבית את סוכן האורח:
כדי להפסיק את המכונה הווירטואלית לפני שמבצעים שינויים בהגדרות, משתמשים בפקודה
kubectl:kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
עורכים את משאב המכונה הווירטואלית:
kubectl edit gvm VM_NAME --kubeconfig KUBECONFIGמעדכנים את ההגדרה של
VirtualMachineכדי להוסיףspec.guestEnvironmentריק באופן מפורש:apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachine metadata: name: vm-example namespace: default spec: compute: ... osType: Linux guestEnvironment: {}שומרים וסוגרים את קובץ המניפסט המעודכן של המכונה הווירטואלית בעורך.
משתמשים ב-
kubectlכדי להפעיל את המכונה הווירטואלית:kubectl virt start VM_NAME --kubeconfig KUBECONFIG
קישור באמצעות כתובת IP
אם למכונה הווירטואלית יש כתובת IP נגישה וכבר יש לכם את פרטי הכניסה לגישה למכונה הווירטואלית, אתם יכולים להתחבר באמצעות פרוטוקול כמו SSH, VNC או RDP.
חיבור באמצעות כתובת IP
אם אתם יכולים להתחבר ישירות לכתובת ה-IP של המכונה הווירטואלית, אתם יכולים להשתמש באחת מהשיטות הבאות:
SSH
כדי לראות את כתובת ה-IP של המכונה הווירטואלית, מקבלים את הפרטים שלה:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIGמחליפים את הערכים הבאים:
-
VM_NAME: השם של המכונה הווירטואלית. -
VM_NAMESPACE: מרחב השמות של המכונה הווירטואלית.
בדוגמה הבאה של פלט מוצגים פרטי מכונת ה-VM וכתובת ה-IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21-
מתחברים למכונה הווירטואלית באמצעות לקוח SSH:
ssh USERNAME@IP_ADDRESS -i PATH_TO_KEYמחליפים את הערכים הבאים:
-
USERNAME: שם המשתמש בחשבון במכונה הווירטואלית. -
IP_ADDRESS: כתובת ה-IP של המכונה הווירטואלית שקיבלתם בשלב הקודם. -
PATH_TO_KEY: הנתיב למפתח SSH פרטי.
-
VNC או RDP
Virtual Network Computing (VNC) ופרוטוקול Remote Desktop (RDP) מאפשרים לכם להשתמש במסוף הגרפי כדי לגשת למכונה הווירטואלית. כשמשתמשים בכתובת IP, צריך להפעיל את VNC או RDP במערכת ההפעלה של האורח כדי להשתמש באחד מהם להתחברות למכונה הווירטואלית. למידע על הפעלה ושימוש ב-VNC או ב-RDP, אפשר לעיין במסמכי התיעוד של מערכת ההפעלה של האורח.
צריך גם פרטי כניסה קיימים כדי להיכנס ל-VM, כמו אלה שאתם מגדירים כדי ליצור פרטי כניסה ראשוניים למשתמש כשאתם יוצרים VM.
כדי לראות את כתובת ה-IP של המכונה הווירטואלית, מקבלים את הפרטים שלה:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIGמחליפים את הערכים הבאים:
-
VM_NAME: השם של המכונה הווירטואלית. -
VM_NAMESPACE: מרחב השמות של המכונה הווירטואלית.
בדוגמה הבאה של פלט מוצגים פרטי מכונת ה-VM וכתובת ה-IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21-
מתחברים לכתובת ה-IP של המכונה הווירטואלית שקיבלתם בשלב הקודם באמצעות כלי לקוח והיציאה המתאימה, כמו יציאת VNC
5900או יציאת RDP3389.
קישור באמצעות שירות
אם המכונה הווירטואלית מתחברת ל-pod-network שמוגדר כברירת מחדל ואין אפשרות לתקשר ישירות עם כתובת ה-IP של המכונה הווירטואלית, צריך לחשוף את המכונה הווירטואלית מאחורי מאזן עומסים Service.
יוצרים קובץ
Servicemanifest, כמוmy-service-load-balancer.yaml, בכלי העריכה הרצוי:nano my-service-load-balancer.yamlמעתיקים ומדביקים את מניפסט ה-YAML הבא:
apiVersion: v1 kind: Service metadata: name: VM_NAME-service spec: selector: kubevirt/vm: VM_NAME ports: - name: PORT_NAME protocol: PROTOCOL_TYPE port: EXTERNAL_PORT targetPort: TARGET_PORT type: LoadBalancerבמניפסט מסוג
Service, מחליפים את הערכים הבאים:VM_NAME: השם של המכונה הווירטואלית שרוצים לחשוף לגישה מרחוק.-
PORT_NAME: השם של הפרוטוקול, למשלssh,vncאוrdp. -
PROTOCOL_TYPE: סוג הפרוטוקול, למשלTCPל-SSH ול-RDP, אוUDPל-VNC. -
EXTERNAL_PORT: מספר היציאה החיצונית שרוצים לחשוף ושמשמשת לחיבור. -
TARGET_PORT: יציאת היעד, למשל22ל-SSH.
שומרים וסוגרים את קובץ המניפסט
Serviceבכלי העריכה.יוצרים את
Serviceבאמצעותkubectl:kubectl apply -f my-service-load-balancer.yaml --kubeconfig KUBECONFIGמקבלים את כתובת
EXTERNAL-IPשל שירות מאזן העומסים:kubectl get service VM_NAME-service --kubeconfig KUBECONFIGכתובת ה-IP של איזון העומסים מוצגת, כמו בדוגמת הפלט הבאה:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vm1-service LoadBalancer 172.26.232.167 10.200.0.51 22:31141/TCP 6d20hמתחברים לכתובת
EXTERNAL-IPשל מאזן העומסים באמצעות פרוטוקול סטנדרטי, למשל באמצעות לקוח SSH:ssh USERNAME@LOAD_BALANCER_IP_ADDRESS -i PATH_TO_KEYמחליפים את הערכים הבאים:
-
USERNAME: שם המשתמש בחשבון במכונה הווירטואלית. -
LOAD_BALANCER_IP_ADDRESS: כתובת ה-IP של איזון העומסים. -
PATH_TO_KEY: הנתיב למפתח SSH פרטי.
-
חיבור ישיר באמצעות SSH
אם הלקוח שלכם מחובר לאותה רשת פיזית כמו הצמתים של אשכול ה-Bare Metal, ואתם לא צריכים להשתמש במנהרות SSH כדי להתחבר לאשכול, אתם יכולים להתחבר באמצעות kubectl virt ssh.
כדי להשתמש ב-SSH כדי לחבר מכונת Linux וירטואלית מהמסוף באמצעות התוסף
virtctl:kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIGמחליפים את הערכים הבאים:
-
USERNAME: שם המשתמש לגישה למכונה הווירטואלית. החשבון הזה נוצר אם הוא לא קיים במכונה הווירטואלית. -
VM_NAME: השם של ה-VM.
-
אחרי שמתחברים בהצלחה למכונה הווירטואלית באמצעות SSH ולא צריך יותר את החיבור, יוצאים מסשן ה-SSH:
exit
חיבור ישיר באמצעות המסוף
אם אין לכם קישוריות רשת ישירה למכונת Linux וירטואלית לגישת SSH, אתם יכולים להתחבר למסוף של המכונה הווירטואלית באמצעות זמן הריצה של המכונה הווירטואלית במסוף GDC. בשיטה הזו נפתח מסוף טורי. אחרי ההתחברות, מוצגת לכם שורת פקודה במקום מסוף גרפי.
כדי לגשת למכונה וירטואלית של Linux מהמסוף, משתמשים בתוסף
virtctl:kubectl virt console VM_NAME --kubeconfig KUBECONFIGמחליפים את
VM_NAMEבשם של המכונה הווירטואלית.כשמתבקשים, מזינים את פרטי הכניסה של המשתמש במכונה הווירטואלית. פרטי הכניסה האלה צריכים להיות קיימים במכונה הווירטואלית או להיות מוחלים כשהמכונה הווירטואלית נוצרת. אם צריך, אפשר לעבור לקטע הבא כדי ליצור פרטי כניסה ראשוניים למשתמש כשיוצרים מכונה וירטואלית.
אחרי שמתחברים בהצלחה למסוף של המכונה הווירטואלית ולא צריכים יותר את החיבור, יוצאים מהסשן של המכונה הווירטואלית ומהמסוף:
Ctrl + ]
חיבור ישיר באמצעות VNC
אתם יכולים להשתמש בפקודה kubectl virt vnc כדי לפתוח את המסוף הגרפי של Virtual Network Computing (VNC) כדי לגשת למכונות הווירטואליות. השיטה הזו מתאימה למכונות וירטואליות שמופעלות על ידי מערכת הפעלה אורחת של Windows או Linux. כשמשתמשים בפקודה kubectl virt vnc, VM Runtime ב-GDC פותח את VNC בשבילכם, כך שלא נדרש להפעיל את VNC במערכת ההפעלה של האורח.
כדי להיכנס ל-VM, צריך פרטי כניסה קיימים, כמו אלה שמוגדרים כשיוצרים פרטי כניסה ראשוניים למשתמש כשיוצרים VM.
כדי לגשת למכונה וירטואלית באמצעות VNC, משתמשים בתוסף
virtctl:kubectl virt vnc VM_NAME --kubeconfig KUBECONFIGמחליפים את
VM_NAMEבשם של המכונה הווירטואלית.כשמתבקשים, מזינים את פרטי הכניסה של המשתמש במכונה הווירטואלית.
אחרי שמתחברים בהצלחה לסשן VNC של המכונה הווירטואלית ולא צריך יותר את החיבור, מתנתקים מהמכונה הווירטואלית כדי לסגור את חיבור ה-VNC.
יצירת פרטי כניסה ראשוניים למשתמש
כשמתחברים ל-VM באמצעות המסוף, צריך לציין את פרטי הכניסה של המשתמש. התהליך ליצירת פרטי כניסה ראשוניים של משתמשים שונה במערכות הפעלה אורחות של Linux ו-Windows.
מערכת הפעלה אורחת של Linux
במכונות וירטואליות של Linux, אפשר להטמיע את פרטי הכניסה של המשתמש באימג' בהתאמה אישית, או לציין אותם כשיוצרים מכונה וירטואלית.
משתמשים בפרמטר
--configure-initial-passwordעם הפקודהkubectl virt create:kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --os-type Linux \ --configure-initial-password USERNAME:PASSWORD \ --kubeconfig KUBECONFIGמחליפים את הערכים הבאים:
-
VM_NAME: השם של המכונה הווירטואלית. -
USERNAME: שם המשתמש של החשבון שרוצים ליצור במכונה הווירטואלית. -
PASSWORD: הסיסמה של חשבון המשתמש.
פקודת הדוגמה הזו יוצרת מכונה וירטואלית של Linux שמריצה את Ubuntu 20.04. מומלץ לשנות את פרטי הכניסה הראשוניים אחרי הכניסה הראשונה למכונה הווירטואלית.
-
מערכת הפעלה אורחת של Windows
כדי לאפס סיסמה של משתמש קיים או ליצור את הסיסמה הראשונית של משתמש חדש, פועלים לפי השלבים הבאים:
הפעלת סוכן האורח במכונת ה-VM של Windows:
מגדירים את המכונה הווירטואלית כדי להפעיל את סוכן האורח.
משתמשים ב-VNC או ב-RDP כדי להתחבר ל-VM.
במכונה הווירטואלית, עוברים לכונן
guest agent. ברוב המקרים, זהו DriveE:.מריצים את
install.ps1באמצעות PowerShell.הפעולה הזו מתקינה ומפעילה את סוכן האורח. סוכן האורח מופעל אוטומטית בהפעלות מחדש עתידיות של מכונות וירטואליות.
סוגרים את הסשן המרוחק.
בתחנת העבודה של האדמין, משתמשים בפקודה הבאה כדי לאפס את הסיסמה של מכונת ה-VM של Windows (או להגדיר אותה אם משתמשים בשם משתמש חדש):
kubectl virt reset-windows-password VM_NAME \ --user=USERNAME \ --namespace=VM_NAMESPACEמחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: שם ה-VM. -
USERNAME: שם המשתמש שרוצים לאפס (או להגדיר) את הסיסמה שלו. אם שם המשתמש חדש, הפקודה יוצרת חשבון Windows חדש ומגדירה את הסיסמה הראשונית. -
VM_NAMESPACE: (אופציונלי) מרחב השמות של המכונה הווירטואלית. הדגל הזה הוא אופציונלי. אם לא מציינים מרחב שמות, המערכת משתמשת במרחב השמות שמוגדר כברירת מחדל,default.
כדי לאפס (או להגדיר) סיסמה בלי לקבל בקשת אישור, משתמשים בדגל האופציונלי
--force. כשמשתמשים בדגל--force, מוצגת הנחיה עם אזהרה לגבי ההשלכות של איפוס הסיסמה לחשבון קיים. בלי הדגל--force, הפקודה מבקשת לאשר את איפוס הסיסמה עם הטקסט הבא:This command creates an account and sets an initial password for the user USERNAME if the account does not already exist. If the account already exists, resetting the password can cause the LOSS OF ENCRYPTED DATA secured with the current password, including files and stored passwords. Would you like to set or reset the password for USERNAME (Y/n)?אחרי שתאשרו (או תכפו) את איפוס הסיסמה, הפקודה תחזיר את הסיסמה החדשה של מכונת ה-VM ושם המשתמש שצוינו:
Resetting and retrieving password for USERNAME on VM_NAME vm_name: VM_NAME username: USERNAME password: PASSWORD-
המאמרים הבאים
- ניהול מצב ההפעלה של מכונה וירטואלית ב-Google Distributed Cloud
- עריכת מכונה וירטואלית ב-Google Distributed Cloud
- הצגת יומני מסוף של מכונות וירטואליות ב-Google Distributed Cloud