הגדרת Service Directory ל-GKE

בדף הזה מוסבר איך להגדיר את 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • 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.

המאמרים הבאים