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.specA 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.devA 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 appskubectl 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 buildskubectl 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 clusterservicebrokersRotas
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 routeskubectl 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-nameServiceInstanceBinding
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 bindingskubectl 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 serviceskubectl 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 spaceskubectl 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.