Dependensi dan arsitektur Kf

Kf memerlukan Kubernetes dan beberapa project OSS lainnya untuk berjalan. Beberapa dependensi dipenuhi dengan layanan yang dikelola Google—misalnya, Google Kubernetes Engine (GKE) menyediakan Kubernetes.

Dependensi

Mendapatkan detail CRD

Kf mendukung subperintah kubectl explain. Dengan cara ini, Anda dapat mencantumkan kolom di CRD Kf untuk memahami cara membuat objek Kf melalui otomatisasi, bukan secara manual melalui CLI. Perintah ini dirancang untuk digunakan dengan Config Management guna mengotomatiskan pembuatan dan pengelolaan resource seperti Ruang di banyak cluster. Anda dapat menggunakannya terhadap komponen kinds di bawah.

Dalam contoh ini, kita akan memeriksa kind yang disebut space di CRD spaces:

kubectl explain space.spec

Output-nya terlihat mirip dengan ini:

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

Komponen kf

Kf menginstal beberapa resource kustom dan pengontrol Kubernetes-nya sendiri. Resource kustom berfungsi secara efektif sebagai Kf API dan digunakan oleh CLI kf untuk berinteraksi dengan sistem. Pengontrol menggunakan CRD Kf untuk mengatur komponen lain dalam sistem.

Anda dapat melihat CRD yang diinstal dan digunakan oleh Kf dengan menjalankan perintah berikut:

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

Output perintah tersebut adalah sebagai berikut:

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

Aplikasi

Aplikasi mewakili aplikasi dua belas faktor yang di-deploy ke Kubernetes. File ini mencakup kode sumber, konfigurasi, dan status aplikasi saat ini. Aplikasi bertanggung jawab untuk merekonsiliasi:

  • Build Kf
  • Kf Routes
  • Deployment Kubernetes
  • Layanan Kubernetes
  • ServiceAccounts Kubernetes
  • Secret Kubernetes

Anda dapat mencantumkan Aplikasi menggunakan Kf atau kubectl:

kf apps
kubectl get apps -n space-name

Build

Build menggabungkan kode sumber dan konfigurasi build untuk Aplikasi. Buildpack menyediakan Tekton TaskRun dengan langkah-langkah yang benar untuk mengaktifkan build Buildpack V2, Buildpack V3, atau Dockerfile.

Anda dapat mencantumkan Build menggunakan Kf atau kubectl:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

ClusterServiceBrokers menyimpan informasi koneksi yang diperlukan untuk memperluas Kf dengan broker layanan. Fungsi ini bertanggung jawab untuk mengambil katalog layanan yang disediakan broker dan menampilkannya dalam output kf marketplace.

Anda dapat mencantumkan ClusterServiceBrokers menggunakan kubectl:

kubectl get clusterservicebrokers

Rute

Rute adalah struktur tingkat tinggi yang berisi aturan pemilihan rute HTTP. VirtualService ini bertanggung jawab untuk merekonsiliasi VirtualServices Istio.

Anda dapat mencantumkan Rute menggunakan Kf atau kubectl:

kf routes
kubectl get routes -n space-name

ServiceBrokers

ServiceBrokers menyimpan informasi koneksi yang diperlukan untuk memperluas Kf dengan broker layanan. Fungsi ini bertanggung jawab untuk mengambil katalog layanan yang disediakan broker dan menampilkannya dalam output kf marketplace.

Anda dapat mencantumkan ServiceBrokers menggunakan kubectl:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

ServiceInstanceBindings menyimpan parameter untuk membuat binding pada broker layanan dan kredensial yang ditampilkan broker untuk binding. API ini bertanggung jawab untuk memanggil API binding di broker guna mengikat layanan.

Anda dapat mencantumkan ServiceInstanceBindings menggunakan Kf atau kubectl:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

ServiceInstances menyimpan parameter untuk membuat layanan di broker layanan. API ini bertanggung jawab untuk memanggil API penyediaan di broker untuk membuat layanan.

Anda dapat mencantumkan ServiceInstance menggunakan Kf atau kubectl:

kf services
kubectl get serviceinstances -n space-name

Ruang

Ruang menyimpan informasi konfigurasi yang mirip dengan organisasi dan ruang Cloud Foundry. Mereka bertanggung jawab untuk:

  • Membuat Namespace Kubernetes tempat resource Kf lainnya disediakan.
  • Membuat NetworkPolicies Kubernetes untuk menerapkan kebijakan koneksi jaringan.
  • Menyimpan konfigurasi dan kebijakan untuk Build, Aplikasi, dan Rute.

Anda dapat mencantumkan Ruang menggunakan Kf atau kubectl:

kf spaces
kubectl get spaces

RBAC / Izin Kf

Bagian berikut mencantumkan izin agar Kf dan komponennya memiliki akses yang benar di tingkat cluster. Izin ini diperlukan dan diaktifkan secara default di Kf; jangan mencoba menonaktifkannya.

Komponen Namespace Akun Layanan
controller kf pengontrol
subresource-apiserver kf pengontrol
webhook kf pengontrol
appdevexperience-operator appdevexperience appdevexperience-operator

Perhatikan bahwa akun layanan appdevexperience-operator memiliki kumpulan izin yang sama dengan controller. Operator adalah yang men-deploy semua komponen Kf, termasuk definisi dan pengontrol resource kustom.

RBAC untuk akun layanan Kf

Definisi apiGroup berikut menjelaskan komponen izin kontrol akses di Kf pada grup dan resource API mana untuk akun layanan controller dan 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

Tabel berikut mencantumkan cara izin RBAC digunakan di Kf, dengan:

  • view mencakup kata kerja: get, list, watch
  • ubah mencakup kata kerja: buat, perbarui, hapus, patch
Izin Alasan
Dapat melihat semua secrets Penggabungan Kf perlu membaca secret untuk fungsi seperti pembuatan ruang dan pengikatan instance layanan.
Dapat mengubah pods Penggabungan Kf perlu mengubah pod untuk fungsi seperti mem-build/men-push Aplikasi dan Tugas.
Dapat mengubah secrets Penggabungan Kf perlu mengubah secret untuk fungsi seperti mem-build/mendorong Aplikasi dan Tugas serta mengikat instance layanan.
Dapat mengubah configmaps Penggabungan Kf perlu mengubah configmap untuk fungsi seperti mem-build/mendorong Aplikasi dan Tugas.
Dapat mengubah endpoints Penggabungan Kf perlu mengubah endpoint untuk fungsi seperti mem-build/mendorong Aplikasi dan mengikat rute.
Dapat mengubah services Penggabungan Kf perlu mengubah pod untuk fungsi seperti mem-build/mendorong Aplikasi dan mengikat rute.
Dapat mengubah events Pengontrol Kf membuat dan memunculkan peristiwa untuk resource yang dikelola oleh Kf.
Dapat mengubah serviceaccounts Kf perlu mengubah akun layanan untuk deployment Aplikasi.
Dapat mengubah endpoints/restricted Kf perlu mengubah endpoint untuk deployment Aplikasi.
Dapat mengubah deployments Kf perlu mengubah deployment untuk fungsi seperti mendorong Aplikasi.
Dapat mengubah mutatingwebhookconfiguration Mutatingwebhookconfiguration diperlukan oleh Cloud Service Mesh, dependensi Kf, untuk webhook izin.
Dapat mengubah customresourcedefinitions customresourcedefinitions/status Kf mengelola resource melalui Resource Kustom seperti Aplikasi, Ruang, dan Build.
Dapat mengubah horizontalpodautoscalers Kf mendukung penskalaan otomatis berdasarkan Horizontal Pod Autoscaler.
Dapat mengubah namespace/finalizer Kf perlu menetapkan referensi pemilik webhook.

Library pihak ketiga

Kode sumber dan lisensi library pihak ketiga dapat ditemukan di direktori /third_party dari image container Kf apa pun.

Anda juga dapat menjalankan kf third-party-licenses untuk melihat lisensi pihak ketiga untuk versi Kf CLI yang Anda download.