Dependencias y arquitectura de Kf

Kf requiere Kubernetes y varios proyectos de software libre para funcionar. Algunas de las dependencias se satisfacen con servicios gestionados por Google. Por ejemplo, Google Kubernetes Engine (GKE) proporciona Kubernetes.

Dependencias

Obtener detalles de CRD

Kf admite el subcomando kubectl explain. Te permite enumerar los campos de los CRDs de Kf para saber cómo crear objetos de Kf mediante la automatización en lugar de hacerlo manualmente a través de la CLI. Este comando se ha diseñado para usarse con Config Management y automatizar la creación y la gestión de recursos, como los espacios, en muchos clústeres. Puedes usarlo con cualquiera de los componentes kinds que se indican más abajo.

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

kubectl explain space.spec

El resultado debe ser similar a este:

$ 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 actúan como API de Kf y el kf CLI los usa para interactuar con el sistema. Los controladores usan los CRDs de Kf para orquestar los demás componentes del sistema.

Para ver los CRDs instalados y utilizados por Kf, ejecuta el siguiente comando:

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

El resultado de ese comando es el siguiente:

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

Aplicaciones

Las aplicaciones representan una aplicación de doce factores desplegada en Kubernetes. Incluyen el código fuente, la configuración y el estado actual de la aplicación. Las aplicaciones son responsables de conciliar lo siguiente:

  • Compilaciones de Kf
  • Rutas de Kf
  • Despliegues de Kubernetes
  • Servicios de Kubernetes
  • Cuentas de servicio de Kubernetes
  • Secretos de Kubernetes

Puedes enumerar las aplicaciones 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 de las aplicaciones. Proporcionan TaskRuns de Tekton con los pasos correctos para activar una compilación de Buildpack V2, Buildpack V3 o Dockerfile.

Puedes enumerar las compilaciones con Kf o kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

ClusterServiceBrokers contiene la información de conexión necesaria para ampliar Kf con un agente de servicio. Se encargan de obtener el catálogo de servicios que ofrece el agente y de mostrarlo en el resultado de kf marketplace.

Puedes mostrar ClusterServiceBrokers con kubectl:

kubectl get clusterservicebrokers

Rutas

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

Puedes enumerar las rutas con Kf o kubectl:

kf routes
kubectl get routes -n space-name

ServiceBrokers

Los ServiceBrokers contienen la información de conexión necesaria para ampliar Kf con un ServiceBroker. Se encargan de obtener el catálogo de servicios que ofrece el agente y de mostrarlo en el resultado de kf marketplace.

Puedes enumerar los ServiceBrokers con kubectl:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

ServiceInstanceBindings contiene los parámetros para crear un enlace en un agente de servicio y las credenciales que devuelve el agente para el enlace. Son responsables de llamar a la API de vinculación en el intermediario para vincular el servicio.

Puedes enumerar ServiceInstanceBindings con Kf o kubectl:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

ServiceInstances contiene los parámetros para crear un servicio en un agente de servicio. Son responsables de llamar a la API de aprovisionamiento en el broker para crear el servicio.

Puedes enumerar ServiceInstances con Kf o kubectl:

kf services
kubectl get serviceinstances -n space-name

Espacios

Los espacios contienen información de configuración similar a las organizaciones y los espacios de Cloud Foundry. Sus responsabilidades son las siguientes:

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

Puedes enumerar los espacios con Kf o kubectl:

kf spaces
kubectl get spaces

Control de acceso basado en roles y permisos de Kf

En las siguientes secciones se enumeran los permisos que deben tener Kf y sus componentes para acceder correctamente 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 controlador
subresource-apiserver kf controlador
webhook kf controlador
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, incluidas las definiciones de recursos personalizadas y los controladores.

RBAC para cuentas de servicio de Kf

Las siguientes definiciones de apiGroup detallan qué componentes de permisos de control de acceso de Kf tienen en 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 indica cómo se usan los permisos de control de acceso basado en roles en Kf.

  • view incluye los verbos get, list y watch.
  • Modificar incluye los verbos crear, actualizar, eliminar y parchear.
Permisos Motivos
Puede ver todos los secrets Los reconciliadores de Kf necesitan leer secretos para funciones como la creación de espacios y la vinculación de instancias de servicio.
Puede modificar pods Los reconciliadores de Kf deben modificar los pods para funciones como la compilación o el envío de aplicaciones y tareas.
Puede modificar secrets Los reconciliadores de Kf necesitan modificar secretos para funciones como la compilación o el envío de aplicaciones y tareas, así como la vinculación de instancias de servicio.
Puede modificar configmaps Los reconciliadores de Kf deben modificar los configmaps para funciones como la compilación o el envío de aplicaciones y tareas.
Puede modificar endpoints Los reconciliadores de Kf deben modificar los endpoints para funciones como la compilación o el envío de aplicaciones y el enlace de rutas.
Puede modificar services Los reconciliadores de Kf necesitan modificar los pods para funciones como la compilación o el envío de aplicaciones y el enlace de rutas.
Puede modificar events El controlador de Kf crea y emite eventos para los recursos gestionados por Kf.
Puede modificar serviceaccounts Kf necesita modificar las cuentas de servicio para las implementaciones de aplicaciones.
Puede modificar endpoints/restricted Kf necesita modificar los endpoints de las implementaciones de aplicaciones.
Puede modificar deployments Kf necesita modificar las implementaciones para funciones como la inserción de aplicaciones.
Puede modificar mutatingwebhookconfiguration Cloud Service Mesh, una dependencia de Kf, necesita mutatingwebhookconfiguration para los webhooks de admisión.
Puede modificar customresourcedefinitions customresourcedefinitions/status Kf gestiona los recursos mediante recursos personalizados, como aplicaciones, espacios y compilaciones.
Puede modificar horizontalpodautoscalers Kf admite el autoescalado basado en las herramientas de adaptación dinámica horizontal de pods.
Puede modificar namespace/finalizer Kf necesita definir la referencia de 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 has descargado.