Dépendances et architecture de Kf

Kf nécessite Kubernetes et plusieurs autres projets OSS pour s'exécuter. Certaines dépendances sont assurées par les services gérés par Google. Par exemple, Google Kubernetes Engine (GKE) fournit Kubernetes.

Dépendances

Obtenir les détails de CRD

Kf accepte la sous-commande kubectl explain. Elle vous permet de répertorier les champs des CRD Kf afin de comprendre comment créer des objets Kf de façon automatisée plutôt que manuellement via la CLI. Cette commande est conçue pour être utilisée avec Config Management afin d'automatiser la création et la gestion de ressources telles que les espaces sur de nombreux clusters. Vous pouvez l'utiliser sur n'importe quel composant kinds ci-dessous.

Dans cet exemple, nous examinons l'objet kind appelé space dans l'objet CRD spaces :

kubectl explain space.spec

Le résultat ressemble à ceci :

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

Composants Kf

Kf installe plusieurs de ses propres ressources personnalisées et contrôleurs Kubernetes. Les ressources personnalisées servent d'API Kf et sont utilisées par la CLI kf pour interagir avec le système. Les contrôleurs utilisent les CRD de Kf pour orchestrer les autres composants du système.

Vous pouvez afficher les CRD installés et utilisés par Kf en exécutant la commande suivante :

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

Le résultat de cette commande se présente comme suit :

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

Applications

Les applications représentent des applications douze facteurs déployées sur Kubernetes. Elles englobent le code source, la configuration et l'état actuel de l'application. Les applications sont chargées du rapprochement des éléments suivants :

  • Builds Kf
  • Routes Kf
  • Déploiements Kubernetes
  • Services Kubernetes
  • Comptes de service Kubernetes
  • Secrets Kubernetes

Vous pouvez répertorier les applications à l'aide de Kf ou de kubectl :

kf apps
kubectl get apps -n space-name

Builds

Les builds combinent le code source et la configuration de compilation des applications. Ils indiquent aux exécutions de tâche Tekton la procédure appropriée pour activer un build Buildpack V2, Buildpack V3 ou Dockerfile.

Vous pouvez répertorier les compilations à l'aide de Kf ou de kubectl :

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

Les agents de service des clusters contiennent les informations de connexion nécessaires pour étendre l'utilisation de Kf avec un agent de service. Ils sont chargés d'extraire le catalogue de services fourni par l'agent et de l'afficher dans le résultat de la commande kf marketplace.

Vous pouvez répertorier les agents de service des clusters à l'aide de kubectl :

kubectl get clusterservicebrokers

Routes

Les routes représentent une structure de haut niveau contenant les règles de routage HTTP. Elles sont chargées du rapprochement des services virtuels Istio.

Vous pouvez répertorier les routes à l'aide de Kf ou de kubectl :

kf routes
kubectl get routes -n space-name

ServiceBrokers

Les agents de service contiennent les informations de connexion nécessaires pour étendre l'utilisation de Kf avec un agent de service. Ils sont chargés d'extraire le catalogue de services fourni par l'agent et de l'afficher dans le résultat de la commande kf marketplace.

Vous pouvez répertorier les agents de service à l'aide de kubectl :

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

Les liaisons d'instances de service contiennent les paramètres permettant de créer une liaison sur un agent de service et les identifiants renvoyés par celui-ci pour la liaison. Elles sont chargées d'appeler l'API de liaison sur l'agent pour lier le service.

Vous pouvez répertorier les liaisons d'instances de service à l'aide de Kf ou de kubectl :

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

Les instances de service contiennent les paramètres permettant de créer un service sur un agent de service. Elles sont chargées d'appeler l'API de provisionnement sur l'agent pour lier le service.

Vous pouvez répertorier les instances de service à l'aide de Kf ou de kubectl :

kf services
kubectl get serviceinstances -n space-name

Espaces

Les espaces contiennent des informations de configuration semblables à celles des organisations et des espaces Cloud Foundry. Ils sont chargés des opérations suivantes :

  • Créer l'espace de noms Kubernetes dans lequel d'autres ressources Kf sont provisionnées
  • Créer des règles de réseau Kubernetes pour appliquer les règles de connexion réseau
  • Conserver la configuration et les règles des builds, des applications et des routes

Vous pouvez répertorier les espaces à l'aide de Kf ou de kubectl :

kf spaces
kubectl get spaces

RBAC/Autorisations pour Kf

Les sections suivantes listent les autorisations pour Kf et ses composants afin de disposer d'un accès correct au niveau du cluster. Ces autorisations sont requises et activées par défaut dans Kf. N'essayez pas de les désactiver.

Composants Namespace Compte de service
controller kf controller
subresource-apiserver kf controller
webhook kf controller
appdevexperience-operator appdevexperience appdevexperience-operator

Notez que le compte de service appdevexperience-operator dispose du même ensemble d'autorisations que controller. L'opérateur permet de déployer tous les composants Kf, y compris les définitions de ressources personnalisées et les contrôleurs.

RBAC pour les comptes de service Kf

Les définitions apiGroup suivantes détaillent les autorisations de contrôle d'accès que les composants détiennent dans Kf sur certains groupes d'API et de ressources pour les comptes de service controller et 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

Le tableau suivant répertorie la façon dont les autorisations RBAC sont utilisées dans Kf, où :

  • view (afficher) inclut les verbes : get, list et watch (obtenir, lister et regarder).
  • modify (modifier) inclut les verbes : create, update, delete et patch (créer, mettre à jour, supprimer et corriger)
Autorisations Motifs
Peut afficher tous les secrets Les rapprochements Kf doivent lire les secrets pour des fonctionnalités comme la création d'espace et les liaisons d'instances de service.
Peut modifier pods Les rapprochements Kf doivent modifier les pods pour des fonctionnalités comme la création/le transfert d'applications et de tâches.
Peut modifier secrets Les rapprochements Kf doivent modifier les secrets pour des fonctionnalités comme la création/le transfert d'applications et de tâches, et les liaisons d'instances de service.
Peut modifier configmaps Les rapprochements Kf doivent modifier les configmaps pour des fonctionnalités comme la création et le transfert d'applications et de tâches.
Peut modifier endpoints Les rapprochements Kf doivent modifier les points de terminaison pour des fonctionnalités comme la création/le transfert d'applications et la liaison de route.
Peut modifier services Les rapprochements Kf doivent modifier les pods pour des fonctionnalités comme la création/le transfert d'applications et les liaisons de routes.
Peut modifier events Le contrôleur Kf crée et émet des événements pour les ressources gérées par Kf.
Peut modifier serviceaccounts Kf doit modifier les comptes de service pour les déploiements d'applications.
Peut modifier endpoints/restricted Kf doit modifier les points de terminaison pour les déploiements d'applications.
Peut modifier deployments Kf doit modifier les déploiements pour des fonctionnalités comme le transfert d'applications.
Peut modifier mutatingwebhookconfiguration Mutatingwebhookconfiguration est nécessaire pour Cloud Service Mesh, une dépendance Kf, pour des webhooks d'admission.
Peut modifier customresourcedefinitions customresourcedefinitions/status Kf gère les ressources via des ressources personnalisées comme des applications, des espaces et des builds.
Peut modifier horizontalpodautoscalers Kf accepte l'autoscaling basé sur les autoscalers horizontaux de pods.
Peut modifier namespace/finalizer Kf doit définir la référence du propriétaire des webhooks.

Bibliothèques tierces

Le code source et les licences des bibliothèques tierces se trouvent dans le répertoire /third_party de chaque image de conteneur Kf.

Vous pouvez également exécuter la commande kf third-party-licenses pour afficher les licences tierces correspondant à la version de la CLI Kf que vous avez téléchargée.