יחסי תלות וארכיטקטורה של Kf

כדי להפעיל את Kf, צריך Kubernetes וכמה פרויקטים אחרים של OSS. חלק מהתלויות מסופקות על ידי שירותים שמנוהלים על ידי Google – לדוגמה, Google Kubernetes Engine‏ (GKE) מספק Kubernetes.

תלויות

קבלת פרטים על CRD

‫Kf תומך בפקודת המשנה kubectl explain. היא מאפשרת לכם לראות את השדות ב-CRD של Kf כדי להבין איך ליצור אובייקטים של Kf באמצעות אוטומציה במקום באופן ידני באמצעות ה-CLI. הפקודה הזו מיועדת לשימוש עם Config Management כדי להפוך לאוטומטי את היצירה והניהול של משאבים כמו Spaces באשכולות רבים. אפשר להשתמש בה נגד כל רכיב kinds שמופיע בהמשך.

בדוגמה הזו, אנחנו בודקים את kind שנקרא space ב-CRD‏ spaces:

kubectl explain space.spec

הפלט אמור להיראות כך:

$ kubectl explain space.spec
KIND:     Space
VERSION:  kf.dev/v1alpha1

RESOURCE: spec <Object>

DESCRIPTION:
     SpaceSpec contains the specification for a space.

FIELDS:
   buildConfig  <Object>
     BuildConfig contains config for the build pipelines.

   networkConfig        <Object>
     NetworkConfig contains settings for the space's networking environment.

   runtimeConfig        <Object>
     RuntimeConfig contains settings for the app runtime environment.

רכיבי Kf

‫Kf מתקין כמה משאבים מותאמים אישית ובקרי משלו של Kubernetes. המשאבים המותאמים אישית משמשים למעשה כ-Kf API, והם משמשים את kf CLI כדי ליצור אינטראקציה עם המערכת. הבקרי Kf משתמשים ב-CRD כדי לתזמן את הרכיבים האחרים במערכת.

כדי לראות את ה-CRD שהותקנו ומשמשים את Kf, מריצים את הפקודה הבאה:

kubectl api-resources --api-group=kf.dev

הפלט של הפקודה הזו הוא:

NAME                      SHORTNAMES   APIGROUP   NAMESPACED   KIND
apps                                   kf.dev     true         App
builds                                 kf.dev     true         Build
clusterservicebrokers                  kf.dev     false        ClusterServiceBroker
routes                                 kf.dev     true         Route
servicebrokers                         kf.dev     true         ServiceBroker
serviceinstancebindings                kf.dev     true         ServiceInstanceBinding
serviceinstances                       kf.dev     true         ServiceInstance
spaces                                 kf.dev     false        Space

אפליקציות

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

  • גרסאות Build של Kf
  • מסלולים ב-Kf
  • פריסות Kubernetes
  • Kubernetes Services
  • Kubernetes ServiceAccounts
  • סודות של Kubernetes

אפשר לרשום אפליקציות באמצעות Kf או kubectl:

kf apps
kubectl get apps -n space-name

גרסאות Build

גרסאות build משלבות את קוד המקור ואת תצורת ה-build של האפליקציות. הם מספקים TaskRuns של Tekton עם השלבים הנכונים להפעלת Buildpack V2,‏ Buildpack V3 או Dockerfile build.

אפשר להציג רשימה של Builds באמצעות Kf או kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

‫ClusterServiceBrokers מכילים את פרטי החיבור שנדרשים כדי להרחיב את Kf באמצעות מתווך שירותים. הם אחראים לאחזור קטלוג השירותים שהברוקר מספק ולהצגתם בפלט של kf marketplace.

אפשר להציג רשימה של ClusterServiceBrokers באמצעות הפקודה kubectl:

kubectl get clusterservicebrokers

מסלולים

נתיבים הם מבנה ברמה גבוהה שמכיל כללי ניתוב של HTTP. הם אחראים לתיאום של Istio VirtualServices.

אפשר לקבל רשימה של מסלולים באמצעות Kf או kubectl:

kf routes
kubectl get routes -n space-name

ServiceBrokers

ב-ServiceBrokers נשמרים פרטי החיבור שנדרשים כדי להרחיב את Kf באמצעות מתווך שירותים. הם אחראים לאחזור קטלוג השירותים שהברוקר מספק ולהצגתם בפלט של kf marketplace.

אפשר להציג רשימה של ServiceBrokers באמצעות kubectl:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

‫ServiceInstanceBindings מכילים את הפרמטרים ליצירת קישור ב-service broker ואת פרטי הכניסה שהברוקר מחזיר לקישור. הם אחראים לקריאה ל-API של הקישור בברוקר כדי לקשר את השירות.

אפשר להציג רשימה של ServiceInstanceBindings באמצעות Kf או kubectl:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

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

אפשר להציג רשימה של ServiceInstances באמצעות Kf או kubectl:

kf services
kubectl get serviceinstances -n space-name

Spaces

במרחבים מאוחסן מידע על ההגדרות, בדומה לארגונים ולמרחבים ב-Cloud Foundry. הם אחראים ל:

  • יצירת מרחב השמות של Kubernetes שבו מוקצים משאבי Kf אחרים.
  • יצירת כללי מדיניות של רשת Kubernetes כדי לאכוף את כללי המדיניות של חיבור לרשת.
  • הגדרות ומדיניות לגבי Builds,‏ Apps ו-Routes.

אפשר לראות את רשימת המרחבים באמצעות Kf או kubectl:

kf spaces
kubectl get spaces

Kf RBAC / Permissions

בקטעים הבאים מפורטות ההרשאות שנדרשות ל-Kf ולרכיבים שלו כדי שתהיה להם גישה תקינה ברמת האשכול. ההרשאות האלה נדרשות ומופעלות כברירת מחדל ב-Kf. אל תנסו להשבית אותן.

רכיבים מרחב שמות חשבון שירות
controller kf בקר
subresource-apiserver kf בקר
webhook kf בקר
appdevexperience-operator appdevexperience appdevexperience-operator

שימו לב שלחשבון השירות appdevexperience-operator יש את אותן הרשאות כמו לחשבון controller. האופרטור הוא מה שפורס את כל רכיבי Kf, כולל הגדרות של משאבים מותאמים אישית ובקרי משאבים.

RBAC לחשבונות שירות של Kf

בהגדרות apiGroup הבאות מפורטים רכיבי הרשאות בקרת הגישה ב-Kf, וקבוצות המשאבים וממשקי ה-API שאליהם הם מתייחסים, עבור חשבונות השירות controller ו-appdevexperience-operator.

- apiGroups:
  - "authentication.k8s.io"
  resources:
  - tokenreviews
  verbs:
  - create
- apiGroups:
  - "authorization.k8s.io"
  resources:
  - subjectaccessreviews
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - pods
  - services
  - persistentvolumeclaims
  - persistentvolumes
  - endpoints
  - events
  - configmaps
  - secrets
  verbs: *
- apiGroups:
  - ""
  resources:
  - services
  - services/status
  verbs:
  - create
  - delete
  - get
  - list
  - watch
- apiGroups:
  - "apps"
  resources:
  - deployments
  - daemonsets
  - replicasets
  - statefulsets
  verbs: *
- apiGroups:
  - "apps"
  resources:
  - deployments/finalizers
  verbs:
  - get
  - list
  - create
  - update
  - delete
  - patch
  - watch
- apiGroups:
  - "rbac.authorization.k8s.io"
  resources:
  - clusterroles
  - roles
  - clusterrolebindings
  - rolebindings
  verbs:
  - create
  - delete
  - update
  - patch
  - escalate
  - get
  - list
  - deletecollection
  - bind
- apiGroups:
  - "apiregistration.k8s.io"
  resources:
  - apiservices
  verbs:
  - update
  - patch
  - create
  - delete
  - get
  - list
- apiGroups:
  - "pubsub.cloud.google.com"
  resources:
  - topics 
  - topics/status
  verbs: *
- apiGroups:
  - ""
  resources:
  - namespaces
  - namespaces/finalizers
  - serviceaccounts
  verbs: 
  - get
  - list
  - create
  - update
  - watch
  - delete
  - patch
  - watch
- apiGroups:
  - "autoscaling"
  resources:
  - horizontalpodautoscalers
  verbs: 
  - create
  - delete
  - get
  - list
  - update
  - patch
  - watch
- apiGroups:
  - "coordination.k8s.io"
  resources:
  - leases
  verbs: *
- apiGroups:
  - "batch"
  resources:
  - jobs
  - cronjobs
  verbs: 
  - get
  - list
  - create
  - update
  - patch
  - delete
  - deletecollection
  - watch
- apiGroups:
  - "messaging.cloud.google.com"
  resources:
  - channels
  verbs: 
  - delete
- apiGroups:
  - "pubsub.cloud.google.com"
  resources:
  - pullsubscriptions
  verbs: 
  - delete
  - get
  - list
  - watch
  - create
  - update
  - patch
- apiGroups:
  - "pubsub.cloud.google.com"
  resources:
  - [pullsubscriptions/status
  verbs: 
  - get
  - update
  - patch
- apiGroups:
  - "events.cloud.google.com"
  resources: *
  verbs: *
- apiGroups:
  - "keda.k8s.io"
  resources: *
  verbs: *
- apiGroups:
  - "admissionregistration.k8s.io"
  resources:
  - mutatingwebhookconfigurations
  - validatingwebhookconfigurations
  verbs:
  - get
  - list
  - create
  - update
  - patch
  - delete
  - watch
- apiGroups:
  - "extensions"
  resources:
  - ingresses
  - ingresses/status
  verbs: *
- apiGroups:
  - ""
  resources: 
  - endpoints/restricted
  verbs:
  - create
- apiGroups:
  - "certificates.k8s.io"
  resources: 
  - certificatesigningrequests
  - certificatesigningrequests/approval
  - certificatesigningrequests/status
  verbs: 
  - update
  - create
  - get
  - delete
- apiGroups:
  - "apiextensions.k8s.io"
  resources:
  - customresourcedefinitions
  verbs:   
  - get
  - list
  - create
  - update
  - patch
  - delete
  - watch
- apiGroups:
  - "networking.k8s.io"
  resources: 
  - networkpolicies
  verbs: 
  - get
  - list
  - create
  - update
  - patch
  - delete
  - deletecollection
  - watch
- apiGroups:
  - ""
  resources: 
  - nodes
  verbs: 
  - get
  - list
  - watch
  - update
  - patch
- apiGroups:
  - ""
  resources: 
  - nodes/status
  verbs: 
  - patch

בטבלה הבאה מפורט אופן השימוש בהרשאות RBAC ב-Kf, כאשר:

  • ההרשאה view כוללת את הפעלים: get, list, watch
  • שינוי כולל את הפעלים: יצירה, עדכון, מחיקה, תיקון
הרשאות סיבות
יכול/ה לראות את כל secrets כדי להשתמש בפונקציות כמו יצירת מרחב וקישור מופע שירות, כלי הגישור של Kf צריכים לקרוא סודות.
אפשר לשנות את pods כדי להשתמש בפונקציות כמו בנייה או שליחה של אפליקציות ומשימות, כלי הגישור של Kf צריכים לשנות את ה-pods.
אפשר לשנות את secrets כדי להשתמש בפונקציות כמו יצירה או העלאה של אפליקציות ומשימות וקישור של מופעי שירות, כלי ה-reconciler של Kf צריכים לשנות סודות.
אפשר לשנות את configmaps רכיבי Kf reconciler צריכים לשנות את configmap כדי להשתמש בפונקציות כמו יצירה ושליחה של אפליקציות ומשימות.
אפשר לשנות את endpoints כדי להשתמש בפונקציות כמו בנייה/דחיפה של אפליקציות וקישור מסלולים, כלי ה-reconciler של Kf צריכים לשנות את נקודות הקצה.
אפשר לשנות את services כדי להשתמש בפונקציות כמו בנייה/דחיפה של אפליקציות וקישור מסלולים, כלי הגישור של Kf צריכים לשנות את ה-Pods.
אפשר לשנות את events בקר Kf יוצר ומשדר אירועים למשאבים שמנוהלים על ידי Kf.
אפשר לשנות את serviceaccounts ‫Kf צריך לשנות חשבונות שירות לצורך פריסת אפליקציות.
אפשר לשנות את endpoints/restricted ‫Kf צריך לשנות נקודות קצה לפריסות של אפליקציות.
אפשר לשנות את deployments ‫Kf צריך לשנות פריסות כדי להשתמש בפונקציות כמו שליחת אפליקציות.
אפשר לשנות את mutatingwebhookconfiguration ‫Cloud Service Mesh, תלות ב-Kf, צריך את Mutatingwebhookconfiguration בשביל webhooks של הרשאות גישה.
אפשר לשנות customresourcedefinitions customresourcedefinitions/status ‫Kf מנהל משאבים באמצעות משאבים בהתאמה אישית, כמו אפליקציות, מרחבים וגרסאות Build.
אפשר לשנות את horizontalpodautoscalers ‫Kf תומך בהתאמה אוטומטית של קבוצות Pod לעומס (autoscaling) שמבוססת על Horizontal Pod Autoscalers (HPA).
אפשר לשנות את namespace/finalizer צריך להגדיר ב-Kf הפניה לבעלים של ה-webhook.

ספריות של צד שלישי

קוד המקור והרישיונות של ספריות צד שלישי נמצאים בספרייה /third_partyשל כל קובץ אימג' של קונטיינר של Kf.

אפשר גם להריץ את הפקודה kf third-party-licenses כדי לראות את הרישיונות של צד שלישי לגרסה של Kf CLI שהורדתם.