Kf 종속 항목 및 아키텍처

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 정의는 controllerappdevexperience-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 버전의 타사 라이선스를 볼 수도 있습니다.