Dependências e arquitetura do Kf

O Kf requer o Kubernetes e vários outros projetos OSS para funcionar. Algumas das dependências são atendidas com os serviços gerenciados pelo Google. Por exemplo, o Google Kubernetes Engine (GKE) fornece o Kubernetes.

Dependências

Como receber 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 com automação, e não 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 Espaços, 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 do 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

Aplicativos

Os aplicativos representam um aplicativo de 12 fatores implantado no Kubernetes. Eles abrangem o código-fonte, a configuração e o estado atual do aplicativo. Os aplicativos são responsáveis por reconciliar:

  • Modelos de criação do Kf
  • Rotas do Kf
  • Implantações do Kubernetes
  • Serviços do Kubernetes
  • ServiceAccounts do Kubernetes
  • Secrets do Kubernetes

É possível listar os aplicativos usando Kf ou kubectl:

kf apps
kubectl get apps -n space-name

Modelos de criação

Os modelos de criação combinam o código-fonte e a configuração do modelo de criação para aplicativos. Eles fornecem TaskRuns do Tekton com as etapas corretas para acionar um modelo de criação do Buildpack V2, Buildpack V3 ou Dockerfile.

É possível listar modelos de criação usando Kf ou kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

Os 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 os ClusterServiceBrokers usando kubectl:

kubectl get clusterservicebrokers

Rotas

As rotas são uma estrutura de alto nível com regras de roteamento HTTP. Elas são responsáveis por reconciliar os VirtualServices do Istio.

É possível listar as 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 os ServiceBrokers usando kubectl:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

As 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 as ServiceInstanceBindings usando Kf ou kubectl:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

As 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 as ServiceInstances usando Kf ou kubectl:

kf services
kubectl get serviceinstances -n space-name

Espaços

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 modelos de criação, aplicativos e rotas.

Você pode listar os Espaços usando Kf ou kubectl:

kf spaces
kubectl get spaces

RBAC/permissões do Kf

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 controlador
subresource-apiserver kf controlador
webhook kf controlador
appdevexperience-operator appdevexperience appdevexperience-operator

Observe que 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:

  • visualizar inclui os verbos: receber, listar, assistir
  • modificar inclui os verbos: criar, atualizar, excluir, patch
Permissões Motivos
Pode ver todos os secrets Os reconciliadores do Kf precisam ler secrets para funções 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 funções, como criar/enviar aplicativos e tarefas.
Pode modificar secrets Os reconciliadores do Kf precisam modificar secrets para funções como criar/enviar aplicativos e tarefas e vinculação de instâncias de serviço.
Pode modificar configmaps Os reconciliadores do Kf precisam modificar configmaps para funções como criar/enviar aplicativos e tarefas.
Pode modificar endpoints Os reconciliadores do Kf precisam modificar endpoints para funções como criar/enviar aplicativos e vinculação de rotas.
Pode modificar services Os reconciliadores do Kf precisam modificar pods para funções, como criar/enviar aplicativos 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 aplicativos.
Pode modificar endpoints/restricted O Kf precisa modificar endpoints para implantações de aplicativos.
Pode modificar deployments O Kf precisa modificar as implantações para funções como envio de aplicativos.
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 aplicativos, espaços e modelos de criação.
Pode modificar horizontalpodautoscalers O Kf é compatível com o escalonamento automático com base em autoescalonadores 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.