יצירת אשכולות אדמין

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

אשכולות אדמין שמנהלים עומסי עבודה (workloads) של כמה אשכולות יכולים לספק אמינות גבוהה (HA). ב-HA cluster, אם צומת אחד של מישור הבקרה נכשל, צמתים אחרים ימשיכו לפעול.

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

יוצרים אשכול אדמין באמצעות הפקודה bmctl. אחרי שיוצרים אשכול אדמין, יוצרים אשכולות משתמשים להרצת עומסי עבודה.

דרישות מוקדמות:

  • הגרסה האחרונה של bmctl מורדת (gs://anthos-baremetal-release/bmctl/1.34.100-gke.93/linux-amd64/bmctl) מ-Cloud Storage.
  • תחנת עבודה שמופעלת בה bmctl כוללת קישוריות לרשת לכל הצמתים באשכולות המשתמשים של היעד.
  • לתחנת העבודה שמופעלת בה bmctl יש קישוריות לרשת לשרת ה-API של האשכול (VIP של מישור הבקרה).
  • מפתח ה-SSH שמשמש ליצירת אשכול האדמין זמין ל-root או למשתמש שאינו משתמש-על עם הרשאות sudoללא סיסמה בכל הצמתים באשכול האדמין של היעד.
  • חשבון השירות Connect-register מוגדר לשימוש עם Connect.

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

הפעלת SELinux

אם רוצים להפעיל את SELinux כדי לאבטח את הקונטיינרים, צריך לוודא ש-SELinux מופעל במצב Enforced בכל המכונות המארחות. החל מגרסה 1.9.0 ואילך של Google Distributed Cloud, אפשר להפעיל או להשבית את SELinux לפני או אחרי יצירת אשכולות או שדרוגים של אשכולות. ‫SELinux מופעל כברירת מחדל ב-Red Hat Enterprise Linux ‏ (RHEL). אם SELinux מושבת במכונות המארחות שלכם או שאתם לא בטוחים, תוכלו לעיין במאמר אבטחת הקונטיינרים באמצעות SELinux כדי לקבל הוראות להפעלה שלו.

‫Google Distributed Cloud תומך ב-SELinux רק במערכות RHEL.

מתחברים ל-CLI של gcloud ויוצרים קובץ תצורה של אשכול אדמין

  1. מגדירים את פרטי ברירת המחדל שאפשר להשתמש בהם ב-Google Distributed Cloud כדי ליצור את האשכול באמצעות הפקודה הבאה:

    gcloud auth application-default login
    
  2. כדי להשתמש בתכונות של הפעלת API אוטומטית ויצירת חשבון שירות שמתוארות בדף הזה, צריך להעניק את התפקיד 'בעלים של הפרויקט' לאותה ישות מורשית. אם אי אפשר להקצות לישות המורשית את התפקיד בעלי הפרויקט, עוברים לשלב הבא.

  3. כדי לוודא שיצירת האשכול תצליח בלי להקצות את התפקיד 'בעלים של הפרויקט', מוסיפים את תפקידי ה-IAM הבאים לחשבון המשתמש:

    • אדמין בחשבון שירות
    • אדמין של מפתח לחשבון שירות
    • אדמין IAM של פרויקט
    • צפייה ב-Compute
    • אדמין של שימוש בשירות

    אם החשבון הראשי הוא חשבון שירות עם התפקידים האלה, אפשר להריץ את הפקודה:

    export GOOGLE_APPLICATION_CREDENTIALS=JSON_KEY_FILE
    

    מחליפים את JSON_KEY_FILE בנתיב לקובץ מפתח ה-JSON של חשבון השירות.

  4. מקבלים את המזהה של פרויקט Google Cloud ומאחסנים אותו במשתנה סביבה כדי להשתמש בו ליצירת אשכול:

    export CLOUD_PROJECT_ID=$(gcloud config get-value project)
    

יצירת הגדרת אדמין לאשכול באמצעות bmctl

אחרי שנכנסים ל-CLI של gcloud ומגדירים את הפרויקט, אפשר ליצור את קובץ התצורה של האשכול באמצעות הפקודה bmctl.

בדוגמה הבאה, כל חשבונות השירות נוצרים באופן אוטומטי על ידי הפקודה bmctl create config:

bmctl create config -c ADMIN_CLUSTER_NAME --enable-apis \
    --create-service-accounts --project-id=CLOUD_PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ADMIN_CLUSTER_NAME: השם של האשכול החדש.
  • CLOUD_PROJECT_ID: מזהה הפרויקט ב- Google Cloud או משתנה הסביבה $CLOUD_PROJECT_ID.

דוגמה ליצירת קובץ הגדרה לאשכול אדמין בשם admin1 שמשויך למזהה הפרויקט my-gcp-project:

bmctl create config -c admin1 --create-service-accounts --enable-apis --project-id=my-gcp-project

הקובץ נכתב בנתיב bmctl-workspace/admin1/admin1.yaml.

במקום להפעיל ממשקי API וליצור חשבונות שירות באופן אוטומטי, אפשר גם לספק לחשבונות השירות הקיימים הרשאות IAM מתאימות. כלומר, אפשר לדלג על יצירה אוטומטית של חשבון שירות בדוגמה הקודמת בפקודה bmctl:

bmctl create config -c admin1 --project-id=my-gcp-project

עריכת קובץ התצורה של האשכול

אחרי שיצרתם קובץ תצורה של אשכול, עורכים אותו כדי לבצע את השינויים הבאים:

  1. מזינים את המפתח הפרטי של SSH כדי לגשת לצמתים של אשכול האדמין:

    # bmctl configuration variables. Because this section is valid YAML but not a valid Kubernetes
    # resource, this section can only be included when using bmctl to
    # create the initial admin/admin cluster. Afterwards, when creating user clusters by directly
    # applying the cluster and node pool resources to the existing cluster, you must remove this
    # section.
    gcrKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
    sshPrivateKeyPath: /path/to/your/ssh_private_key
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-cloud-ops.json
    
  2. רושמים את האשכולות ב-Fleet. מזהה הפרויקט שציינתם בפקודה bmctl create config נוסף אוטומטית לשדה gkeConnect.projectID בקובץ ההגדרה של האשכול. הפרויקט הזה נקרא פרויקט המארח של ה-Fleet.

    • אם יצרתם את קובץ התצורה באמצעות התכונות של הפעלת API אוטומטית ויצירת חשבון שירות, אתם יכולים לדלג על השלב הזה.

    • אם יצרתם את קובץ התצורה בלי להשתמש בתכונות של הפעלת API אוטומטית ויצירת חשבון שירות, צריך להפנות למפתחות ה-JSON של חשבון השירות שהורדתם בשדות gkeConnectAgentServiceAccountKeyPath ו-gkeConnectRegisterServiceAccountKeyPath המתאימים בקובץ התצורה של האשכול.

    • אפשר גם להוסיף את הדגל gkeConnect.location למפרט האשכול כדי לציין את האזור Google Cloud שבו פועלים שירותי Fleet ו-Connect. חברות אזורית כזו מגבילה את התנועה של שירותי צי הרכב לאזור שלכם. אם כוללים את gkeConnect.location במפרט האשכול, האזור שמציינים צריך להיות זהה לאזור שהוגדר ב-clusterOperations.location. אם האזורים לא זהים, יצירת האשכול תיכשל.

  3. בודקים שההגדרה מציינת סוג אשכול של admin (ערך ברירת המחדל):

    spec:
      # Cluster type. This can be:
      #   1) admin:  to create an admin cluster. This can later be used to create user clusters.
      #   2) user:   to create a user cluster. Requires an existing admin cluster.
      #   3) hybrid: to create a hybrid cluster that runs admin cluster components and user workloads.
      #   4) standalone: to create a cluster that manages itself, runs user workloads, but does not manage other clusters.
      type: admin
    
  4. אם GKE On-Prem API מופעל בפרויקטGoogle Cloud , כל האשכולות בפרויקט נרשמים ל-GKE On-Prem API באופן אוטומטי באזור שהוגדר ב-clusterOperations.location.

    • אם רוצים לרשום את כל האשכולות בפרויקט ל-GKE On-Prem API, צריך לבצע את השלבים שבקטע לפני שמתחילים כדי להפעיל את GKE On-Prem API בפרויקט ולהשתמש בו.

    • אם לא רוצים לרשום את האשכול ל-GKE On-Prem API, צריך לכלול את הקטע הזה ולהגדיר את gkeOnPremAPI.enabled ל-false. אם לא רוצים לרשום אף אשכול בפרויקט, צריך להשבית את gkeonprem.googleapis.com (שם השירות של GKE On-Prem API) בפרויקט. הוראות מפורטות מופיעות במאמר השבתת שירותים.

  5. משנים את קובץ התצורה כדי לציין מישור בקרה מרובה-צמתים עם זמינות גבוהה. כדי להשיג רוב קבוע לזמינות גבוהה, צריך לציין מספר אי-זוגי של צמתים:

      # Control plane configuration
      controlPlane:
        nodePoolSpec:
          nodes:
          # Control plane node pools. Typically, this is either a single machine
          # or 3 machines if using a high availability deployment.
          - address: 10.200.0.4
          - address: 10.200.0.5
          - address: 10.200.0.6
    
  6. מציינים את צפיפות ה-Pods של צמתי האשכול:

    ....
    # NodeConfig specifies the configuration that applies to all nodes in the cluster.
    nodeConfig:
      # podDensity specifies the pod density configuration.
      podDensity:
        # maxPodsPerNode specifies at most how many pods can be run on a single node.
        maxPodsPerNode: 250
    ....
    

    במקרה של אשכולות ניהול, הערכים האפשריים של maxPodsPerNode הם 32-250 לאשכולות HA ו-64-250 לאשכולות שאינם HA. ערך ברירת המחדל אם לא מציינים ערך הוא 110. אחרי שיוצרים את האשכול, אי אפשר לעדכן את הערך הזה.

    צפיפות ה-Pods מוגבלת גם על ידי משאבי ה-IP הזמינים של האשכול. פרטים נוספים זמינים במאמר בנושא רשתות של Pod.

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

משתמשים בפקודה bmctl כדי לפרוס את האשכול:

bmctl create cluster -c ADMIN_CLUSTER_NAME

ADMIN_CLUSTER_NAME מציין את שם האשכול שנוצר בקטע הקודם.

בדוגמה הבאה מוצגת הפקודה ליצירת אשכול בשם admin1:

bmctl create cluster -c admin1

דוגמאות להגדרות של אשכולות אדמין

דוגמאות להגדרות של אשכולות אדמין מופיעות במאמר אשכולות אדמין בדוגמאות להגדרות של אשכולות.