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 Builds
- Kf Routes
- Kubernetes 部署
- Kubernetes Service
- Kubernetes ServiceAccounts
- Kubernetes Secret
您可以使用 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 包含使用 Service Broker 扩展 Kf 所需的连接信息。它们负责获取代理提供的服务目录并将其显示在 kf marketplace
的输出中。
您可以使用 kubectl
列出 ClusterServiceBrokers:
kubectl get clusterservicebrokers
路由
路由是包含 HTTP 路由规则的高级结构。它们负责协调 Istio VirtualService。
您可以使用 Kf 或 kubectl
列出路线:
kf routes
kubectl get routes -n space-name
ServiceBrokers
ServiceBrokers 包含使用 Service Broker 扩展 Kf 所需的连接信息。它们负责获取代理提供的服务目录并将其显示在 kf marketplace
的输出中。
您可以使用 kubectl
列出 ServiceBrokers:
kubectl get servicebrokers -n space-name
ServiceInstanceBinding
ServiceInstanceBinding 包含用来在 Service Broker 上创建绑定的参数以及该代理为绑定返回的凭据。它们负责对代理调用 Bind API 来绑定服务。
您可以使用 Kf 或 kubectl
列出 ServiceInstanceBindings:
kf bindings
kubectl get serviceinstancebindings -n space-name
ServiceInstance
ServiceInstances 包含用来在 Service Broker 上创建服务的参数。它们负责在代理上调用 Provision API 以创建服务。
您可以使用 Kf 或 kubectl
列出 ServiceInstances:
kf services
kubectl get serviceinstances -n space-name
Spaces
Spaces 包含与 Cloud Foundry 组织和空间类似的配置信息。他们负责:
- 创建要在其中预配其他 Kf 资源的 Kubernetes 命名空间。
- 创建 Kubernetes NetworkPolicies 以强制执行网络连接政策。
- 保留构建作业、应用和路由的配置和政策。
您可以使用 Kf 或 kubectl
列出空间:
kf spaces
kubectl get spaces
Kf RBAC/权限
以下部分列出了要使 Kf 及其组件在集群级层具有正确访问权限所需的权限。这些权限在 Kf 中是必需的并且默认处于启用状态;请勿尝试停用这些权限。
组件 | 命名空间 | 服务账号 |
---|---|---|
controller |
kf | controller |
subresource-apiserver |
kf | controller |
webhook |
kf | controller |
appdevexperience-operator |
appdevexperience | appdevexperience-operator |
请注意,appdevexperience-operator
服务账号与 controller
具有相同的一组权限。operator 是用以部署所有 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
下表列出了如何在 Kf 中使用 RBAC 权限,其中:
- view 包括以下动词:get、list、watch
- modify 包括以下动词:create、update、delete、patch
权限 | 原因 |
---|---|
可查看所有 secrets |
Kf 协调器需要读取 Secret 才能实现空间创建和服务实例绑定等功能。 |
可修改 pods |
Kf 协调器需要修改 Pod 才能实现构建/推送应用和任务等功能。 |
可修改 secrets |
Kf 协调器需要修改 Secret 才能实现构建/推送应用和任务以及服务实例绑定等功能。 |
可修改 configmaps |
Kf 协调器需要修改 configmap 才能实现构建/推送应用和任务等功能。 |
可修改 endpoints |
Kf 协调器需要修改端点才能实现构建/推送应用和路由绑定等功能。 |
可修改 services |
Kf 协调器需要修改 Pod 才能实现构建/推送应用和路由绑定等功能。 |
可修改 events |
Kf 控制器会为 Kf 管理的资源创建和发出事件。 |
可修改 serviceaccounts |
Kf 需要修改服务账号才能部署应用。 |
可修改 endpoints/restricted |
Kf 需要修改端点才能部署应用。 |
可修改 deployments |
Kf 需要修改部署才能实现推送应用等功能。 |
可修改 mutatingwebhookconfiguration |
Cloud Service Mesh(一个 Kf 依赖项)需要具有 Mutatingwebhookconfiguration 权限才能使用准入 webhook。 |
可修改 customresourcedefinitions customresourcedefinitions/status |
Kf 通过自定义资源(例如应用、空间和构建)管理资源。 |
可修改 horizontalpodautoscalers |
Kf 支持基于水平 Pod 自动扩缩器的自动扩缩功能。 |
可修改 namespace/finalizer |
Kf 需要设置网络钩子的所有者引用。 |
第三方库
如需查看第三方库源代码和许可,请参阅任何 Kf 容器映像的 /third_party
目录。
您还可以运行 kf third-party-licenses
,以查看已下载的 Kf CLI 版本的第三方许可。