Arquitetura e dependências do Kf

O Kf requer o Kubernetes e vários outros projetos de software livre para ser executado. Algumas das dependências são satisfeitas com serviços geridos pela Google. Por exemplo, o Google Kubernetes Engine (GKE) fornece o Kubernetes.

Dependências

Obtenha detalhes do CRD

O Kf suporta o subcomando kubectl explain. Permite-lhe listar os campos nos CRDs do Kf para compreender como criar objetos do Kf através da automatização em vez de manualmente através da CLI. Este comando foi concebido para ser usado com a gestão de configuração para automatizar a criação e a gestão de recursos, como espaços, em vários clusters. Pode usá-lo contra qualquer um dos componentes kinds abaixo.

Neste exemplo, examinamos o kind denominado space no CRD spaces:

kubectl explain space.spec

O resultado tem o seguinte aspeto:

$ 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 seus próprios recursos personalizados do Kubernetes e controladores. Os recursos personalizados servem efetivamente como a API Kf e são usados pela CLI kf para interagir com o sistema. Os controladores usam os CRDs do Kf para orquestrar os outros componentes no sistema.

Pode ver os CRDs instalados e usados pelo Kf executando o seguinte comando:

kubectl api-resources --api-group=kf.dev

O resultado desse comando é o 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

As apps representam uma aplicação de doze fatores implementada no Kubernetes. Abrangem o código-fonte, a configuração e o estado atual da aplicação. As apps são responsáveis pela conciliação dos seguintes elementos:

  • Kf Builds
  • Rotas Kf
  • Implementações do Kubernetes
  • Serviços do Kubernetes
  • ServiceAccounts do Kubernetes
  • Segredos do Kubernetes

Pode listar apps através de Kf ou kubectl:

kf apps
kubectl get apps -n space-name

Compilações

As compilações combinam o código-fonte e a configuração de compilação para apps. Aprovisionam TaskRuns do Tekton com os passos corretos para acionar uma compilação de Buildpack V2, Buildpack V3 ou Dockerfile.

Pode listar as compilações através de Kf ou kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

Os ClusterServiceBrokers contêm as informações de ligação necessárias para expandir o Kf com um agente de serviços. São responsáveis por obter o catálogo de serviços que o agente fornece e apresentá-los no resultado de kf marketplace.

Pode listar ClusterServiceBrokers através do comando kubectl:

kubectl get clusterservicebrokers

Trajetos

As rotas são uma estrutura de nível superior que contém regras de encaminhamento HTTP. São responsáveis por conciliar os VirtualServices do Istio.

Pode listar rotas através de Kf ou kubectl:

kf routes
kubectl get routes -n space-name

ServiceBrokers

Os ServiceBrokers contêm as informações de ligação necessárias para expandir o Kf com um agente de serviços. São responsáveis por obter o catálogo de serviços que o agente fornece e apresentá-los no resultado de kf marketplace.

Pode listar ServiceBrokers através de kubectl:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

Os ServiceInstanceBindings contêm os parâmetros para criar uma associação num agente de serviços e as credenciais que o agente devolve para a associação. São responsáveis por chamar a API de associação no agente para associar o serviço.

Pode listar ServiceInstanceBindings através do Kf ou do kubectl:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

As ServiceInstances contêm os parâmetros para criar um serviço num mediador de serviços. São responsáveis por chamar a API de aprovisionamento no agente para criar o serviço.

Pode listar ServiceInstances através do Kf ou do 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. São responsáveis por:

  • Criar o espaço de nomes do Kubernetes no qual outros recursos do Kf são aprovisionados.
  • Criar NetworkPolicies do Kubernetes para aplicar políticas de ligação de rede.
  • Contém a configuração e a política para compilações, apps e rotas.

Pode listar espaços através do Kf ou do kubectl:

kf spaces
kubectl get spaces

RBAC / autorizações do Kf

As secções seguintes indicam as autorizações para que o Kf e os respetivos componentes tenham o acesso correto ao nível do cluster. Estas autorizações são necessárias e estão ativadas por predefinição no Kf. Não tente desativá-las.

Componentes Espaço de nomes Conta de serviço
controller kf responsável
subresource-apiserver kf responsável
webhook kf responsável
appdevexperience-operator appdevexperience appdevexperience-operator

Tenha em atenção que a conta de serviço appdevexperience-operator tem o mesmo conjunto de autorizações que controller. O operador é o que implementa todos os componentes do Kf, incluindo definições de recursos personalizados e controladores.

RBAC para contas de serviço do Kf

As seguintes definições apiGroup detalham os componentes de autorizações de controlo de acesso no Kf que têm em que grupos de API e recursos 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 seguinte indica como as autorizações do RBAC são usadas no Kf, onde:

  • view inclui os verbos: get, list, watch
  • modify inclui os verbos: create, update, delete, patch
Autorizações Motivos
Pode ver todos os secrets Os reconciliadores do Kf precisam de ler segredos para funcionalidades como a criação de espaços e a associação de instâncias de serviços.
Pode modificar pods Os reconciliadores do Kf precisam de modificar os pods para funcionalidades como a criação/envio de apps e tarefas.
Pode modificar secrets Os reconciliadores do Kf têm de modificar os segredos para funcionalidades como a criação/envio de apps e tarefas, e a associação de instâncias de serviços.
Pode modificar configmaps Os reconciliadores do Kf têm de modificar os mapas de configuração para funcionalidades como a criação/envio de apps e tarefas.
Pode modificar endpoints Os reconciliadores do Kf têm de modificar os pontos finais para funcionalidades como a criação/envio de apps e a associação de rotas.
Pode modificar services Os reconciliadores do Kf precisam de modificar os pods para funcionalidades como a criação/envio de apps e a associação de rotas.
Pode modificar events O controlador Kf cria e emite eventos para os recursos geridos pelo Kf.
Pode modificar serviceaccounts O Kf precisa de modificar as contas de serviço para implementações de apps.
Pode modificar endpoints/restricted O Kf precisa de modificar os pontos finais para implementações de apps.
Pode modificar deployments O Kf tem de modificar as implementações para funcionalidades como o 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 gere os recursos através de recursos personalizados, como apps, espaços e compilações.
Pode modificar horizontalpodautoscalers O Kf suporta a escala automática com base nos redimensionadores automáticos horizontais de pods.
Pode modificar namespace/finalizer O Kf tem de definir a referência do proprietário dos webhooks.

Bibliotecas de terceiros

Pode encontrar o código fonte e as licenças da biblioteca de terceiros no /third_party diretório de qualquer imagem de contentor do Kf.

Também pode executar kf third-party-licenses para ver as licenças de terceiros da versão da CLI Kf que transferiu.