ניתוב תעבורה מעומסי עבודה של Cloud Service Mesh למכונה וירטואלית ב-Compute Engine
בדף הזה מוסבר איך לנתב בצורה מאובטחת תעבורת רשת מעומסי עבודה של Cloud Service Mesh ב-GKE למכונה וירטואלית ב-Compute Engine שמוצגת על ידי BackendService.
שימו לב: כשמנתבים תעבורה מ-GKE למכונה וירטואלית ב-Compute Engine, לא צריך שהמכונה הווירטואלית ב-Compute Engine או BackendService יצטרפו ל-Cloud Service Mesh. עם זאת, המכונה הווירטואלית של Compute Engine וה-BackendService חייבים להיות באותו פרויקט כמו אשכול GKE של Cloud Service Mesh. המגבלה הזו קיימת בזמן שהתכונה זמינה בגרסת Public Preview. mTLS לא נתמך במכונות וירטואליות של Compute Engine
לפני שמתחילים
בקטעים הבאים אנחנו מניחים:
- אשכול GKE עם Cloud Service Mesh מופעל.
- פריסת מכונה וירטואלית ב-Compute Engine שמוצגת על ידי BackendService.
לחלופין, אפשר להריץ את הפקודות הבאות כדי לפרוס מכונת VM לדוגמה ב-Compute Engine עם BackendService בחזית.
פורסים מכונה וירטואלית לדוגמה ב-Compute Engine ו-BackendService:
gcloud compute instance-templates create td-httpd-vm-template \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=http-td-server \ --image-family=debian-11 \ --image-project=debian-cloud \ --metadata=startup-script="#! /bin/bash sudo apt-get update -y sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype <html><body><h1>'\`$(/bin/hostname)\`'</h1></body></html>' | sudo tee /var/www/html/index.html" gcloud compute instance-groups managed create http-td-mig-us-east1 \ --zone=VM_ZONE \ --size=2 \ --template=td-httpd-vm-template gcloud compute health-checks create http http-helloworld-health-check gcloud compute firewall-rules create http-vm-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=0.0.0.0/0 \ --target-tags=http-td-server \ --rules=tcp:80 gcloud compute backend-services create helloworld \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks http-helloworld-health-check gcloud compute backend-services add-backend helloworld \ --instance-group=http-td-mig-us-east1 \ --instance-group-zone=VM_ZONE \ --globalכאשר:
- VM_ZONE הוא התחום שבו רוצים לפרוס את המכונה הווירטואלית ב-Compute Engine.
הגדרת מכונה וירטואלית ב-Compute Engine כ-GCPBackend
בקטע הזה, חושפים את המכונה הווירטואלית ב-Compute Engine לעומסי העבודה ב-GKE באמצעות GCPBackend. GCPBackend מורכב מהרכיבים הבאים:
- פרטים על חזית העורף (frontend) – במיוחד, שם המארח והיציאה שבהם עומסי העבודה של GKE ישתמשו כדי לקרוא ל-GCPBackend הזה.
- פרטים על הקצה העורפי – פרטי BackendService כמו שם השירות, המיקום ומספר הפרויקט.
ה-GCPBackend מכיל את שם המארח ופרטי היציאה, וגם את פרטי ה-BackendService (שם השירות, המיקום ומספר הפרויקט). עומסי העבודה (workloads) של GKE צריכים להשתמש בשם המארח ובפורט של GCPBackend בבקשות ה-HTTP שלהם כדי לגשת למכונת ה-VM של Compute Engine.
כדי שניתן יהיה לפענח את ה-DNS של שם המארח בתוך האשכול (כברירת מחדל אי אפשר לפענח אותו), צריך להגדיר את Google Cloud ה-DNS כך שיפענח את כל המארחים בשם מארח נבחר לכתובת IP שרירותית. הבקשה תיכשל עד שתגדירו את רשומת ה-DNS הזו. הגדרת ה-DNS של Google Cloud היא הגדרה חד-פעמית לכל דומיין מותאם אישית.
יוצרים אזור מנוהל:
gcloud dns managed-zones create prod \ --description="zone for gcpbackend" \ --dns-name=gcpbackend \ --visibility=private \ --networks=defaultבדוגמה הזו, שם ה-DNS הוא gcpbackend ורשת ה-VPC היא default.
מגדירים את הרשומה כך שהדומיין יהיה ניתן לפתרון:
gcloud beta dns record-sets create *.gcpbackend \ --ttl=3600 --type=A --zone=prod \ --rrdatas=10.0.0.1יוצרים את GCPBackend עם שם מארח בדומיין הקודם:
cat <<EOF > gcp-backend.yaml apiVersion: networking.gke.io/v1 kind: GCPBackend metadata: name: vm-gcp-backend namespace: NAMESPACE spec: type: "BackendService" hostname: hello-world.gcpbackend backendservice: name: helloworld location: global EOF kubectl apply -f gcp-backend.yamlבדוגמה הזו, GCP_BACKEND_NAME הוא
vm-gcp-backend.יוצרים Pod לבדיקה כדי לוודא שיש קישוריות מ-GKE למכונה וירטואלית ב-Compute Engine:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: testcurl namespace: default spec: containers: - name: curl image: curlimages/curl command: ["sleep", "3000"] EOF kubectl exec testcurl -c curl -- curl http://hello-world.gcpbackend:80מעכשיו, עומסי העבודה שלכם ב-GKE יכולים לגשת למכונת ה-VM ב-Compute Engine על ידי שליחת בקשות HTTP אל hello-world.gcpbackend:80.
כדי למנוע התנגשות עם שירותי Kubernetes קיימים או עם רשומות שירות של Istio, מומלץ להשתמש בשמות שונים ל-GCPBackend. אם יש התנגשות, סדר העדיפות (מהגבוה לנמוך) הוא Kubernetes Service, istio ServiceEntry ו-GCPBackend.
שימו לב שהשירות הווירטואלי ו-GCPBackend חייבים להיות באותו מרחב שמות, והמכונה הווירטואלית ב-Compute Engine חייבת להיות באותו פרויקט כמו אשכול GKE של Cloud Service Mesh.