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.