6장. 서비스 카탈로그 구성 요소
6.1. Service Catalog
6.1.1. 개요
클라우드 네이티브 플랫폼에서 실행할 마이크로 서비스 기반 애플리케이션을 개발할 때 서비스 프로바이더 및 플랫폼에 따라 다양한 리소스를 프로비저닝하고 조정, 자격 증명 및 구성을 공유하는 여러 가지 방법이 있습니다.
개발자에게 보다 원활한 환경을 제공하기 위해 OpenShift Container Platform에는 Kubernetes용 OSB API(Open Service Broker API ) 구현인 서비스 카탈로그 가 포함되어 있습니다. 이를 통해 사용자는 OpenShift Container Platform에 배포된 애플리케이션을 다양한 서비스 브로커에 연결할 수 있습니다.
서비스 카탈로그를 사용하면 클러스터 관리자가 단일 API 사양을 사용하여 여러 플랫폼을 통합할 수 있습니다. OpenShift Container Platform 웹 콘솔은 서비스 카탈로그에 서비스 브로커가 제공하는 클러스터 서비스 클래스를 표시하여 사용자가 애플리케이션에 사용할 서비스를 검색하고 인스턴스화할 수 있습니다.
따라서 서비스 사용자는 다양한 공급자의 다양한 유형의 서비스에 대해 쉽고 일관성 있게 사용할 수 있는 반면, 서비스 공급자는 여러 플랫폼에 대한 액세스를 제공하는 하나의 통합 지점을 갖게 됩니다.
6.1.2. 설계
서비스 카탈로그 설계는 이 기본 워크플로를 따릅니다.
다음 용어의 새로운 용어는 개념 및 용어에 더 정의되어 있습니다.
- 클러스터 관리자는 하나 이상의 클러스터 서비스 브로커 를 OpenShift Container Platform 클러스터에 등록합니다. 이 작업은 일부 기본 제공 서비스 브로커에 대해 설치하거나 수동으로 설치하는 동안 자동으로 수행할 수 있습니다.
- 각 서비스 브로커는 사용자가 사용할 수 있어야 하는 OpenShift Container Platform에 대한 클러스터서비스 클래스집합과 해당 서비스(서비스 계획 )의 변형을 지정합니다.
- OpenShift Container Platform 웹 콘솔 또는 CLI를 사용하여 사용자는 사용 가능한 서비스를 검색합니다. 예를 들어, BestDataBase라는 database-as-a-service인 클러스터 서비스 클래스를 사용할 수 있습니다.
- 사용자는 클러스터 서비스 클래스를 선택하고 자체 인스턴스를 요청합니다. 예를 들어 서비스 인스턴스는
my_db
라는 BestDataBase 인스턴스일 수 있습니다. - 사용자 링크 또는 바인딩 은 해당 서비스 인스턴스를 포드 집합(애플리케이션)에 연결합니다. 예를 들어
my_db
서비스 인스턴스는my_app
이라는 사용자의 애플리케이션에 바인딩될 수 있습니다.
사용자가 리소스를 배포하거나 프로비저닝 해제하도록 요청하면 서비스 카탈로그에 요청한 후 요청을 적절한 클러스터 서비스 브로커로 보냅니다. 일부 서비스에서 provision
,deprovision
, update
와 같은 일부 작업은 이행하는 데 다소 시간이 걸릴 것으로 예상됩니다. 클러스터 서비스 브로커를 사용할 수 없는 경우 서비스 카탈로그에서 작업을 계속 시도합니다.
이 인프라를 사용하면 OpenShift Container Platform에서 실행되는 애플리케이션과 사용자가 사용하는 서비스 간에 느슨하게 결합할 수 있습니다. 이를 통해 이러한 서비스를 사용하여 자체 비즈니스 로직에 초점을 맞출 수 있으며 이러한 서비스 관리를 공급업체에게 맡기십시오.
6.1.2.1. 리소스 삭제
사용자가 서비스를 수행하거나 더 이상 청구되지 않으려는 경우 서비스 인스턴스를 삭제할 수 있습니다. 서비스 인스턴스를 삭제하려면 먼저 서비스 바인딩을 제거해야 합니다. 서비스 바인딩 삭제는 바인딩 해제라고 합니다. 삭제 프로세스의 일부에는 삭제되는 서비스 바인딩을 참조하는 시크릿 삭제가 포함됩니다.
모든 서비스 바인딩이 제거되면 서비스 인스턴스가 삭제될 수 있습니다. 서비스 인스턴스를 삭제하면 프로비저닝 해제 라고 합니다.
서비스 바인딩 및 서비스 인스턴스가 포함된 프로젝트 또는 네임스페이스가 삭제되면 서비스 카탈로그에서 먼저 클러스터 서비스 브로커를 요청하여 연결된 인스턴스 및 바인딩을 삭제해야 합니다. 서비스 카탈로그가 클러스터 서비스 브로커와 통신해야 하므로 프로젝트 또는 네임스페이스의 실제 삭제를 지연하고 프로비저닝 해제 작업을 수행할 때까지 기다립니다. 정상적인 상황에서 서비스에 따라 몇 분 이상 걸릴 수 있습니다.
배포에서 사용하는 서비스 바인딩을 삭제하는 경우 배포에서 바인딩 보안에 대한 참조도 제거해야 합니다. 그렇지 않으면 다음 롤아웃이 실패합니다.
6.1.3. 개념 및 용어
- 클러스터 서비스 브로커
클러스터 서비스 브로커는 OSB API 사양을 준수하고 하나 이상의 서비스 세트를 관리하는 서버입니다. 소프트웨어는 자체 OpenShift Container Platform 클러스터 또는 다른 곳에서 호스팅할 수 있습니다.
클러스터 관리자는 클러스터 서비스 브로커를 나타내는
ClusterServiceBroker
API 리소스를 생성하고 OpenShift Container Platform 클러스터에 등록할 수 있습니다. 이를 통해 클러스터 관리자는 클러스터 내에서 사용 가능한 클러스터 서비스 브로커를 사용하여 새로운 유형의 관리 서비스를 만들 수 있습니다.ClusterServiceBroker
리소스는 사용자가 사용할 수 있어야 하는 OpenShift Container Platform에 대한 클러스터 서비스 브로커 및 서비스 세트(및 해당 서비스의 변형)에 대한 연결 세부 정보를 지정합니다. 특별한 유의는 클러스터 서비스 브로커로 인증하는 데 사용되는 데이터가 포함된authInfo
섹션입니다.ClusterServiceBroker 리소스의
예apiVersion: servicecatalog.k8s.io/v1beta1 kind: ClusterServiceBroker metadata: name: BestCompanySaaS spec: url: http://bestdatabase.example.com authInfo: basic: secretRef: namespace: test-ns name: secret-name
- 클러스터 서비스 클래스
또한 서비스 카탈로그 컨텍스트에서 "서비스"와 유사하게 클러스터 서비스 클래스 는 특정 클러스터 서비스 브로커에서 제공하는 관리 서비스 유형입니다. 클러스터에 새 클러스터 서비스 브로커 리소스가 추가될 때마다 서비스 카탈로그 컨트롤러가 해당 클러스터 서비스 브로커에 연결하여 서비스 제품 목록을 가져옵니다. 각각에 대해 새
ClusterServiceClass
리소스가 자동으로 생성됩니다.참고OpenShift Container Platform에는 내부 로드 밸런싱과 관련된 별도의 Kubernetes 리소스인 services 라는 핵심 개념도 있습니다. 이러한 리소스는 서비스 카탈로그 및 OSB API 컨텍스트에서 용어를 사용하는 방식과 혼동하지 않아야 합니다.
ClusterServiceClass 리소스의
예apiVersion: servicecatalog.k8s.io/v1beta1 kind: ClusterServiceClass metadata: name: smallDB brokerName: BestDataBase plans: [...]
- 클러스터 서비스 계획
- 클러스터 서비스 계획은 클러스터 서비스 클래스의 계층을 나타냅니다. 예를 들어 클러스터 서비스 클래스는 서로 다른 비용으로 QoS(Quality-of-service)를 제공하는 일련의 플랜을 노출할 수 있습니다.
- 서비스 인스턴스
서비스 인스턴스는 클러스터 서비스 클래스의 프로비저닝된 인스턴스입니다. 사용자가 서비스 클래스에서 제공하는 기능을 사용하려는 경우 새 서비스 인스턴스를 생성할 수 있습니다.
새
ServiceInstance
리소스가 생성되면 서비스 카탈로그 컨트롤러가 적절한 클러스터 서비스 브로커에 연결하여 서비스 인스턴스를 프로비저닝하도록 지시합니다.ServiceInstance 리소스의
예apiVersion: servicecatalog.k8s.io/v1beta1 kind: ServiceInstance metadata: name: my_db namespace: test-ns spec: externalClusterServiceClassName: smallDB externalClusterServicePlanName: default
- 애플리케이션
- 애플리케이션 이라는 용어는 OpenShift Container Platform 배포 아티팩트(예: 서비스 인스턴스를 사용하는 사용자의 프로젝트에서 실행 중인 포드)를 나타냅니다.
- 인증 정보
- 자격 증명 은 애플리케이션에서 서비스 인스턴스와 통신하는 데 필요한 정보입니다.
- 서비스 바인딩
서비스 바인딩 은 서비스 인스턴스와 애플리케이션 간의 링크입니다. 해당 애플리케이션은 서비스 인스턴스를 참조하고 사용하기를 원하는 클러스터 사용자가 생성합니다.
생성 시 서비스 카탈로그 컨트롤러는 서비스 인스턴스에 대한 연결 세부 정보 및 자격 증명이 포함된 Kubernetes 시크릿을 생성합니다. 이러한 시크릿은 일반적인 포드에 마운트할 수 있습니다.
서비스 바인딩 리소스
예apiVersion: servicecatalog.k8s.io/v1beta1 kind: ServiceBinding metadata: name: myBinding namespace: test-ns spec: instanceRef: name: my_db parameters: securityLevel: confidential secretName: mySecret
사용자는 애플리케이션 경로에 액세스할 수 없게 될 수 있으므로 인스턴스화된 인스턴스의 환경 변수 접두사를 변경하는 데 웹 콘솔을 사용하지 않아야 합니다.
- 매개 변수
매개 변수는 서비스 바인딩 또는 서비스 인스턴스를 사용할 때 추가 데이터를 클러스터 서비스 브로커에 전달하는 데 사용할 수 있는 특수 필드입니다. 유일한 포맷 요구 사항은 매개 변수가 유효한 YAML 또는 JSON이 되도록 하는 것입니다. 위 예제에서 security level 매개 변수는 서비스 바인딩 요청의 클러스터 서비스 브로커에 전달됩니다. 더 많은 보안이 필요한 매개변수의 경우 시크릿에 배치하고
parametersFrom
을 사용하여 참조합니다.시크릿을 참조하는 서비스 바인딩 리소스의 예
apiVersion: servicecatalog.k8s.io/v1beta1 kind: ServiceBinding metadata: name: myBinding namespace: test-ns spec: instanceRef: name: my_db parametersFrom: - secretKeyRef: name: securityLevel key: myKey secretName: mySecret
6.1.4. 제공되는 클러스터 서비스 브로커
OpenShift Container Platform은 서비스 카탈로그와 함께 사용할 클러스터 서비스 브로커를 제공합니다.