המסמך הזה מיועד לבעלי אפליקציות שמריצים את Google Distributed Cloud. במסמך הזה מוסבר איך להתחבר למכונות וירטואליות (VM) שמשתמשות ב-VM Runtime ב-GDC. אפשר להתחבר למכונות וירטואליות ישירות באמצעות כתובת IP, או באמצעות כלים מובנים לגישה ל-SSH או למסוף.
לפני שמתחילים
כדי להשלים את המסמך הזה, תצטרכו גישה למקורות המידע הבאים:
- מכונת VM שפועלת באחד מהאשכולות שלכם. אם צריך, יוצרים מכונה וירטואלית ב-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צריך להיות מוגדר למערכת ההפעלה של המכונה הווירטואלית,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מסומנים ב-GuestEnvironmentDataSynced.apiVersion: 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, סוכן האורח מופעל.
בזמן שהתכונה הזו נמצאת בגרסת טרום-השקה (Preview), אפשר להשבית אותה על ידי עריכה של
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: {}שומרים וסוגרים את מניפסט מכונת ה-VM המעודכן בעורך.
משתמשים ב-
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 Protocol (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. מומלץ לשנות את פרטי הכניסה הראשוניים אחרי הכניסה הראשונה ל-VM.
-
מערכת הפעלה אורחת של 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: השם של המכונה הווירטואלית. -
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