Dependências e arquitetura do Kf

O Kf requer o Kubernetes e vários outros projetos OSS para ser executado. 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

Receber detalhes da CRD

O Kf aceita o subcomando kubectl: explain. Ele permite que você liste os campos nas CRDs do Kf para entender como criar objetos do Kf com 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 espaços, em vários clusters. Você pode usá-lo em qualquer um dos componentes kinds abaixo.

Neste exemplo, você vai analisar o kind chamado space na CRD spaces:

kubectl explain space.spec

A saída é parecida com esta:

$ 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 do Kf

O Kf instala vários dos próprios recursos personalizados e controladores do Kubernetes. Os recursos personalizados atuam efetivamente como a API Kf e são usados pela CLI do kf para interagir com o sistema. Os controladores usam CRDs do Kf para orquestrar os outros componentes no sistema.

Para exibir as CRDs instaladas e usadas 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 apps representam um aplicativo de 12 fatores implantado no Kubernetes. Eles abrangem código-fonte, configuração e estado atual do aplicativo. Os apps são responsáveis por reconciliar:

  • Builds do Kf
  • Rotas do Kf
  • Implantações do Kubernetes
  • Serviços do Kubernetes
  • Contas de serviço do Kubernetes
  • Secrets do Kubernetes

É possível listar apps usando o Kf ou o kubectl:

kf apps
kubectl get apps -n space-name

Builds

Os builds combinam o código-fonte e a configuração de build dos apps. Eles provisionam execuções de tarefa do Tekton com as etapas corretas para acionar um build de buildpack da V2, buildpack da V3 ou Dockerfile.

É possível listar builds usando o Kf ou o kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

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 fazer buscas no catálogo de serviços que o agente fornece e exibir os resultados 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 os VirtualServices do Istio.

É possível listar rotas usando o Kf ou o 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 fazer buscas no catálogo de serviços que o agente fornece e exibir os resultados na saída de kf marketplace.

É possível listar 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 ele retorna para essa vinculação. Elas são responsáveis por chamar a API de vinculação no agente para vincular o serviço.

É possível listar ServiceInstanceBindings usando o Kf ou o 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 o Kf ou o 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 aos 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 o Kf ou o 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 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 controladores e definições de recursos personalizadas.

RBAC para contas de serviço do Kf

As definições de apiGroup a seguir detalham quais permissões de controle de acesso os componentes no Kf têm em 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

Esta tabela lista como as permissões de RBAC são usadas no Kf, em que:

  • visualizar inclui os verbos: receber, listar, assistir.
  • modificar inclui os verbos: criar, atualizar, excluir, corrigir.
Permissões Motivos
Pode exibir 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 a criação e o envio de apps e tarefas.
Pode modificar secrets Os reconciliadores do Kf precisam modificar secrets para funções como a criação e o envio de apps e tarefas e a vinculação de instâncias de serviço.
Pode modificar configmaps Os reconciliadores do Kf precisam modificar ConfigMaps para funções como a criação e o envio de apps e tarefas.
Pode modificar endpoints Os reconciliadores do Kf precisam modificar endpoints para funções como a criação e o envio de apps e a vinculação de rotas.
Pode modificar services Os reconciliadores do Kf precisam modificar pods para funções como a criação e o envio de apps e a vinculação de rotas.
Pode modificar events O controlador do 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 funções como o envio de apps.
Pode modificar mutatingwebhookconfiguration O Mutatingwebhookconfiguration é necessário para o Cloud Service Mesh, uma dependência do Kf, a fim de usar 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 permite o escalonamento automático com base em Autoescalonador Horizontal de Pods.
Pode modificar namespace/finalizer O Kf precisa definir a referência de proprietário dos 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 do Kf.

Também é possível executar kf third-party-licenses para exibir as licenças de terceiros da versão da CLI do Kf transferida por download.