Kf の依存関係とアーキテクチャ

Kf を実行するには、Kubernetes と他のいくつかの OSS プロジェクトが必要です。一部の依存関係は Google マネージド サービスで十分です。たとえば、Google Kubernetes Engine(GKE)は Kubernetes を提供します。

依存関係

CRD の詳細を取得する

Kf は、kubectl のサブコマンド explain をサポートしています。このコマンドにより、Kf CRD のフィールドを一覧表示して、CLI によって手動で使用するのではなく自動化して Kf オブジェクトを作成する方法を理解できます。このコマンドは、Config Management とともに使用され、多数のクラスタ間でスペースなどのリソースを自動的に作成して管理するように設計されています。これは、以下のコンポーネントのどの kinds に対しても使用できます。

この例では、spaces CRD の space と呼ばれる kind を見てみます。

kubectl explain space.spec

出力は次のようになります。

$ 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 のコンポーネント

Kf は、いくつかの独自の Kubernetes カスタム リソースコントローラをインストールします。カスタム リソースは、Kf の API として効果的な役割を果たし、kf CLI でシステムとやり取りするために使用されます。コントローラは、Kf の CRD を使用してシステム内の他のコンポーネントをオーケストレートします。

Kf によってインストールされて使用される CRD を確認するには、次のコマンドを実行します。

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

このコマンドの出力は次のようになります。

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

アプリ

アプリは、Kubernetes にデプロイされた Twelve-Factor アプリケーションです。これには、ソースコード、構成、アプリケーションの現在の状態が含まれます。アプリは、次のものを調整します。

  • Kf Builds
  • Kf Routes
  • Kubernetes Deployment
  • Kubernetes Services
  • Kubernetes ServiceAccounts
  • Kubernetes Secret

アプリの一覧を表示するには、Kf または kubectl を使用します。

kf apps
kubectl get apps -n space-name

ビルド

ビルドは、アプリのソースコードとビルド構成を結合します。Buildpack V2、Buildpack V3、Dockerfile のビルドを有効にする正しい手順で Tekton TaskRun をプロビジョニングします。

ビルドの一覧を表示するには、Kf または kubectl を使用します。

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

ClusterServiceBrokers は、Kf をサービス ブローカーで拡張するために必要な接続情報を保持します。ブローカーで提供されるサービスのカタログを取得し、kf marketplace の出力で表示します。

ClusterServiceBrokers の一覧を表示するには、kubectl を使用します。

kubectl get clusterservicebrokers

ルート

ルートは、HTTP ルーティング ルールを含む高レベルの構造です。Istio VirtualServices の調整を行います。

ルートの一覧を表示するには、Kf または kubectl を使用します。

kf routes
kubectl get routes -n space-name

ServiceBrokers

ServiceBrokers は、Kf をサービス ブローカーで拡張するために必要な接続情報を保持します。ブローカーで提供されるサービスのカタログを取得し、kf marketplace の出力で表示します。

ServiceBrokers の一覧を表示するには、kubectl を使用します。

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

ServiceInstanceBinding は、サービス ブローカーのバインディングを作成するパラメータと、バインディングでブローカーから返される認証情報を保持します。ブローカーの bind API を呼び出して、サービスをバインドします。

ServiceInstanceBinding の一覧を表示するには、Kf または kubectl を使用します。

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

ServiceInstance は、サービス ブローカーにサービスを作成するパラメータを保持します。ブローカーの Provisioning API を呼び出して、サービスを作成します。

ServiceInstance の一覧を表示するには、Kf または kubectl を使用します。

kf services
kubectl get serviceinstances -n space-name

Space

Space は、Cloud Foundry の組織やスペースと同様の構成情報を保持します。以下の処理を行います。

  • 他の Kf リソースをプロビジョニングする Kubernetes Namespace を作成する。
  • ネットワーク接続ポリシーを適用する Kubernetes NetworkPolicy を作成する。
  • ビルド、アプリ、ルートの構成とポリシーを保持する。

Space の一覧を表示するには、Kf または kubectl を使用します。

kf spaces
kubectl get spaces

Kf RBAC / 権限

以下のセクションでは、Kf とそのコンポーネントにクラスタレベルで適切なアクセス権を付与するための権限を示します。これらの権限は必須で、Kf ではデフォルトで有効になっています。これらは無効にしないでください。

コンポーネント Namespace サービス アカウント
controller kf controller
subresource-apiserver kf controller
webhook kf controller
appdevexperience-operator appdevexperience appdevexperience-operator

appdevexperience-operator サービス アカウントには、controller と同じ権限セットがあります。このオペレータは、カスタム リソース定義とコントローラを含むすべての Kf コンポーネントをデプロイします。

Kf サービス アカウントの RBAC

次の apiGroup 定義では、controllerappdevexperience-operator サービス アカウントの両方の API グループとリソースに対する、Kf のアクセス制御権限コンポーネントを記述しています。

- 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

次の表に、Kf で RBAC 権限を使用する方法を示します。

  • 表示には、取得、一覧表示、監視が含まれます。
  • 変更には、作成、更新、削除、パッチ適用が含まれます。
権限 理由
すべての secrets を表示できる Kf Reconciler は、スペースの作成やサービス インスタンス バインディングなどの機能のために Secret を読み取る必要があります。
pods を変更できる Kf Reconciler は、App や Task のビルド / push などの機能のために Pod を変更する必要があります。
secrets を変更できる Kf Reconciler は、App や Task のビルド / push やサービス インスタンス バインディングなどの機能のために Secret を変更する必要があります。
configmaps を変更できる Kf Reconciler は、App や Task のビルド / push などの機能のために ConfigMap を変更する必要があります。
endpoints を変更できる Kf Reconciler は、App のビルド / push やルート バインディングなどの機能のためにエンドポイントを変更する必要があります。
services を変更できる Kf Reconciler は、App のビルド / push やルート バインディングなどの機能のために Pod を変更する必要があります。
events を変更できる Kf コントローラは、Kf によって管理されるリソースのイベントを作成して出力します。
serviceaccounts を変更できる Kf は、App のデプロイ用にサービス アカウントを変更する必要があります。
endpoints/restricted を変更できる Kf は、App のデプロイ用のエンドポイントを変更する必要があります。
deployments を変更できる Kf は、App の push などの機能のために Deployment を変更する必要があります。
mutatingwebhookconfiguration を変更できる アドミッション Webhook には、Kf の依存関係である Cloud Service Mesh に Mutatingwebhookconfiguration が必要です。
customresourcedefinitions customresourcedefinitions/status を変更できる Kf は、App、Space、Build などのカスタム リソースを使用してリソースを管理します。
horizontalpodautoscalers を変更できる Kf は、HorizontalPodAutoscaler に基づく自動スケーリングをサポートしています。
namespace/finalizer を変更できる Kf は、Webhook のオーナー参照を設定する必要があります。

サードパーティ ライブラリ

サードパーティ ライブラリのソースコードとライセンスは、Kf コンテナ イメージの /third_party ディレクトリにあります。

kf third-party-licenses を実行すると、ダウンロードした Kf CLI のバージョンのサードパーティ ライセンスを表示することもできます。