Kf-Abhängigkeiten und -Architektur

Für Kf sind Kubernetes und mehrere andere OSS-Projekte erforderlich. Einige der Abhängigkeiten werden mit von Google verwalteten Diensten erfüllt – beispielsweise stellt Google Kubernetes Engine (GKE) Kubernetes bereit.

Abhängigkeiten

CRD-Details abrufen

Kf unterstützt den Unterbefehl kubectl explain. Damit können Sie die Felder in Kf-CRDs auflisten, um zu erfahren, wie Kf-Objekte über Automatisierung erstellt werden, anstatt manuell über die CLI. Dieser Befehl ist für die Verwendung mit Config Management vorgesehen, um die Erstellung und Verwaltung von Ressourcen wie Spaces in vielen Clustern zu automatisieren. Sie können ihn für jede der nachstehenden kinds-Komponenten verwenden.

In diesem Beispiel untersuchen wir den kind namens space in der spaces-CRD:

kubectl explain space.spec

Die Ausgabe sieht etwa so aus:

$ 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.

Kf-Komponenten

kf installiert einige seiner eigenen benutzerdefinierten Ressourcen und Controller von Kubernetes. Die benutzerdefinierten Ressourcen dienen effektiv als Kf API und werden von der kf-Befehlszeile verwendet, um mit dem System zu interagieren. Die Controller verwenden die CRDs von Kf, um die anderen Komponenten im System zu orchestrieren.

Mit dem folgenden Befehl können Sie die von Kf installierten und verwendeten CRDs anzeigen lassen:

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

Die Ausgabe dieses Befehls sieht so aus:

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

Anwendungen stellen eine Twelve-Factor-Anwendung in Kubernetes bereit. Sie umfassen Quellcode, Konfiguration und den aktuellen Status der Anwendung. Apps müssen für den Abgleich verwendet werden:

  • Kf-Builds
  • Kf-Routes
  • Kubernetes-Deployments
  • Kubernetes-Dienste
  • Kubernetes-Dienstkonten
  • Kubernetes-Secrets

Sie können Anwendungen mithilfe von Kf oder kubectl auflisten:

kf apps
kubectl get apps -n space-name

Builds

Builds kombinieren den Quellcode und die Build-Konfiguration für Anwendungen. Sie stellen Tekton TaskRuns mit den richtigen Schritten bereit, mit denen ein Buildpack V2, Buildpack V3 oder Dockerfile-Build erstellt wird.

Sie können Builds mit Kf oder kubectl auflisten:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

ClusterServiceBrokers enthalten die erforderlichen Verbindungsinformationen, um Kf mit einem Service Broker zu erweitern. Sie sind dafür verantwortlich, den Katalog der Dienste, die der Broker bereitstellt, abzurufen und in der Ausgabe von kf marketplace anzuzeigen.

Sie können ClusterServiceBrokers mit kubectl auflisten:

kubectl get clusterservicebrokers

Routen

Routen sind eine allgemeine Struktur, die HTTP-Routingregeln enthält. Sie sind für den Abgleich von Istio VirtualServices verantwortlich.

Sie können Routes mit Kf oder kubectl auflisten:

kf routes
kubectl get routes -n space-name

ServiceBrokers

ServiceBrokers enthalten die erforderlichen Verbindungsinformationen, um Kf mit einem Service Broker zu erweitern. Sie sind dafür verantwortlich, den Katalog der Dienste, die der Broker bereitstellt, abzurufen und in der Ausgabe von kf marketplace anzuzeigen.

Sie können ServiceBrokers mit kubectl auflisten:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

ServiceInstanceBindings enthalten die Parameter zum Erstellen einer Bindung für einen Dienstbroker und die Anmeldedaten, die der Broker für die Bindung zurückgibt. Sie sind für den Aufruf der bind API auf dem Broker verantwortlich, um den Dienst zu binden.

Sie können ServiceInstanceBindings mit Kf oder kubectl auflisten:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

ServiceInstances enthalten die Parameter zum Erstellen eines Dienstes in einem Service Broker. Sie müssen die Provisioning API auf dem Broker aufrufen, um den Dienst zu erstellen.

Sie können ServiceInstances mit Kf oder kubectl auflisten:

kf services
kubectl get serviceinstances -n space-name

Spaces

Spaces enthalten Konfigurationsinformationen, die den Cloud Foundry-Organisationen und -Bereichen ähneln. Sie sind verantwortlich für:

  • das Erstellen des Kubernetes-Namespace, in dem andere Kf-Ressourcen bereitgestellt werden.
  • das Erstellen der Kubernetes-NetworkPolicies, um Netzwerkverbindungsrichtlinien zu erzwingen.
  • das Halten der Konfiguration und Richtlinie für Builds, Anwendungen und Routen.

Sie können Spaces mit Kf oder kubectl auflisten:

kf spaces
kubectl get spaces

Kf-RBAC / Berechtigungen

In den folgenden Abschnitten werden die Berechtigungen für Kf und seine Komponenten für den richtigen Zugriff auf Clusterebene aufgeführt. Diese Berechtigungen sind in Kf standardmäßig erforderlich und aktiviert. Versuchen Sie nicht, sie zu deaktivieren.

Komponenten Namespace Dienstkonto
controller kf Controller
subresource-apiserver kf Controller
webhook kf Controller
appdevexperience-operator appdevexperience appdevexperience-operator

Beachten Sie, dass das Dienstkonto appdevexperience-operator dieselben Berechtigungen wie controller hat. Mit dem Operator werden alle Kf-Komponenten bereitgestellt, einschließlich benutzerdefinierter Ressourcendefinitionen und Controller.

RBAC für Kf-Dienstkonten

Die folgenden apiGroup-Definitionen geben an, welche Zugriffssteuerungsberechtigungen Komponenten in Kf für welche API-Gruppen und -Ressourcen für die Dienstkonten controller und appdevexperience-operator haben.

- 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

In der folgenden Tabelle ist die Verwendung der RBAC-Berechtigungen in Kf aufgeführt, wobei Folgendes gilt:

  • view enthält die Verben: get, list, watch
  • modify enthält die Verben: erstellen, aktualisieren, löschen, patchen
Berechtigungen Gründe
Kann alle secrets ansehen Kf-Abgleicher müssen Secrets für Funktionen wie die Speicherplatzerstellung und die Bindung von Dienstinstanzen lesen.
Kann pods bearbeiten Kf-Abgleicher müssen Pods für Funktionen wie das Erstellen/Übertragen von Anwendungen und Aufgaben ändern.
Kann secrets bearbeiten Kf-Abgleicher müssen Secrets für Funktionen wie das Erstellen/Übertragen von Anwendungen und Aufgaben und die Bindung von Dienstinstanzen ändern.
Kann configmaps bearbeiten Kf-Abgleicher müssen Configmaps für Funktionen wie das Erstellen/Übertragen von Apps und Aufgaben ändern.
Kann endpoints bearbeiten Kf-Abgleicher müssen Endpunkte für Funktionen wie das Erstellen/Übertragen von Anwendungen und die Routenbindung ändern.
Kann services bearbeiten Kf-Abgleicher müssen Pods für Funktionen wie das Erstellen/Übertragen von Anwendungen und die Routenbindung ändern.
Kann events bearbeiten Kf-Controller erstellt Ereignisse für die von Kf verwalteten Ressourcen und gibt sie aus.
Kann serviceaccounts bearbeiten Kf muss Dienstkonten für Anwendungsbereitstellungen ändern.
Kann endpoints/restricted bearbeiten Kf muss Endpunkte für Anwendungsbereitstellungen ändern.
Kann deployments bearbeiten Kf muss Bereitstellungen für Funktionen ändern, z. B. Anwendungen per Push übertragen.
Kann mutatingwebhookconfiguration bearbeiten Mutatingwebhookconfiguration wird von Cloud Service Mesh, einer Kf-Abhängigkeit, für Zulassungs-Webhooks benötigt.
Kann customresourcedefinitions customresourcedefinitions/status bearbeiten Kf verwaltet Ressourcen über benutzerdefinierte Ressourcen wie Anwendungen, Spaces und Builds.
Kann horizontalpodautoscalers bearbeiten Kf unterstützt das Autoscaling anhand von Horizontalen Pod-Autoscalern.
Kann namespace/finalizer bearbeiten Kf muss die Inhaberreferenz für Webhooks festlegen.

Bibliotheken von Drittanbietern

Quellcode und Lizenzen von Drittanbietern finden Sie im Verzeichnis /third_party eines beliebigen Kf-Container-Images.

Sie können auch kf third-party-licenses ausführen, um die Drittanbieterlizenzen für die heruntergeladene Version der Kf-Befehlszeile anzuzeigen.