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.