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