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.