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

כדי לרשום אשכול Kubernetes מחוץ ל- Google Cloud , צריך לבצע את השלבים הבאים בנוסף לדרישות המוקדמות הכלליות.

צריך לוודא שיש חיבור לרשת

כדי לרשום את האשכול בהצלחה, צריך לוודא שאפשר להגיע לדומיינים שבהמשך מאשכול Kubernetes.

  • cloudresourcemanager.googleapis.com פותר את המטא-נתונים שקשורים לפרויקט Google Cloud שאליו מתחברים עם האשכול.
  • oauth2.googleapis.com כדי לקבל אסימוני OAuth לטווח קצר לפעולות של סוכנים מול gkeconnect.googleapis.com.
  • gkeconnect.googleapis.com כדי להגדיר את הערוץ שמשמש לקבלת בקשות מ- Google Cloud ולשליחת תשובות.
  • gkehub.googleapis.com כדי ליצור משאבי חברות ב-Fleet בצד Google Cloudשתואמים לאשכול שאליו אתם מתחברים Google Cloud.
  • www.googleapis.com כדי לאמת אסימוני שירות מבקשות שירות נכנסות. Google Cloud
  • gcr.io ו-storage.googleapis.com כדי למשוך את תמונת הסוכן של GKE Connect.

אם רוצים לרשום את האשכול באמצעות Workload Identity של Fleet, צריך לוודא שאפשר להגיע גם לדומיינים הבאים:

  • securetoken.googleapis.com
  • iamcredentials.googleapis.com
  • sts.googleapis.com

אם אתם משתמשים בשרת proxy ל-Connect, אתם צריכים לעדכן גם את רשימת ההיתרים של השרת בדומיינים הרלוונטיים.

אם אתם משתמשים ב-gcloud כדי לרשום את אשכול Kubernetes, צריך גם לוודא שאפשר להגיע לדומיינים האלה בסביבה שבה אתם מריצים את פקודות gcloud.

שימוש ב-VPC Service Controls

אם אתם רוצים להשתמש ב-VPC Service Controls כדי להוסיף אבטחת מידע לאפליקציה, אתם צריכים לוודא שהשירותים הבאים נמצאים בגבולות גזרה לשירות שלכם:

  • ‫Resource Manager API‏ (cloudresourcemanager.googleapis.com)
  • GKE Connect API ‏ (gkeconnect.googleapis.com)
  • Fleet API ‏ (gkehub.googleapis.com)

אם רוצים לרשום את האשכול עם Workload Identity ב-Fleet, צריך גם את השירותים הבאים:

  • ‫IAM Service Account Credentials API ‏ (iamcredentials.googleapis.com)
  • ‫Security Token Service API ‏ (sts.googleapis.com)

צריך גם להגדיר קישוריות פרטית כדי לקבל גישה לממשקי ה-API הרלוונטיים. הוראות מפורטות מופיעות במאמר הגדרת קישוריות פרטית.

הגדרת הזהות

כל האפשרויות של רישום ידני של אשכולות מחוץ ל- Google Cloud מחייבות אתכם להגדיר אימות ל-Google. ההגדרה יכולה להיות:

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

יוצרים Google Cloud חשבון שירות באמצעות gcloud

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

כדי ליצור את הקובץ הזה:

gcloud

כדי ליצור חשבון שירות, מריצים את הפקודה הבאה:

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID

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

gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID

אם אתם יוצרים חשבון שירות נפרד לכל אשכול Kubernetes שאתם רושמים, אתם צריכים לקשר את תפקיד ה-IAM ‏gkehub.connect לחשבון השירות של האשכול המתאים באמצעות תנאי IAM בשם החברות באשכול:

MEMBERSHIP_NAME=MEMBERSHIP_NAME
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
   --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
   --role="roles/gkehub.connect" \
   --condition "expression=resource.name == \
'projects/${FLEET_HOST_PROJECT_ID}/locations/global/memberships/${MEMBERSHIP_NAME}',\
title=bind-${SERVICE_ACCOUNT_NAME}-to-${MEMBERSHIP_NAME}"

אחרת, מקשרים את התפקיד לחשבון השירות לכל האשכולות בפרויקט בלי התנאי.

FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
   --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
   --role="roles/gkehub.connect"

מורידים את קובץ ה-JSON של המפתח הפרטי של חשבון השירות. משתמשים בקובץ הזה כשרושמים אשכול:

FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud iam service-accounts keys create LOCAL_KEY_PATH \
   --iam-account=SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com \
   --project=${FLEET_HOST_PROJECT_ID}

where:

  • FLEET_HOST_PROJECT_ID הוא מזהה הפרויקט ב- Google Cloud שבו רוצים לרשום את האשכולות. איך מוצאים את הערך הזה
  • SERVICE_ACCOUNT_NAME הוא השם המוצג שבחרתם עבור [חשבון השירות].
  • MEMBERSHIP_NAME הוא שם החברות שבוחרים כדי לייצג באופן ייחודי את האשכול בזמן רישום שלו.
  • LOCAL_KEY_PATH הוא נתיב מקומי לקובץ שבו רוצים לשמור את המפתח הפרטי של חשבון השירות, קובץ JSON. מומלץ לתת לקובץ שם שכולל את שם חשבון השירות ואת מזהה הפרויקט, למשל /tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json.

דרישות מוקדמות לאשכולות מצורפים

בהתאם לסוג אשכול Kubernetes של צד שלישי שרוצים לרשום כאשכול מצורף, יכול להיות שתצטרכו לעמוד בדרישות נוספות כדי להתקין את Connect Agent או להשתמש ב-Workload Identity של Fleet.

הגדרת מגבלות הקשר של אבטחה (SCC) (אשכולות OpenShift)

באשכולות OpenShift OKE ו-OKD, אדמינים יכולים להשתמש ב-SCC כדי לשלוט בהרשאות של פודים. כדי לאפשר התקנה של Connect Agent באשכול, צריך ליצור SCC בהתאמה אישית.

ההגדרה לדוגמה של SCC מציינת את קבוצת התנאים שסוכן Connect צריך לפעול לפיהם כדי להתקבל לאשכול:

# Connect Agent SCC
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: gke-connect-scc
allowPrivilegeEscalation: false
# This is redundant with non-root + disallow privilege escalation,
# but we provide it for defense in depth.
requiredDropCapabilities:
- ALL
runAsUser:
  type: MustRunAsNonRoot
seLinuxContext:
  type: RunAsAny
supplementalGroups:
  type: MustRunAs
  ranges:
  - min: 1
    max: 65535
fsGroup:
  type: MustRunAs
  ranges:
  - min: 1
    max: 65535
volumes:
- secret
- projected
readOnlyRootFilesystem: true
seccompProfiles:
- docker/default
users:
groups:
  # Grants all service accounts in the gke-connect namespace access to this SCC
  - system:serviceaccounts:gke-connect

בהנחה ששמרתם את הגדרת ה-SCC בתור gke-connect-scc.yaml, משתמשים בכלי של שורת הפקודה OpenShift oc כדי ליצור את ה-SCC‏ gke-connect-scc עבור האשכול, באופן הבא:

$ oc create -f gke-connect-scc.yaml

כדי לוודא שנוצר SCC בהתאמה אישית, מריצים את הפקודה הבאה של oc:

$ oc get scc | grep gke-connect-scc

דרישות ל-Workload Identity ב-Fleet

אתם יכולים לרשום אשכולות מצורפים עם Workload Identity מופעל ב-Fleet אם הפלטפורמה שלכם יוצרת נקודת קצה ציבורית של OIDC לאשכול (או מאפשרת לכם ליצור אחת כזו), או אם הפעלתם באשכול גילוי של מנפיק חשבון שירות של Kubernetes. אם אתם לא יכולים לעמוד בדרישות האלה, אתם צריכים לרשום את האשכולות המצורפים באמצעות Google Cloud חשבון שירות לצורך אימות.

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

  • קלאסטרים של OpenShift: אפשר לרשום אותם עם Workload Identity מופעל אחרי הגדרת ה-SCC המותאם אישית, כמו שמתואר למעלה.
  • אשכולות kind: כדי להשתמש ב-Workload Identity של צי, צריך להפעיל גילוי של מנפיק חשבון השירות. ההגדרה הזו מופעלת כברירת מחדל החל מגרסה 1.20 של Kubernetes. אם אתם צריכים להפעיל את התכונה הזו, פועלים לפי ההוראות במאמר תחזית נפח האסימונים של חשבון שירות. גילוי של מנפיק חשבון השירות מופעל באופן אוטומטי כשמפעילים את הפרויקט של נפח האסימונים של חשבון השירות.

מה השלב הבא?

פועלים לפי ההוראות כדי לרשום אשכול.