O Kf requer o Kubernetes e vários outros projetos OSS para serem executados. Algumas das dependências são satisfeitas com os serviços gerenciados pelo Google. Por exemplo, o Google Kubernetes Engine (GKE) fornece o Kubernetes.
Dependências
Acessar detalhes do CRD
O Kf é compatível com o subcomando kubectl
: explain
. Ele permite que você liste os campos nos CRDs do Kf para entender como criar objetos do Kf por meio da automação, em vez de manualmente pela CLI. Esse comando foi projetado para ser usado com o Config Management e automatizar a criação e o gerenciamento de recursos, como os Spaces, em vários clusters. Você pode usá-lo em qualquer um dos componentes kinds
abaixo.
Neste exemplo, examinamos o kind
chamado space
no CRD spaces
:
kubectl explain space.spec
A saída é semelhante a:
$ 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 Kf
O Kf instala vários dos próprios recursos personalizados e controladores do Kubernetes.
Os recursos personalizados servem efetivamente como a API Kf e são usados pela CLI kf
para interagir com o sistema. Os controladores usam CRDs do Kf para orquestrar os outros componentes no sistema.
Para visualizar os CRDs instalados e usados pelo Kf, execute o seguinte comando:
kubectl api-resources --api-group=kf.dev
A saída desse comando é a seguinte:
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
Os aplicativos representam um aplicativo de 12 fatores implantado no Kubernetes. Eles abrangem código-fonte, configuração e o estado atual do aplicativo. Os apps são responsáveis por reconciliar:
- Versões do kf
- Rotas do kf
- Implantações do Kubernetes
- Serviços do Kubernetes
- Contas de Serviço Kubernetes
- Secrets do Kubernetes
É possível listar apps usando Kf ou kubectl
:
kf apps
kubectl get apps -n space-name
Versões
As versões combinam o código-fonte e a configuração da compilação para aplicativos. Elas provisionam Execuções de tarefa Tekton com as etapas corretas para acionar uma versão Buildpack V2, Buildpack V3 ou Dockerfile.
É possível listar builds usando Kf ou kubectl
:
kf builds
kubectl get builds -n space-name
ClusterServiceBrokers
O ClusterServiceBrokers contêm as informações de conexão necessárias para estender
o Kf com um agente de serviços. Eles são responsáveis por
buscar o catálogo de serviços que o agente fornece e exibi-los na
saída de kf marketplace
.
É possível listar ClusterServiceBrokers usando kubectl
:
kubectl get clusterservicebrokers
Rotas
As rotas são uma estrutura de alto nível que contém regras de roteamento HTTP. Elas são responsáveis por reconciliar o VirtualServices do Istio.
É possível listar rotas usando Kf ou kubectl
:
kf routes
kubectl get routes -n space-name
ServiceBrokers
Os ServiceBrokers contêm as informações de conexão necessárias para estender o
Kf com um agente de serviços. Eles são responsáveis por
buscar o catálogo de serviços que o agente fornece e exibi-los na
saída de kf marketplace
.
É possível listar o ServiceBrokers usando kubectl
:
kubectl get servicebrokers -n space-name
ServiceInstanceBinding
ServiceInstanceBindings contêm os parâmetros para criar uma vinculação em um agente de serviços e as credenciais que o agente retorna para a vinculação. Elas são responsáveis por chamar a API vinculada no agente para vincular o serviço.
É possível listar ServiceInstanceBindings usando Kf ou kubectl
:
kf bindings
kubectl get serviceinstancebindings -n space-name
ServiceInstance
ServiceInstances contêm os parâmetros para criar um serviço em um agente de serviços. Elas são responsáveis por chamar a API de provisionamento no agente para criar o serviço.
É possível listar ServiceInstances usando Kf ou kubectl
:
kf services
kubectl get serviceinstances -n space-name
Spaces
Os espaços contêm informações de configuração semelhantes às organizações e espaços do Cloud Foundry. Eles são responsáveis por:
- Criar o namespace do Kubernetes para o qual outros recursos do Kf são provisionados.
- Criar NetworkPolicies do Kubernetes para aplicar políticas de conexão de rede.
- Manter a configuração e a política de builds, apps e rotas.
Você pode listar espaços usando Kf ou kubectl
:
kf spaces
kubectl get spaces
Kf RBAC / permissões
As seções a seguir listam as permissões para que o Kf e os componentes dele tenham acesso correto no nível do cluster. Essas permissões são obrigatórias e ativadas por padrão no Kf. Não tente desativá-las.
Componentes | Namespace | Conta de serviço |
---|---|---|
controller |
kf | controller |
subresource-apiserver |
kf | controller |
webhook |
kf | controller |
appdevexperience-operator |
appdevexperience | appdevexperience-operator |
A conta de serviço appdevexperience-operator
tem o mesmo conjunto de
permissões que controller
. O operador é o que implanta todos os componentes
do Kf, incluindo definições e controladores de recursos personalizados.
RBAC para contas de serviço do Kf
As seguintes definições de apiGroup
detalham quais componentes de permissões de controle de acesso no Kf têm quais recursos e grupos de API para as contas de serviço controller
e 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
A tabela a seguir lista como as permissões do RBAC são usadas no Kf, em que:
- view inclui os verbos: get, list, watch
- modify inclui os verbos: create, update, delete, patch
Permissões | Motivos |
---|---|
Pode ver todos os secrets |
Os reconciliadores do Kf precisam ler secrets para funcionalidades como a criação de espaços e a vinculação de instâncias de serviço. |
Pode modificar pods |
Os reconciliadores do Kf precisam modificar pods para funcionalidades, como criar/enviar apps e tarefas. |
Pode modificar secrets |
Os reconciliadores do Kf precisam modificar secrets para funcionalidades como criação/envio de apps e tarefas e vinculação de instâncias de serviço. |
Pode modificar configmaps |
Os reconciliadores do Kf precisam modificar configmaps para funcionalidades como criar/enviar apps e tarefas. |
Pode modificar endpoints |
Os reconciliadores do Kf precisam modificar endpoints para funcionalidades como criação/envio de apps e vinculação de rotas. |
Pode modificar services |
Os reconciliadores do Kf precisam modificar pods para funcionalidades, como criar/enviar apps e vincular rotas. |
Pode modificar events |
O controlador Kf cria e emite eventos para os recursos gerenciados pelo Kf. |
Pode modificar serviceaccounts |
O Kf precisa modificar contas de serviço para implantações de apps. |
Pode modificar endpoints/restricted |
O Kf precisa modificar endpoints para implantações de apps. |
Pode modificar deployments |
O Kf precisa modificar as implantações para funcionalidades como envio de apps. |
Pode modificar mutatingwebhookconfiguration |
O Mutatingwebhookconfiguration é necessário para o Cloud Service Mesh, uma dependência do Kf, para webhooks de admissão. |
Pode modificar customresourcedefinitions customresourcedefinitions/status |
O Kf gerencia recursos usando Recursos personalizados, como apps, espaços e builds. |
Pode modificar horizontalpodautoscalers |
O Kf é compatível com o escalonamento automático com base em escalonadores automáticos horizontais de pods. |
Pode modificar namespace/finalizer |
O Kf precisa definir a referência do proprietário de webhooks. |
Bibliotecas de terceiros
O código-fonte e as licenças da biblioteca de terceiros podem ser encontrados no diretório /third_party
de qualquer imagem de contêiner Kf.
Também é possível executar kf third-party-licenses
para visualizar as licenças de terceiros da
versão da CLI do Kf transferida por download.