כדי להשתמש ב-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 כך שיסתנכרן עם המצב המרוחק:
מוסיפים את ההגדרה הבאה לקובץ 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 לא תומך באימות של פרטי הכניסה ומשתמש בנקודת הקצה בסגנון הנתיב.מאתחלים את העריכות החדשות בקובץ המצב בקטגוריית האחסון שציינתם בשלב הקודם:
terraform initיכול להיות ש-Terraform יבקש אזור AWS כקלט חובה, אבל הערך לא ישמש אתכם כי אתם משתמשים באחסון אובייקטים של GDC. כדי לעמוד בדרישה, אפשר להזין כל אזור של AWS.
הגדרת ההרשאות
בנוסף להרשאות שנדרשות לביצוע משימה ספציפית באמצעות 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