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에 배포된 12팩터 애플리케이션을 나타냅니다. 소스 코드, 구성, 애플리케이션의 현재 상태를 포함합니다. 앱은 조정을 담당합니다.
- Kf Builds
- Kf Routes
- Kubernetes 배포
- Kubernetes 서비스
- Kubernetes ServiceAccounts
- Kubernetes 보안 비밀
Kf 또는 kubectl
를 사용하여 앱을 나열할 수 있습니다.
kf apps
kubectl get apps -n space-name
빌드
빌드는 앱의 소스 코드와 빌드 구성을 결합합니다. 이 빌드 시스템은 Buildpack V2, 빌드팩 V3 또는 Dockerfile 빌드를 실행하기 위한 올바른 단계에 따라 Tekton TaskRun을 프로비저닝합니다.
Kf 또는 kubectl
을 사용하여 빌드를 나열할 수 있습니다.
kf builds
kubectl get builds -n space-name
ClusterServiceBrokers
ClusterServiceBroker는 Kf를 서비스 브로커로 확장하는 데 필요한 연결 정보를 보유합니다. 브로커가 제공하는 서비스의 카탈로그를 가져와서 kf marketplace
의 출력에 표시하는 역할을 합니다.
kubectl
을 사용하여 ClusterServiceBroker를 나열할 수 있습니다.
kubectl get clusterservicebrokers
경로
경로는 HTTP 라우팅 규칙이 포함된 상위 구조입니다. Istio VirtualServices를 재구성해야 합니다.
Kf 또는 kubectl
을 사용하여 경로를 나열할 수 있습니다.
kf routes
kubectl get routes -n space-name
ServiceBrokers
ServiceBroker는 Kf를 서비스 브로커로 확장하는 데 필요한 연결 정보를 보유합니다. 브로커가 제공하는 서비스의 카탈로그를 가져와서 kf marketplace
의 출력에 표시하는 역할을 합니다.
kubectl
을 사용하여 ServiceBroker를 나열할 수 있습니다.
kubectl get servicebrokers -n space-name
ServiceInstanceBinding
ServiceInstanceBinding은 브로커가 바인딩을 위해 반환한 서비스 브로커와 사용자 인증 정보에 대한 바인딩을 만드는 매개변수를 포함합니다. 브로커에서 bind API를 호출하여 서비스를 바인딩해야 합니다.
Kf 또는 kubectl
을 사용하여 ServiceInstanceBinding을 나열할 수 있습니다.
kf bindings
kubectl get serviceinstancebindings -n space-name
ServiceInstance
ServiceInstance에는 서비스 브로커에 서비스를 만들기 위한 매개변수가 포함됩니다. 서비스를 만들기 위해 브로커에서 provision API를 호출합니다.
Kf 또는 kubectl
을 사용하여 ServiceInstances를 나열할 수 있습니다.
kf services
kubectl get serviceinstances -n space-name
Spaces
Spaces에는 Cloud Foundry 조직 및 Spaces와 유사한 구성 정보가 보관됩니다. Spaces는 다음 역할을 담당합니다.
- 다른 Kf 리소스가 프로비저닝되는 Kubernetes 네임스페이스를 만듭니다.
- Kubernetes NetworkPolicy를 만들어 네트워크 연결 정책을 적용합니다.
- 빌드, 앱, 경로에 대한 구성 및 정책을 포함합니다.
Kf 또는 kubectl
을 사용하여 Spaces를 나열할 수 있습니다.
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
와 동일한 권한 집합이 있습니다. 연산자는 커스텀 리소스 정의 및 컨트롤러를 포함하여 모든 Kf 구성요소를 배포합니다.
Kf 서비스 계정의 RBAC
다음 apiGroup
정의는 controller
및 appdevexperience-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
다음 표에서는 RBAC 권한이 Kf에서 사용되는 방법을 보여줍니다.
- 보기에는 가져오기, 나열, 시청 동사가 포함됩니다.
- 수정에는 만들기, 업데이트, 삭제, 패치 동사가 포함됩니다.
권한 | 이유 |
---|---|
모든 secrets 보기 가능 |
Kf 조정자가 공간 만들기, 서비스 인스턴스 바인딩과 같은 기능의 보안 비밀을 읽어야 합니다. |
pods 수정 가능 |
Kf 조정자가 앱 및 태스크 빌드/푸시와 같은 기능을 위해 포드를 수정해야 합니다. |
secrets 수정 가능 |
Kf 조정자가 앱 및 태스크 빌드/푸시와 서비스 인스턴스 바인딩과 같은 기능을 위해 보안 비밀을 수정해야 합니다. |
configmaps 수정 가능 |
Kf 조정자가 앱 및 태스크 빌드/푸시와 같은 기능을 위해 configmaps를 수정해야 합니다. |
endpoints 수정 가능 |
Kf 조정자가 앱 및 태스크 빌드/푸시 및 경로 바인딩과 같은 기능을 위해 엔드포인트를 수정해야 합니다. |
services 수정 가능 |
Kf 조정자가 앱 및 태스크 빌드/푸시 및 경로 바인딩과 같은 기능을 위해 포드를 수정해야 합니다. |
events 수정 가능 |
Kf 컨트롤러가 Kf에서 관리되는 리소스에 대해 이벤트를 만들고 내보냅니다. |
serviceaccounts 수정 가능 |
Kf가 앱 배포를 위해 서비스 계정을 수정해야 합니다. |
endpoints/restricted 수정 가능 |
Kf가 앱 배포를 위해 엔드포인트를 수정해야 합니다. |
deployments 수정 가능 |
Kf가 앱 푸시와 같은 기능을 위해 배포를 수정해야 합니다. |
mutatingwebhookconfiguration 수정 가능 |
Mutatingwebhookconfiguration은 허용 웹훅을 위한 Kf 종속 항목인 Cloud Service Mesh에 필요합니다. |
customresourcedefinitions customresourcedefinitions/status 수정 가능 |
Kf가 앱, Spaces, 빌드와 같은 커스텀 리소스를 통해 리소스를 관리합니다. |
horizontalpodautoscalers 수정 가능 |
Kf가 수평형 포드 자동 확장 처리를 기준으로 자동 확장을 지원합니다. |
namespace/finalizer 수정 가능 |
Kf가 웹훅의 소유자 참조를 설정해야 합니다. |
제3자 라이브러리
제3자 라이브러리 소스 코드 및 라이선스는 Kf 컨테이너 이미지의 /third_party
디렉터리에서 찾을 수 있습니다.
kf third-party-licenses
를 실행하면 다운로드한 Kf CLI 버전의 타사 라이선스를 볼 수도 있습니다.