Arquitectura y dependencias de Kf

Kf requiere Kubernetes y varios otros proyectos de OSS para ejecutarse. Se pueden satisfacer algunas de las dependencias con los servicios administrados por Google, por ejemplo, Google Kubernetes Engine (GKE) proporciona Kubernetes.

Dependencias

Obtén detalles de CRD

Kf admite el subcomando explain de kubectl. Te permite enumerar los campos en las CRD de Kf para comprender cómo crear objetos de Kf a través de la automatización en lugar de la manual. Este comando se diseñó para usarse con Config Management a fin de automatizar la creación y la administración de recursos como espacios en muchos clústeres. Puedes usarla en cualquiera de los componentes kinds a continuación.

En este ejemplo, examinamos el kind llamado space en la CRD de spaces:

kubectl explain space.spec

La salida es similar a la siguiente:

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

Componentes de Kf

Kf instala varios de sus propios recursos personalizados y controladores de Kubernetes. Los recursos personalizados funcionan de forma efectiva como la API de Kf y los usa la CLI de kf para interactuar con el sistema. Los controladores usan CRD de Kf para organizar los otros componentes del sistema.

Puedes ver los CRD que instaló y usó Kf con el siguiente comando:

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

Este es el resultado de ese comando:

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

Apps

Las apps representan una aplicación de doce factores implementada en Kubernetes. Incluyen el código fuente, la configuración y el estado actual de la aplicación. Las aplicaciones son responsables de la conciliación:

  • Kf Builds
  • Kf Routes
  • Implementaciones de Kubernetes
  • Servicios de Kubernetes
  • Cuentas de servicio de Kubernetes
  • Secretos de Kubernetes

Puedes enumerar apps con Kf o kubectl:

kf apps
kubectl get apps -n space-name

Compilaciones

Las compilaciones combinan el código fuente y la configuración de compilación para apps. Proporcionan a Tekton TaskRuns los pasos correctos para activar una compilación de Buildpack V2, Buildpack V3 o de Dockerfile.

Puedes enumerar compilaciones con Kf o kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

Los ClusterServiceBrokers contienen la información de conexión necesaria para extender Kf con un agente del servicio. Se encargan de recuperar el catálogo de servicios que el agente proporciona y de mostrarlos en el resultado de kf marketplace.

Puedes enumerar ClusterServiceBokers con kubectl:

kubectl get clusterservicebrokers

Rutas

Las rutas son una estructura de alto nivel que contiene reglas de enrutamiento HTTP. Se encargan de conciliar los VirtualServices de Istio.

Puedes enumerar rutas con Kf o kubectl:

kf routes
kubectl get routes -n space-name

ServiceBrokers

Los ServiceBrokers contienen información de conexión necesaria para extender Kf con un agente del servicio. Se encargan de recuperar el catálogo de servicios que el agente proporciona y de mostrarlos en el resultado de kf marketplace.

Puedes enumerar ServiceBrokers con kubectl:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

Los ServiceInstanceBinding contienen los parámetros para crear una vinculación en un agente del servicio y las credenciales que muestra el agente para la vinculación. Se encargan de llamar a la API de vinculación en el agente para vincular el servicio.

Puedes enumerar los ServiceInstanceBindings con Kf o kubectl:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

Las ServiceInstance contienen los parámetros para crear un servicio en un agente del servicio. Son responsables de llamar a la API de aprovisionamiento en el agente para crear el servicio.

Puedes enumerar las ServiceInstance con Kf o kubectl:

kf services
kubectl get serviceinstances -n space-name

Spaces

Los Spaces contienen información de configuración de forma similar a las organizaciones y los espacios de Cloud Foundry. Se encargan de lo siguiente:

  • Crear el espacio de nombres de Kubernetes en el que se aprovisionan otros recursos de Kf
  • Crear NetworkPolicies de Kubernetes para aplicar las políticas de conexión de red
  • Conservar la configuración y las políticas para compilaciones, apps y rutas

Puedes enumerar los Spaces con Kf o kubectl:

kf spaces
kubectl get spaces

Kf RBAC / Permisos

En las siguientes secciones, se enumeran los permisos para que Kf y sus componentes tengan el acceso correcto a nivel de clúster. Estos permisos son obligatorios y están habilitados de forma predeterminada en Kf; no intentes inhabilitarlos.

Componentes Espacio de nombres Cuenta de servicio
controller kf controller
subresource-apiserver kf controller
webhook kf controller
appdevexperience-operator appdevexperience appdevexperience-operator

Ten en cuenta que la cuenta de servicio appdevexperience-operator tiene el mismo conjunto de permisos que controller. El operador es el que implementa todos los componentes de Kf, incluidos los controladores y las definiciones de recursos controladores personalizados.

RBAC para cuentas de servicio de Kf

En las siguientes definiciones de apiGroup, se detalla qué componentes de permisos de control de acceso en Kf tienen qué grupos y recursos de API para las cuentas de servicio controller y 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

En la siguiente tabla, se muestra cómo se usan los permisos de RBAC en Kf, en los que sucede lo siguiente:

  • view incluye los verbos: get, list, watch
  • modify incluye los verbos: create, update, delete, patch
Permisos Razones
Puede ver todos los secrets Los conciliadores de Kf deben leer Secrets para funcionalidades como la creación de espacio y la vinculación de instancias de servicio.
Puede modificar pods Los conciliadores de Kf deben modificar los Pods para funcionalidades como la compilación y el envío de apps y tareas.
Puede modificar secrets Los conciliadores de Kf deben modificar Secrets para funcionalidades como la compilación y el envío de apps y tareas y la vinculación de instancias de servicio.
Puede modificar configmaps Los conciliadores de Kf deben modificar los mapas de configuración para funcionalidades como la compilación y el envío de apps y tareas.
Puede modificar endpoints Los conciliadores de Kf deben modificar los extremos para funcionalidades como la compilación y el envío de apps y la vinculación de rutas.
Puede modificar services Los conciliadores de Kf deben modificar Pods para funcionalidades como la compilación y el envío de apps y la vinculación de rutas.
Puede modificar events El controlador de Kf crea y emite eventos para los recursos que administra Kf.
Puede modificar serviceaccounts Kf debe modificar las cuentas de servicio para las implementaciones de apps.
Puede modificar endpoints/restricted Kf debe modificar los extremos para las implementaciones de apps.
Puede modificar deployments Kf debe modificar las implementaciones para funcionalidades como el envío de apps.
Puede modificar mutatingwebhookconfiguration Cloud Service Mesh, una dependencia de Kf, necesita Mutatingwebhookconfiguration para los webhooks de admisión.
Puede modificar customresourcedefinitions customresourcedefinitions/status Kf administra recursos a través de recursos personalizados como apps, espacios y compilaciones.
Puede modificar horizontalpodautoscalers Kf admite el ajuste de escala automático basado en Horizontal Pod Autoscalers.
Puede modificar namespace/finalizer Kf debe establecer la referencia del propietario de los webhooks.

Bibliotecas de terceros

El código fuente y las licencias de las bibliotecas de terceros se pueden encontrar en el directorio /third_party de cualquier imagen de contenedor de Kf.

También puedes ejecutar kf third-party-licenses para ver las licencias de terceros de la versión de la CLI de Kf que descargaste.