בדף הזה מוסבר איך להגדיר את Service Directory עם Google Kubernetes Engine (GKE) ולרשום אוטומטית את אשכולות ה-GKE ב-Service Directory. אפשר להגדיר את Service Directory ל-GKE עם אשכולות GKE במצב Autopilot או אשכולות GKE רגילים. מידע על שני המצבים זמין במאמר בחירה של מצב פעולה ב-GKE.
מידע נוסף על Service Directory ל-GKE זמין במאמר סקירה כללית של Service Directory ל-GKE.
מגבלות
יש כמה מגבלות ל-Service Directory ל-GKE:
- אפשר לרשום שירותים רק באמצעות השילוב של Service Directory עם GKE. צריך לרשום באופן ידני את ה-Ingress, השערים ומשאבים אחרים באמצעות Service Directory API.
- כדי לסנכרן שירותים באשכולות האלה עם Service Directory, צריך לרשום את אשכולות ה-GKE באמצעות Fleets. פרטים על רישום אשכולות GKE זמינים במאמר רישום אשכול.
- כל המשאבים של Service Directory רשומים בפרויקט ה-Fleet, ולא בפרויקט של האשכול.
- אי אפשר לשנות את הישויות של ספריית השירותים שנרשמו באמצעות השילוב הזה. צריך לבצע את כל השינויים במשאבי שירות GKE עצמם כדי שהם יועברו ל-Service Directory.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- צריך לרשום את אשכול GKE ב-Fleet. כדי לרשום את אשכול GKE, פועלים לפי ההוראות במאמר רישום אשכול.
הגדרת אשכול GKE
כדי להגדיר את אשכול GKE, מבצעים את השלבים הבאים.
- מפעילים את התכונה Service Directory GKE fleet.
- הגדרת מדיניות הרישום של Service Directory.
- פורסים את שירות GKE.
הפעלת התכונה Service Directory GKE fleet
כדי להפעיל את התכונה Service Directory GKE fleet, מריצים את הפקודה gcloud container hub.
gcloud
gcloud alpha container hub service-directory enable
הגדרת מדיניות הרישום של השירות ב-Service Directory
מדיניות הרישום מגדירה אילו סוגים של שירותים ב-GKE מיובאים אוטומטית על ידי Service Directory. הרשימה הבאה מציגה את האפשרויות שניתנות להגדרה במדיניות הזו:
-
resources: סוג משאבי GKE שמייבאים. אפשר לציין כמה סוגי משאבים. המשאבים מזוהים על ידיGroupו-Kind. ערך ברירת המחדל שלGroupהואcore. אפשר להשתמש רק ב-Kind: service. -
selector: בורר תוויות של GKE שתואם לתוויות key:value שהוחלו על משאב GKE. כברירת מחדל, לא נבחרים משאבים. -
annotationsToSync: מפתחות ההערות במשאב שמסונכרנים עם Service Directory. אם הרשימה ריקה, המשאבים מסונכרנים עם Service Directory ללא הערות.
כל מרחב שמות צריך להגדיר מדיניות אחת. המדיניות הזו חייבת לכלול name:
"default". הבקר לא מאפשר או מתאים שמות אחרים.
מגדירים ServiceDirectoryRegistrationPolicy.
המניפסט הבא מתאר ServiceDirectoryRegistrationPolicy:
apiVersion: networking.gke.io/v1alpha1 kind: ServiceDirectoryRegistrationPolicy metadata: # Only the name "default" is allowed. name: default # The ServiceDirectoryRegistrationPolicy is a namespaced resource namespace: NAMESPACE spec: resources: # Kind specifies the types of Kubernetes resources that can be synced into Service Directory. - kind: Service # Selector is a label selector for the resource types specified in Kind. selector: matchLabels: LABELS # annotationsToSync specifies the annotations that are matched and imported. # Any annotations that do not match this set of keys will not be imported into Service Directory. annotationsToSync: - ANNOTATIONS
מחליפים את מה שכתוב בשדות הבאים:
-
NAMESPACE: השם של מרחב השמות. יכול להיות רקServiceDirectoryRegistrationPolicyאחד במרחב שמות. אם יש כמה כללי מדיניות במרחב שמות יחיד, GKE בוחר כלל מדיניות אחד שיהיה כלל המדיניות הפעיל ומסמן את השאר כלא פעילים. -
LABELS: בורר התוויות, למשלsd-import: "true". הערך הזה חל על משאבים שצוינו בסוג. כברירת מחדל, לא נבחרים משאבים. -
ANNOTATIONS: רשימה של הערות שמתאימות לייבוא, למשל,- cloud.google.com/load-balancer-typeאם למשאב GKE שנבחר יש אחת מההערות ברשימה, ההערה והערכים שלה מסונכרנים עם Service Directory יחד עם המשאב. אם הרשימה ריקה, המשאבים מסונכרנים עם Service Directory ללא הערות.
שומרים את קובץ המניפסט בשם registration_policy.yaml.
החלת המניפסט על האשכול
כדי להחיל את המניפסט על האשכול, מריצים את הפקודה kubectl apply -f:
kubectl apply -f registration_policy.yaml
פריסת שירות GKE
פורסים את שירות מאזן עומסי הרשת החיצוני להעברת סיגנל ללא שינוי של GKE ואת האפליקציה באשכול GKE באזור שלכם. לדוגמה, אם האזור שלכם הוא us-central1, פורסים אותו באשכול GKE gke-us-central1.
הפעולה הזו מייבאת את שירות GKE שלכם אל Service Directory.
יוצרים קובץ YAML ומחילים אותו כמו כל משאב אחר של GKE. זוהי מניפסט של שירות מסוג LoadBalancer:
apiVersion: v1
kind: Service
metadata:
name: hello-app-service
labels:
sd-import: "true"
annotations:
cloud.google.com/load-balancer-type: "Internal"
spec:
type: LoadBalancer
selector:
app: hello
ports:
- name: tcp-port
protocol: TCP
port: 80
targetPort: 8080
זוהי מניפסט של Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello
name: hello-app
spec:
replicas: 2
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: hello
ports:
- containerPort: 8080
protocol: TCP
כדי לוודא, מריצים את השאילתה של Service Directory לשירות באמצעות הפקודה gcloud service-directory services resolve:
gcloud
gcloud beta service-directory services resolve SERVICE_NAME \ --location=LOCATION \ --namespace=NAMESPACE
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_NAME: השם או המזהה המלא של השירות, לדוגמהhello-app-service -
LOCATION: שם האזור של השירות, לדוגמה,us-central1 -
NAMESPACE: שם מרחב השמות של השירות, למשלdefault
הפלט יציג את השירות שלכם וידמה לזה:
service:
endpoints:
- address: 10.140.0.5
metadata:
cloud.google.com/load-balancer-type: "Internal"
name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app-service/endpoints/my-cluster-12345
port: 80
network: projects/123456789/locations/global/networks/default
name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app-service
חיוב
ב-Service Directory לא נגבה תשלום על משאבים שנוצרו על ידי השילוב עם GKE. עם זאת, יש תשלום על קריאות ה-API. פרטי המחירים מפורטים במאמר בנושא תמחור של Service Directory.
המאמרים הבאים
- במאמר סקירה כללית על Service Directory תוכלו לקרוא סקירה כללית על השירות.
- כדי למצוא פתרונות לבעיות נפוצות שאולי תיתקלו בהן כשאתם משתמשים ב-Service Directory, אפשר לעיין במאמר פתרון בעיות.