כדי לרשום אשכול 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.comiamcredentials.googleapis.comsts.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 Workload Identity (מומלץ אם הוא זמין). מידע נוסף על היתרונות של הפעלת Fleet Workload Identity זמין במאמר שימוש ב-Fleet Workload Identity.
- Google Cloud חשבון שירות
אפשר לרשום אשכולות מצורפים עם הפעלת התכונה 'זהויות של עומסי עבודה' ב-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. אם אתם צריכים להפעיל את התכונה הזו, פועלים לפי ההוראות במאמר תחזית נפח האסימונים של חשבון שירות. גילוי של מנפיק חשבון השירות מופעל באופן אוטומטי כשמפעילים את הפרויקט של נפח האסימונים של חשבון השירות.
מה השלב הבא?
פועלים לפי ההוראות כדי לרשום אשכול.