Dipendenze e architettura Kf

Kf richiede Kubernetes e diversi altri progetti open source per funzionare. Alcune delle dipendenze sono soddisfatte dai servizi gestiti da Google, ad esempio Google Kubernetes Engine (GKE) fornisce Kubernetes.

Dipendenze

Ottieni dettagli CRD

Kf supporta il sottocomando kubectl explain. Ti consente di elencare i campi nei CRD di Kf per capire come creare oggetti Kf tramite l'automazione anziché manualmente tramite la CLI. Questo comando è progettato per essere utilizzato con Config Management per automatizzare la creazione e la gestione di risorse come Spazi in molti cluster. Puoi utilizzarlo per qualsiasi componente kinds riportato di seguito.

In questo esempio, esaminiamo il kind denominato space nella CRD di spaces:

kubectl explain space.spec

L'output è simile al seguente:

$ 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.

Componenti Kf

Kf installa molti dei suoi componenti Kubernetes risorse personalizzate e titolari. Le risorse personalizzate fungono efficacemente da API Kf e vengono utilizzati dall'interfaccia a riga di comando di kf per interagire con il sistema. I controller utilizzano le CRD di Kf per orchestrare gli altri componenti del sistema.

Puoi visualizzare i CRD installati e utilizzati da Kf eseguendo il seguente comando:

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

L'output di questo comando è il seguente:

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

App

Le app rappresentano un'applicazione a 12 fattori implementata in Kubernetes. Esse comprendono il codice sorgente, la configurazione e lo stato attuale dell'applicazione. Le app sono responsabili della riconciliazione di:

  • Kf Builds
  • Route di kf
  • Deployment Kubernetes
  • Servizi Kubernetes
  • Account di servizio Kubernetes
  • Secret di Kubernetes

Puoi elencare le app utilizzando Kf o kubectl:

kf apps
kubectl get apps -n space-name

Build

Le build combinano il codice sorgente e la configurazione della build per le app. Esegue il provisioning Tekton TaskRuns con i passaggi corretti per attivare Buildpack V2, Buildpack V3, o Dockerfile.

Puoi elencare le build utilizzando Kf o kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

ClusterServiceBrokers conserva le informazioni di connessione necessarie per estendere Kf con un service broker. Sono responsabili recuperare il catalogo dei servizi forniti dall'intermediario e mostrarli in l'output di kf marketplace.

Puoi elencare ClusterServiceBrokers utilizzando kubectl:

kubectl get clusterservicebrokers

Route

Le route sono una struttura di alto livello che contiene regole di routing HTTP. Sono responsabile della riconciliazione dei servizi virtuali Istio.

Puoi elencare le route utilizzando Kf o kubectl:

kf routes
kubectl get routes -n space-name

ServiceBrokers

ServiceBrokers contiene le informazioni di connessione necessarie per estendere Kf con un broker di servizi. Sono responsabili recuperare il catalogo dei servizi forniti dall'intermediario e mostrarli in l'output di kf marketplace.

Puoi elencare i ServiceBroker utilizzando kubectl:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

ServiceInstanceBindings contiene i parametri per creare un'associazione in un broker di servizi e le credenziali restituite dal broker per l'associazione. Sono responsabile di chiamare l'API bind sul broker per vincolare il servizio.

Puoi elencare ServiceInstanceBindings utilizzando Kf o kubectl:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

ServiceInstances contiene i parametri per creare un servizio su un service broker. È responsabile di chiamare l'API di provisioning sul broker per creare completamente gestito di Google Cloud.

Puoi elencare le istanze di servizio utilizzando Kf o kubectl:

kf services
kubectl get serviceinstances -n space-name

Spazi

Gli spazi contengono informazioni di configurazione simili a quelle delle organizzazioni Cloud Foundry e spazi di archiviazione. Sono responsabili di:

  • Creazione dello spazio dei nomi Kubernetes in cui viene eseguito il provisioning di altre risorse Kf.
  • Creazione di NetworkPolicy Kubernetes per l'applicazione dei criteri di connessione di rete.
  • Blocco della configurazione e dei criteri per build, app e route.

Puoi elencare gli spazi utilizzando Kf o kubectl:

kf spaces
kubectl get spaces

Kf RBAC / Autorizzazioni

Le sezioni seguenti elencano le autorizzazioni necessarie per consentire a Kf e ai suoi componenti di avere accesso corretto a livello di cluster. Queste autorizzazioni sono obbligatorie e abilitate per impostazione predefinita in Kf; cosa fare non provare a disattivarle.

Componenti Spazio dei nomi Account di servizio
controller kf controller
subresource-apiserver kf controller
webhook kf controller
appdevexperience-operator appdevexperience appdevexperience-operator

Tieni presente che l'account di servizio appdevexperience-operator ha lo stesso insieme di autorizzazioni come controller. L'operatore è ciò che esegue il deployment componenti, inclusi controller e definizioni di risorse personalizzate.

RBAC per account di servizio Kf

Le seguenti definizioni apiGroup descrivono i componenti delle autorizzazioni di controllo dell'accesso in Kf per i gruppi e le risorse dell'API sia per gli account di servizio controller sia per 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

La tabella seguente elenca come vengono utilizzate le autorizzazioni RBAC in Kf, dove:

  • view include i verbi: get, list, watch
  • modify include i verbi: create, update, delete, patch
Autorizzazioni Motivi
Può visualizzare tutti i secrets I riconciliatori Kf devono leggere i secret per funzionalità come la creazione di spazi e l'associazione delle istanze di servizio.
Può modificare pods I riconciliatori Kf devono modificare i pod per funzionalità come la compilazione/l'invio di app e attività.
Può modificare secrets I riconciliatori di Kf devono modificare i secret per funzionalità come la compilazione/l'invio di app e attività e il binding delle istanze di servizio.
Può modificare configmaps I riconciliatori Kf devono modificare le mappe di configurazione per funzionalità come la compilazione/l'invio di app e attività.
Può modificare endpoints I riconciliatori Kf devono modificare gli endpoint per funzionalità come la compilazione/l'invio di app e la definizione di route.
Può modificare services I riconciliatori Kf devono modificare i pod per funzionalità come la compilazione/l'invio di app e la definizione di route.
Può modificare events Il controller Kf crea ed emette eventi per le risorse gestite da Kf.
Può modificare serviceaccounts Kf deve modificare gli account di servizio per i deployment dell'app.
Può modificare endpoints/restricted Kf deve modificare gli endpoint per le distribuzioni dell'app.
Può modificare deployments Kf deve modificare i deployment per funzionalità come il push delle app.
Può modificare mutatingwebhookconfiguration La configurazione Mutatingwebhook è necessaria per Cloud Service Mesh, una dipendenza Kf, per i webhook di ammissione.
Può modificare customresourcedefinitions customresourcedefinitions/status Kf gestisce le risorse tramite risorse personalizzate come app, spazi e build.
Può modificare horizontalpodautoscalers Kf supporta la scalabilità automatica basata su Horizontal Pod Autoscaler.
Può modificare namespace/finalizer Kf deve impostare il riferimento del proprietario degli webhook.

Librerie di terze parti

Il codice sorgente e le licenze della libreria di terze parti sono disponibili nella /third_party di qualsiasi immagine container Kf.

Puoi anche eseguire kf third-party-licenses per visualizzare le licenze di terze parti per la versione dell'interfaccia a riga di comando di Kf che hai scaricato.