Kf 依附元件和架構

Kf 需要 Kubernetes 和其他幾個 OSS 專案才能執行。部分依附元件可由 Google 代管服務滿足,例如 Google Kubernetes Engine (GKE) 提供 Kubernetes。

依附元件

取得 CRD 詳細資料

Kf 支援 kubectl 子指令 explain。您可以列出 Kf CRD 中的欄位,瞭解如何透過自動化功能建立 Kf 物件,而非透過 CLI 手動建立。這個指令旨在搭配 Config Management 使用,可在多個叢集中自動建立及管理聊天室等資源。您可以對下列任何元件 kinds使用此方法。

在本範例中,我們會檢查 spaces CRD 中名為 spacekind

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 的十二因子應用程式。這些檔案包含原始碼、設定和應用程式的目前狀態。應用程式負責協調以下項目:

  • Kf 建構
  • Kf 路線
  • Kubernetes 部署
  • Kubernetes 服務
  • Kubernetes 服務帳戶
  • Kubernetes 密鑰

您可以使用 Kf 或 kubectl 列出應用程式:

kf apps
kubectl get apps -n space-name

建構版本

建構作業會結合應用程式的原始碼和建構設定。這些檔案會為 Tekton TaskRun 佈建正確的步驟,以便啟動 Buildpack V2、Buildpack V3 或 Dockerfile 建構作業。

您可以使用 Kf 或 kubectl 列出建構:

kf builds
kubectl get builds -n space-name

ClusterServiceBrokers

ClusterServiceBrokers 會保留使用服務代理程式擴充 Kf 所需的連線資訊。負責擷取代理程式提供的服務目錄,並在 kf marketplace 的輸出內容中顯示這些目錄。

您可以使用 kubectl 列出 ClusterServiceBrokers:

kubectl get clusterservicebrokers

路徑

路由是包含 HTTP 轉送規則的高階結構。負責協調 Istio VirtualServices。

您可以使用 Kf 或 kubectl 列出路徑:

kf routes
kubectl get routes -n space-name

ServiceBrokers

服務代理程式會保留用於透過服務代理程式擴充 Kf 所需的連線資訊。負責擷取代理程式提供的服務目錄,並在 kf marketplace 的輸出內容中顯示這些目錄。

您可以使用 kubectl 列出 ServiceBrokers:

kubectl get servicebrokers -n space-name

ServiceInstanceBinding

ServiceInstanceBindings 會保留在服務代理程式上建立繫結的參數,以及代理程式為繫結傳回的憑證。這些類別負責在仲介器上呼叫 bind API,以便繫結服務。

您可以使用 Kf 或 kubectl 列出 ServiceInstanceBindings:

kf bindings
kubectl get serviceinstancebindings -n space-name

ServiceInstance

服務執行個體會保留在服務中介服務上建立服務的參數。負責在仲介上呼叫佈建 API,以建立服務。

您可以使用 Kf 或 kubectl 列出 ServiceInstance:

kf services
kubectl get serviceinstances -n space-name

Spaces

空間會保留設定資訊,類似於 Cloud Foundry 機構和空間。負責處理以下事項:

  • 建立其他 Kf 資源會佈建至其中的 Kubernetes 命名空間。
  • 建立 Kubernetes NetworkPolicies,以便強制執行網路連線政策。
  • 保留建構、應用程式和路徑的設定和政策。

您可以使用 Kf 或 kubectl 列出聊天室:

kf spaces
kubectl get spaces

Kf RBAC / 權限

下列各節將列出 Kf 及其元件的權限,以便在叢集層級正確存取。這些權限是 Kf 中必要的權限,且預設為啟用;請勿嘗試停用這些權限。

元件 命名空間 服務帳戶
controller kf 控制器
subresource-apiserver kf 控制器
webhook kf 控制器
appdevexperience-operator appdevexperience appdevexperience-operator

請注意,appdevexperience-operator 服務帳戶的權限與 controller 相同。運算子會部署所有 Kf 元件,包括自訂資源定義和控制器。

Kf 服務帳戶的 RBAC

下列 apiGroup 定義詳細說明 Kf 中的哪些存取權控制權限元件,對 controllerappdevexperience-operator 服務帳戶的哪些 API 群組和資源有效。

- 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

下表列出 RBAC 權限在 Kf 中的使用方式:

  • view 包含以下動詞:get、list、watch
  • 修改包括動詞:建立、更新、刪除、修補
權限 原因
可以查看所有 secrets Kf 調和器需要讀取功能的機密資料,例如建立空間和服務執行個體繫結。
可修改 pods Kf 調和器需要修改 Pod,才能執行建構/推送應用程式和工作等功能。
可修改 secrets Kf 調和器需要修改應用程式和工作建立/推送及服務執行個體繫結等功能的密碼。
可修改 configmaps Kf 調和器需要修改 configmaps,才能執行建構/推送應用程式和工作等功能。
可修改 endpoints Kf 調和器需要修改端點,才能執行建構/推送應用程式和路徑繫結等功能。
可修改 services Kf 調和器需要修改 Pod,才能執行建構/推送應用程式和路徑繫結等功能。
可修改 events Kf 控制器會為 Kf 管理的資源建立及發出事件。
可修改 serviceaccounts Kf 需要修改應用程式部署作業的服務帳戶。
可修改 endpoints/restricted Kf 需要修改應用程式部署作業的端點。
可修改 deployments Kf 需要修改應用程式推送等功能的部署作業。
可修改 mutatingwebhookconfiguration Cloud Service Mesh 是 Kf 依附元件,需要使用變異 webhookconfiguration 來處理許可 webhook。
可修改 customresourcedefinitions customresourcedefinitions/status Kf 會透過自訂資源 (例如應用程式、空間和版本) 管理資源。
可修改 horizontalpodautoscalers Kf 支援以水平 Pod 自動配置器為基礎的自動調度資源。
可修改 namespace/finalizer Kf 需要設定 webhook 的擁有者參照。

第三方程式庫

您可以在任何 Kf 容器映像檔的 /third_party 目錄中找到第三方程式庫原始碼和授權。

您也可以執行 kf third-party-licenses,查看所下載 Kf CLI 版本的第三方授權。