כדי להשתמש ב-Terraform בסביבה עם Air Gap של Google Distributed Cloud (GDC), צריך להוריד אותו ולהגדיר אותו לטיפול במשאבים ב-Kubernetes.
לפני שמתחילים
מורידים את Terraform בגרסה 1.6.3 ואילך לתחנת העבודה, לפי המסמכים של HashiCorp: https://developer.hashicorp.com/terraform/install. הגדרת הקצה העורפי במסמך הזה משתמשת בהגדרות שלא נתמכות בגרסאות ישנות יותר של Terraform.
מוודאים שיש לכם קטגוריית אחסון קיימת ב-GDC. אם אין לכם קטגוריית אחסון, צרו אחת.
מוודאים שהמערכת יכולה לזהות את אישור ה-CA שמשמש את מאגר האובייקטים.
ניהול קובץ תמונת המצב
קובץ תמונת המצב ב-Terraform משמש לתיעוד המצב הנוכחי של הפריסה ולמיפוי שלו להגדרות של Terraform. מכיוון שמאגר האובייקטים של GDC מוטמע באמצעות S3, אתם יכולים להשתמש ב-API של Terraform S3 כדי לסנכרן עם קובץ תמונת מצב משותף. כדי לעשות את זה, צריך להגדיר את 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 כשהוא מעלה את קובץ תמונת המצב.
מאתחלים את העריכות החדשות של קובץ תמונת המצב בקטגוריית האחסון שציינתם בשלב הקודם:
terraform init
הגדרת ההרשאות
בנוסף להרשאות שנדרשות כדי לבצע משימה ספציפית באמצעות Terraform, כמו יצירת פרויקט ב-GDC, אתם צריכים גם הרשאות לצפייה בהגדרות של משאבים בהתאמה אישית בהיקף הזה. מפעילים את ההרשאות שנדרשות כדי להשתמש ב-Terraform:
יוצרים את משאב התפקיד באשכול
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 הגלובלי.מקשרים את תפקיד האשכול שהוגדר בשלב הקודם למשתמש:
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.
בקובץ Terraform במודול, כמו הקובץ
main.tf, מוסיפים את הבלוקrequired_providersהבא:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }מאתחלים את ספריית העבודה ב-Terraform כדי להתקין את הספק:
terraform init