הגדרת Terraform

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

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

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

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

  • מוודאים שהמערכת יכולה לזהות את האישור של רשות האישורים (CA) שמשמשת לאחסון אובייקטים.

ניהול קובץ המצב

קובץ המצב ב-Terraform משמש לתיעוד המצב הנוכחי של הפריסה ולמיפוי שלו להגדרות של Terraform. מכיוון שאחסון האובייקטים ב-GDC מיושם באמצעות S3, אפשר להשתמש ב-Terraform S3 API כדי לסנכרן עם קובץ מצב משותף. כדי לעשות את זה, צריך להגדיר את Terraform כך שיסתנכרן עם המצב המרוחק:

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

    terraform {
      backend "s3" {
        bucket = "BUCKET_FQN"
        key = "TF_STATE_PATH"
        endpoint = "BUCKET_ENDPOINT"
        region = "ZONE"
        skip_credentials_validation = true
        force_path_style = true
        access_key = "ACCESS_KEY"
        secret_key = "SECRET_KEY"
        ...
      }
    }
    

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

    • BUCKET_FQN: השם המוגדר במלואו מBucket המשאב המותאם אישית.

    • TF_STATE_PATH: המיקום של קובץ המצב של Terraform שצריך לאחסן בקטגוריית האחסון.

    • BUCKET_ENDPOINT: נקודת הקצה מBucketהמשאב המותאם אישית.

    • ZONE: האזור של המשאב המותאם אישית Bucket.

    • ACCESS_KEY: מפתח הגישה שהתקבל מהסוד שמכיל את פרטי הגישה שלכם. פועלים לפי השלבים במאמר קבלת פרטי כניסה לגישה לדלי כדי לקבל את מפתח הגישה.

    • SECRET_KEY: המפתח הסודי שהתקבל מהסוד שמכיל את פרטי הגישה. פועלים לפי ההוראות במאמר קבלת פרטי כניסה לגישה לקטגוריה כדי לקבל את המפתח הסודי.

    צריך להגדיר את skip_credentials_validation ואת force_style_path ל-true כי GDC לא תומך באימות של פרטי הכניסה ומשתמש בנקודת הקצה בסגנון הנתיב.

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

    terraform init
    

    יכול להיות ש-Terraform יבקש אזור AWS כקלט חובה, אבל הערך לא ישמש אתכם כי אתם משתמשים באחסון אובייקטים של GDC. כדי לעמוד בדרישה, אפשר להזין כל אזור של AWS.

הגדרת ההרשאות

בנוסף להרשאות שנדרשות לביצוע משימה ספציפית באמצעות Terraform, כמו יצירת פרויקט GDC, אתם צריכים גם הרשאות לצפייה בהגדרות של משאבים בהתאמה אישית בהיקף הזה. הקצאת ההרשאות הנדרשות לשימוש ב-Terraform:

  1. יוצרים את משאב התפקיד באשכול 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"]
    EOF
    

    מחליפים את KUBECONFIG בקובץ kubeconfig של שרת ה-API או של האשכול שמארח את המשאב שמנוהל באמצעות Terraform. לדוגמה, רוב המשאבים פועלים בשרת Management API. לעומסי עבודה בקונטיינרים, מגדירים את קובץ kubeconfig של אשכול Kubernetes. אם אתם מנהלים משאב גלובלי, הקפידו להגדיר את שרת ה-API הגלובלי.

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

    kubectl apply --kubeconfig KUBECONFIG -f - <<EOF
    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
    

חוזרים על השלבים האלה לכל שרת API או אשכול שרוצים להגדיר עבורם הרשאות Terraform.

התקנה והגדרה של ספק Terraform

כדי להקצות ולנהל משאבי Kubernetes, צריך להתקין את Kubernetes Provider.

  1. בקובץ Terraform במודול, כמו הקובץ main.tf, מוסיפים את בלוק required_providers הבא:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    
  2. מאתחלים את ספריית העבודה של Terraform כדי להתקין את הספק:

    terraform init