Dependências e arquitetura Kf

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.