בדף הזה מוסבר איך להגדיר אימות באמצעות אסימון bearer כדי להתחבר לאשכולות רשומים מחוץ ל- Google Cloud. אחרי ההגדרה, אדמינים של אשכולות יוכלו להתחבר לאשכולות דרך מסוףGoogle Cloud . יש תמיכה בסוגים רבים של טוקנים מסוג Bearer, כמו שמפורט באימות ב-Kubernetes. השיטה הכי קלה היא ליצור חשבון שירות של Kubernetes (KSA) באשכול, ולהשתמש באסימון ה-bearer שלו כדי להיכנס.
שיטות אימות אחרות
במקום להגדיר אימות באמצעות אסימון Bearer, אפשר להגדיר אחת משיטות האימות הבאות, בהתאם לצרכים של הארגון:
Google Identity, שמאפשרת למשתמשים להיכנס באמצעות הזהות שלהם ב- Google Cloud . משתמשים באפשרות הזו אם למשתמשים שלכם כבר יש גישה אל Google Cloud עם זהות Google.
אם האשכול שלכם מוגדר לשימוש בספק זהויות OIDC, אתם יכולים להשתמש בו כדי לבצע אימות לאשכול ממסוף Google Cloud . במדריכים הבאים מוסבר איך מגדירים OIDC לאשכולות GKE:
- הגדרת אשכולות ל-GKE Identity Service באמצעות OIDC במדריך הזה מוסבר איך להגדיר אימות OIDC באשכול על בסיס אשכול לכל סוגי האשכולות ב-GKE.
- הגדרת שירות הזהויות של GKE ל-Fleet. האפשרות הזו מאפשרת להגדיר OIDC ברמת הצי לטיפוסים נתמכים של אשכולות. הגדרה ברמת ה-Fleet נתמכת באשכולות GKE ב-Google Cloud, בכל סוגי האשכולות של GKE ובאשכולות EKS מצורפים ב-AWS.
אם שיטות האימות האלה ש-Google מספקת לא מתאימות לארגון שלכם, פועלים לפי ההוראות בדף הזה כדי להגדיר אימות באמצעות טוקן bearer.
הענקת תפקידי IAM לגישה דרך Google Cloud המסוף
משתמשים שרוצים להציג אשכולות מחוברים באמצעות מסוף Google Cloud צריכים לפחות את תפקידי ה-IAM הבאים:
roles/container.viewer. התפקיד הזה מאפשר למשתמשים להציג משאבי מאגר ב Google Cloud מסוף, כולל הדף GKE Clusters. במאמר תפקידים ב-Kubernetes Engine במסמכי ה-IAM מפורטות ההרשאות שכלולות בתפקיד הזה.roles/gkehub.viewer. התפקיד הזה מאפשר למשתמשים להציג את האשכולות מחוץ ל-Google Cloud במסוף Google Cloud . המשתמשים לא צריכים את התפקיד הזה אם הצי לא כולל אשכולות מחוץ ל- Google Cloud. פרטים על ההרשאות שכלולות בתפקיד הזה מופיעים במאמר תפקידים ב-GKE Hub במסמכי ה-IAM.
מריצים את הפקודות הבאות כדי להעניק את התפקידים האלה:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט של פרויקט המארח של ה-Fleet.
EMAIL_ADDRESS: כתובת האימייל שמשויכת לחשבון של המשתמש ב- Google Cloud .
מידע נוסף על הקצאת תפקידי IAM זמין במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים במסמכי העזרה של IAM.
הגדרת בקרת גישה מבוססת-תפקידים
הגישה לאשכולות נשלטת באמצעות בקרת גישה מבוססת-תפקידים (RBAC) של Kubernetes.
מומלץ שאדמין או אדמין של אשכול ייצרו KSA לכל משתמש שנכנס לאשכול. שימוש בטוקן bearer דומה לשימוש בסיסמה, ולכן לכל משתמש צריך להיות חשבון משלו. התחברות באמצעות טוקן ה-bearer של ה-KSA גורמת לביצוע כל הפעולות בתור ה-KSA, בהתאם לתפקידי ה-RBAC שמוגדרים ל-KSA.
כדי לגשת לאשכול דרך המסוף, לחשבון ה-KSA צריכות להיות לפחות ההרשאות הבאות ב-RBAC באשכול:
יצירה והקצאה של תפקיד cloud-console-reader RBAC
משתמשים מאומתים שרוצים לגשת למשאבים של אשכול במסוף Google Cloud צריכים לקבל את ההרשאות הרלוונטיות ב-Kubernetes כדי לעשות זאת. אם אתם לא רוצים להעניק למשתמשים האלה הרשאות נרחבות יותר, כמו הרשאות של אדמין באשכול, אתם יכולים ליצור תפקיד RBAC בהתאמה אישית שכולל את ההרשאות המינימליות לצפייה בצמתים, בכרכים מתמשכים, בתרמילים ובסוגי האחסון של האשכול. כדי להגדיר את קבוצת ההרשאות הזו, צריך ליצור משאב ClusterRole RBAC, cloud-console-reader, באשכול.
cloud-console-reader מעניק למשתמשים שלו את ההרשאות get, list ו-watch בצמתים של האשכול, בכרכים מתמשכים, בתרמילים ובסוגי האחסון, מה שמאפשר להם לראות פרטים על המשאבים האלה.
kubectl
כדי ליצור את cloud-console-reader ClusterRole ולהחיל אותו על האשכול, מריצים את הפקודה הבאה:
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
לאחר מכן תוכלו להקצות את התפקיד הזה ל-KSA, כמו שמתואר בקטע הבא.
יצירה ואישור של KSA
kubectl
כדי ליצור KSA ולקשר אליו הרשאות, מבצעים את השלבים הבאים:
יוצרים את משאבי ה-KSA ו-
ClusterRoleBindingכדי לקשר אתviewואתcloud-console-readerKubernetes RBACClusterRolesל-KSA:KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}מחליפים את מה שכתוב בשדות הבאים:
KSA_NAME: השם שבחרתם ל-KSA-
VIEW_BINDING_NAME: השם שבוחרים למשאבviewClusterRoleBinding. אפשר לבחור כל שם שרוצים, אבל הכי קל לתת לו שם לפי ה-KSA -
CLOUD_CONSOLE_READER_BINDING_NAME: השם שבוחרים למשאבcloud-console-readerClusterRoleBinding. אפשר גם לבחור כל שם אחר.
בהתאם לגישה שצריכה להיות לחשבון השירות, צריך לקשר תפקידים נוספים ל-KSA. אפשרויות מפורטות מופיעות בתפקידי ברירת המחדל של Kubernetes.
לדוגמה, אם רוצים לפרוס אפליקציית Kubernetes מ-Cloud Marketplace, צריך לקשר את התפקיד
cluster-adminל-KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
מחליפים את
BINDING_NAMEבשם של קישור תפקיד באשכול לחשבון השירות.
מתן הרשאה לחשבונות אחרים
kubectl
לכל משתמש או חשבון שירות אחר שמקבלים גישה לאשכול, צריך ליצור משאבי ClusterRoleBinding כדי לקשר את התפקידים view ו-cloud-console-reader לחשבון שלהם:
שיוך של
viewושלcloud-console-readerClusterRoles:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}מחליפים את מה שכתוב בשדות הבאים:
-
ACCOUNT_NAME: חשבון השירות של Kubernetes -
VIEW_BINDING_NAME: השם שבוחרים למשאבviewClusterRoleBinding. אפשר לתת לו כל שם שרוצים, אבל הכי קל לתת לו שם שדומה לשם של המשתמש או חשבון השירות -
CLOUD_CONSOLE_READER_BINDING_NAME: השם שבוחרים למשאבviewClusterRoleBinding. אפשר גם לתת לו כל שם שרוצים.
-
מקשרים תפקידים נוספים, בהתאם לגישה שצריכה להיות לחשבון. אפשרויות מפורטות מופיעות בתפקידי ברירת המחדל של Kubernetes.
לדוגמה, כדי לקשר את התפקיד
cluster-admin, מריצים את הפקודה הבאה:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
מחליפים את
BINDING_NAMEבשם של קישור תפקיד באשכול לחשבון השירות.
קבלת טוקן למוכ"ז של KSA
kubectl
כדי לקבל את אסימון ה-bearer של KSA, מריצים את הפקודה הבאה:
SECRET_NAME=KSA_NAME-token
kubectl apply -f - << __EOF__
apiVersion: v1
kind: Secret
metadata:
name: "${SECRET_NAME}"
annotations:
kubernetes.io/service-account.name: "${KSA_NAME}"
type: kubernetes.io/service-account-token
__EOF__
until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do
echo "waiting for token..." >&2;
sleep 1;
done
kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
מחליפים את KSA_NAME בשם שבוחרים ל-KSA.
מעתיקים את האסימון מהפלט של הפקודה ושומרים אותו כדי שהמשתמשים יוכלו להשתמש בו כדי להיכנס למסוף Google Cloud .