Kf 需要 Kubernetes 和其他幾個 OSS 專案才能執行。部分依附元件可由 Google 代管服務滿足,例如 Google Kubernetes Engine (GKE) 提供 Kubernetes。
依附元件
取得 CRD 詳細資料
Kf 支援 kubectl
子指令 explain
。您可以列出 Kf CRD 中的欄位,瞭解如何透過自動化功能建立 Kf 物件,而非透過 CLI 手動建立。這個指令旨在搭配 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 的十二因子應用程式。這些檔案包含原始碼、設定和應用程式的目前狀態。應用程式負責協調以下項目:
- 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 中的哪些存取權控制權限元件,對 controller
和 appdevexperience-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 版本的第三方授權。