מדריך למתחילים: ניהול משאבים באמצעות Config Controller

כאן מוסבר איך ליצור מופע של Config Controller שמגיע עם Config Connector,‏ Policy Controller ו-סנכרון תצורות שכבר מותקנים בו. בשלב הבא, נסביר איך להשתמש במכונה על ידי ביצוע המשימות הבאות:

  • משתמשים ב-Config Connector כדי ליצור ולנהל משאב Google Cloud .
  • יוצרים אילוץ Policy Controller כדי לאכוף מדיניות ולזהות הפרת מדיניות לפני הפריסה.
  • מגדירים את GitOps על ידי הגדרת סנכרון תצורות לסנכרון ממאגר לדוגמה שמכיל משאב Google Cloud .

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  7. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  8. מפעילים את ממשקי ה-API של KRM,‏ GKE,‏ מנהל המשאבים ו-Service Usage:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  9. התקינו את ה-CLI של Google Cloud.

  10. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  11. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  12. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  13. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  14. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  15. מפעילים את ממשקי ה-API של KRM,‏ GKE,‏ מנהל המשאבים ו-Service Usage:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לניהול משאבי הדוגמה באמצעות Config Controller שמופיעים במדריך הזה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

יצירת מכונה של Config Controller

  1. בטרמינל, יוצרים מופע של Autopilot Config Controller:

    gcloud anthos config controller create cc-example \
        --location=us-central1 \
        --full-management
    

    הפעולה הזו יכולה להימשך עד 15 דקות.

    הפלט שיתקבל:

    Created instance [cc-example].
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for krmapihost-cc-example.
    
  2. כדי לוודא שהמופע נוצר, צופים ברשימת המופעים של Config Controller:

    gcloud anthos config controller list --location=us-central1
    

    הפלט שיתקבל:

    NAME                 LOCATION                 STATE
    cc-example           us-central1              RUNNING
    

מתן ההרשאה הנדרשת ל-Config Controller

בקטע הזה נותנים ל-Config Controller הרשאה לנהל משאבים: Google Cloud

  1. מגדירים משתנה סביבה לכתובת האימייל בחשבון השירות:

    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
        -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    
  2. יוצרים את קשירת המדיניות:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "roles/owner" \
        --project PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

    הפלט אמור להיראות כך:

    Updated IAM policy for project [PROJECT_ID].
    auditConfigs:
    - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_READ
      - logType: DATA_WRITE
      service: gkehub.googleapis.com
    # Remainder of output omitted
    

שימוש במופע Config Controller

בסעיפים הבאים נסביר איך אפשר להשתמש במופע של Config Controller.

יצירת Google Cloud משאב באמצעות Config Connector

באמצעות מופע Config Controller, תוכלו להשתמש ב-Config Connector כדי לנהל הרבה Google Cloud שירותים ומשאבים באמצעות כלי Kubernetes וממשקי API. בקטע הזה משתמשים ב-Config Controller כדי ליצור משאב PubSubTopic.

כדי ליצור נושא Pub/Sub באמצעות Config Connector, מבצעים את השלבים הבאים:

  1. משתמשים ב-Config Connector כדי להפעיל את Pub/Sub API:

    1. באמצעות כלי לעריכת טקסט שבוחרים, יוצרים קובץ בשם enable-pubsub.yaml ומעתיקים אליו את קוד ה-YAML הבא:

      # enable-pubsub.yaml
      apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
      kind: Service
      metadata:
        name: pubsub.googleapis.com
        namespace: config-control
      spec:
        projectRef:
          external: projects/PROJECT_ID
      

      מחליפים את PROJECT_ID במזהה הפרויקט.

    2. כדי להפעיל את Pub/Sub API, צריך להחיל את המניפסט על האשכול:

      kubectl apply -f enable-pubsub.yaml
      

      יכול להיות שיחלפו כמה דקות עד שה-API יופעל.

  2. משתמשים ב-Config Connector כדי ליצור נושא Pub/Sub:

    1. יוצרים קובץ בשם pubsub-topic.yaml ומעתיקים אליו את קוד ה-YAML הבא:

      # pubsub-topic.yaml
      apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
      kind: PubSubTopic
      metadata:
        annotations:
          cnrm.cloud.google.com/project-id: PROJECT_ID
        labels:
          label-one: "value-one"
        name: example-topic
        namespace: config-control
      
    2. יוצרים את הנושא ב-Pub/Sub:

      kubectl apply -f pubsub-topic.yaml
      
  3. כדי לוודא ש-Config Controller יצר את המשאב ב- Google Cloud, אפשר להציג את רשימת הנושאים ב-Pub/Sub:

    gcloud pubsub topics list
    

    הפלט אמור להיראות כך:

    ---
    name: projects/PROJECT_ID/topics/start-instance-event
    ---
    labels:
      label-one: value-one
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/example-topic
    

אכיפת מדיניות באמצעות Policy Controller

בעזרת מופע Config Controller אפשר להשתמש ב-Policy Controller ובאילוצים של Policy Controller. כחלק מההתקנה של Policy Controller,‏ Config Controller מתקין אוטומטית את ספריית תבניות האילוצים. אתם יכולים להשתמש בתבניות בספרייה הזו כדי לאכוף מגוון של אמצעי בקרה נפוצים בנושאי אבטחה ותאימות במופעים של Config Controller.

בקטע הזה יוצרים אילוץ באמצעות תבנית האילוצים GCPStorageLocationConstraintV1. התבנית הזו מאפשרת להגביל את המיקום שבו אפשר ליצור קטגוריות של Cloud Storage. האילוץ שיוצרים באמצעות התבנית הזו מגביל את המיקום ל-us-central1. כדאי להשתמש במגבלה הזו כדי לוודא שהמאגדים נוצרים באזור שמציע את המחיר והביצועים הכי טובים.

כדי ליצור את האילוץ:

  1. יוצרים קובץ בשם bucket-constraint.yaml ומעתיקים אליו את קוד ה-YAML הבא:

    # bucket-constraint.yaml
    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: GCPStorageLocationConstraintV1
    metadata:
      name: storage-only-in-us-central1
    spec:
      match:
        kinds:
        - apiGroups:
          - storage.cnrm.cloud.google.com
          kinds:
          - StorageBucket
      parameters:
        locations:
        - us-central1
    
  2. יוצרים את האילוץ:

    kubectl apply -f bucket-constraint.yaml
    

    הפלט שיתקבל:

    gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
    
  3. כדי להוכיח שהאילוץ פועל, מנסים להשתמש ב-Config Connector כדי ליצור משאב StorageBucket ב-asia-southeast1:

    1. יוצרים קובץ בשם asia-storage-bucket.yaml ומעתיקים אליו את קוד ה-YAML הבא:

      # asia-storage-bucket.yaml
      apiVersion: storage.cnrm.cloud.google.com/v1beta1
      kind: StorageBucket
      metadata:
        name: bucket-in-disallowed-location
        namespace: config-control
      spec:
        location: asia-southeast1
      
    2. מנסים ליצור את הקטגוריה של Cloud Storage:

      kubectl apply -f asia-storage-bucket.yaml
      

      הפלט שיתקבל:

      Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
      

הגדרה של GitOps באמצעות סנכרון תצורות

‫סנכרון תצורות הוא שירות GitOps שמאפשר לסנכרן את מופע Config Controller עם הגדרות, מדיניות וGoogle Cloud משאבים שמאוחסנים במאגר Git, בתמונה של OCI או במאגר Helm. מכיוון ש-סנכרון תצורות מבצע באופן רציף התאמה בין המצב של Config Controller לבין ההגדרות במקור, הוא יכול לעזור לכם לוודא שההגדרות של המכונות עקביות.

בקטע הזה, מסנכרנים את מופע Config Controller עם מאגר ציבורי ב-GitHub. מאגר המידע הזה מכיל עוד משאב PubSubTopic. על ידי סנכרון המופע שלכם מהמאגר הזה, המשאב נוצר באופן אוטומטי ומיושם במופע שלכם. אפשר ליצור את המשאבים באמצעות סנכרון תצורות (במקום להחיל את המשאב ישירות) אם רוצים להשתמש בתהליך עבודה של GitOps.

  1. כדי לסנכרן מ-GitHub, צריך להגדיר Cloud NAT. הסיבה לכך היא שמופע Config Controller מגובה על ידי אשכול GKE פרטי, ולצמתים של אשכול פרטי אין גישה לאינטרנט יוצא:

    1. יוצרים נתב Cloud NAT. צריך את הנתב הזה כדי להגדיר את שער ה-NAT.

      gcloud compute routers create cc-nat-router \
          --network default \
          --region us-central1
      

      הפלט אמור להיראות כך:

      Creating router [cc-nat-router]...done.
      NAME           REGION       NETWORK
      cc-nat-router  us-central1  default
      
    2. מגדירים שער NAT בנתב שיצרתם בשלב הקודם:

      gcloud compute routers nats create cc-nat-config \
          --router-region us-central1 \
          --router cc-nat-router \
          --nat-all-subnet-ip-ranges \
          --auto-allocate-nat-external-ips
      

      הפלט שיתקבל:

      Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
      
  2. כדי להגדיר את מופע Config Controller לסנכרון ממאגר לדוגמה, יוצרים קובץ בשם cc-rootsync.yaml ומעתיקים אליו את ה-YAML הבא:

    # cc-rootsync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
        branch: main
        dir: config-controller-quickstart
        auth: none
    
  3. מחילים את ההגדרה:

    kubectl apply -f cc-rootsync.yaml
    

    אחרי שהמופע מסתנכרן מהמאגר, סנכרון תצורות יוצר את הנושא ב-Pub/Sub ומחיל אותו על מופע Config Controller.

  4. מוודאים ש-Config Sync מסנכרן את מאגר ה-Git עם מופע Config Controller:

    nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
    

    הפלט אמור להיראות כך:

    *gke_PROJECT_ID_us-central1_krmapihost-cc-example
    --------------------
    <root>:root-sync                         https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main
    SYNCED @ 2023-01-10 18:31:02 +0000 UTC   715b4295d3eac07b057cce2543275c1ee104cad8
    Managed resources:
       NAMESPACE        NAME                                                               STATUS   SOURCEHASH
       config-control   pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync  Current   715b429
       config-control   service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com   Current   715b429
    

    אם הפלט הזה לא מופיע, צריך לחכות כמה דקות ולנסות שוב.

  5. מוודאים ש-Config Controller יצר את המשאב:

    gcloud pubsub topics list
    

    הפלט אמור להיראות כך:

    name: projects/PROJECT_ID/topics/start-instance-event
    ---
    labels:
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/sample-topic
    ---
    labels:
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync
    ---
    labels:
      label-one: value-one
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/example-topic
    

    בפלט הזה אפשר לראות את Pub/Sub שיצרתם בקטע יצירת מופע של Config Controller ואת זה שיצרתם על ידי סנכרון המופע עם מאגר GitHub.

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

מחיקת המשאבים הבודדים

  1. מחיקת משאב Config Connector PubSubTopic:

    kubectl delete -f pubsub-topic.yaml
    
  2. מוחקים את האילוץ של Policy Controller:

    kubectl delete -f bucket-constraint.yaml
    
  3. מחיקת נתב NAT:

    gcloud compute routers delete cc-nat-router \
        --project=PROJECT_ID \
        --region=us-central1
    

    כשמתבקשים, מקישים על y.

  4. מוחקים את משאב Pub/Sub שנוצר על ידי סנכרון תצורות:

    kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
    
  5. מחיקת משאב RootSync:

    kubectl delete rootsync root-sync -n config-management-system
    
  6. באמצעות כלי לעריכת טקסט שאתם מעדיפים, מוחקים את כל קובצי ה-YAML שיצרתם:

    • enable-pubsub.yaml
    • pubsub-topic.yaml
    • bucket-constraint.yaml
    • asia-storage-bucket.yaml
    • cc-rootsync.yaml
  7. מוחקים את מופע Config Controller:

    gcloud anthos config controller delete --location=us-central1 cc-example
    

    כשמתבקשים, מקישים על y.

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