שימוש ב-Terraform

כדי להגדיר את Terraform בסביבה של Google Distributed Cloud (GDC)‎ עם air gap, צריך להוריד אותו ולהגדיר אותו לטיפול במשאבים ב-Kubernetes.

המסמך הזה מיועד לכל קבוצות הקהלים שצריכות להגדיר את Terraform כדי לנהל את תהליכי העבודה של החומרה והתוכנה שלהן עם air gap. מידע נוסף זמין במאמר קהלי היעד של GDC עם air gap.

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

  • מורידים את Terraform בגרסה 1.6.3 ואילך לתחנת העבודה, לפי המסמכים של HashiCorp: ‏https://developer.hashicorp.com/terraform/install. הגדרת הקצה העורפי במסמך הזה משתמשת בהגדרות שלא נתמכות בגרסאות ישנות יותר של Terraform.

  • מוודאים שיש לכם קטגוריית אחסון קיימת ב-GDC. אם אין לכם קטגוריית אחסון, אתם צריכים ליצור אחת. מידע נוסף זמין במאמר יצירת קטגוריות אחסון.

  • מוודאים שהמערכת יכולה לזהות את אישור ה-CA שמשמש את מאגר האובייקטים.

  • מתקינים את gdcloud CLI. מידע נוסף זמין במאמר שימוש ב-gdcloud CLI.

  • יוצרים את קובץ ה-kubeconfig לשרת ה-API או לאשכול שמארח את המשאבים שרוצים לנהל באמצעות Terraform. מידע נוסף זמין במאמר קבלת קובץ kubeconfig.

הגדרת Terraform

כדי להגדיר את Terraform בסביבת GDC, מבצעים את הפעולות הבאות:

  1. במודול של Terraform, או באוסף של קובצי Terraform בתחנת העבודה, יוצרים את הקובץ main.tf ומוסיפים את ההגדרות הבאות:

    terraform {
      backend "s3" {
        bucket = "BUCKET_FQN"
        key = "TF_STATE_PATH"
        region = "ZONE"
        endpoints = {
          s3 = "BUCKET_ENDPOINT"
        }
        use_path_style = true
        access_key = "ACCESS_KEY"
        secret_key = "SECRET_KEY"
        skip_credentials_validation = true
        skip_requesting_account_id = true
        skip_metadata_api_check = true
        skip_region_validation = true
        skip_s3_checksum = true
      }
    }
    

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

    • ‫BUCKET_FQN: הערך של status.fullyQualifiedName מהמשאב המותאם אישית Bucket. לדוגמה, aabc2z8-platform-terraform-state.

    • ‫TF_STATE_PATH: הנתיב של קובץ תמונת המצב של Terraform שרוצים לאחסן בקטגוריית האחסון. לדוגמה, main.tfstate.

    • ‫ZONE: האזור של המשאב בהתאמה אישית של Bucket (status.region). לדוגמה, zone1. ב-Terraform נדרש ערך של אזור, אבל הוא לא נבדק במאגר האובייקטים של GDC.

    • ‫BUCKET_ENDPOINT: הערך של status.endpoint מהמשאב המותאם אישית Bucket. לדוגמה, https://objectstorage.org-1.zone1.google.gdch.test.

    • ‫ACCESS_KEY: מפתח הגישה שנרכש מהסוד שמכיל את פרטי הכניסה שלכם. למידע נוסף על קבלת מפתח הגישה, ראו קבלת פרטי כניסה לגישה לקטגוריה. הערך בסוד מקודד ב-base64. צריך לפענח אותו לפני שמשתמשים בו.

    • ‫SECRET_KEY: המפתח הסודי שנרכש מהסוד שמכיל את פרטי הכניסה שלכם. למידע נוסף על קבלת המפתח הסודי, ראו קבלת פרטי כניסה לגישה לקטגוריה. הערך בסוד מקודד ב-base64. צריך לפענח אותו לפני שמשתמשים בו.

    מאגר האובייקטים של GDC תואם ל-S3, אבל הוא לא AWS. שאר ההגדרות קובעות את הקצה העורפי לאחסון ב-S3 שאינו של AWS:

    • ‫use_path_style: משתמש בכתובת קטגוריה בסגנון נתיב למאגר אובייקטים ב-GDC.

    • ‫skip_credentials_validation ו-skip_requesting_account_id: מונעים מ-Terraform לשלוח קריאות ל-AWS STS ול-AWS IAM. ‫GDC לא מספק את השירותים האלה.

    • ‫skip_metadata_api_check: מונע מ-Terraform לשלוח שאילתות לשירות המטא-נתונים של AWS EC2.

    • ‫skip_region_validation: מאפשר להשתמש בשם האזור כ-region.

    • ‫skip_s3_checksum: מונע מ-Terraform לבקש סיכום ביקורת (checksum) של SHA-256 כשהוא מעלה את קובץ תמונת המצב.

  2. מאתחלים את קובץ תמונת המצב של Terraform בקטגוריית האחסון שציינתם בשלב הקודם:

    terraform init
    
  3. פורסים את המשאב של תפקיד האשכול crd-viewer ומקשרים אותו לחשבון המשתמש:

    kubectl apply --kubeconfig KUBECONFIG -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: crd-viewer
    rules:
    - apiGroups: ["apiextensions.k8s.io"]
      resources: ["customresourcedefinitions"]
      verbs: ["get", "list", "watch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: crd-viewer-binding
    subjects:
    - kind: User
      name: USER_EMAIL
    roleRef:
      kind: ClusterRole
      name: crd-viewer
      apiGroup: rbac.authorization.k8s.io
    EOF
    

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

    • ‫KUBECONFIG: קובץ ה-kubeconfig של שרת ה-API או האשכול שמארח את המשאבים שאתם מנהלים באמצעות Terraform.

    • ‫USER_EMAIL: כתובת האימייל של המשתמש שרוצים לקשר לתפקיד.

    פורסים את התפקיד crd-viewer בכל שרת API או אשכול שרוצים להשתמש בו ב-Terraform.

  4. בקובץ main.tf, מוסיפים את הבלוק הבא של required_providers:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    

    ההגדרה הזו מתקינה את ספק Kubernetes כדי להקצות ולנהל משאבי Kubernetes בסביבת GDC.

  5. מאתחלים את ספריית העבודה ב-Terraform כדי להתקין את הספק:

    terraform init
    

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