Menu Close

4.6. 서비스에서 바인딩 데이터 노출

애플리케이션 개발자는 워크로드를 구축하고 연결하기 위해 서비스 지원에 액세스할 수 있어야 합니다. 워크로드를 백업 서비스에 연결하는 것은 항상 어려운 일입니다. 각 서비스 공급자는 시크릿에 액세스하여 워크로드에서 사용할 수 있는 다른 방법이 필요하기 때문입니다.

Service Binding Operator를 사용하면 애플리케이션 개발자가 수동 절차 없이 바인딩 연결을 구성하지 않고 운영자가 관리하는 백업 서비스와 쉽게 워크로드를 바인딩할 수 있습니다. Service Binding Operator가 바인딩 데이터를 제공하기 위해 Operator 공급자 또는 백업 서비스를 생성하는 사용자로 Service Binding Operator에서 자동으로 탐지할 바인딩 데이터를 노출해야 합니다. 그런 다음 Service Binding Operator는 백업 서비스에서 바인딩 데이터를 자동으로 수집하고 이를 워크로드와 공유하여 일관되고 예측 가능한 환경을 제공합니다.

4.6.1. 바인딩 데이터를 노출하는 방법

이 섹션에서는 바인딩 데이터를 노출하는 데 사용할 수 있는 방법을 설명합니다.

워크로드 요구 사항 및 환경, 그리고 제공된 서비스와 함께 작동하는 방식을 알고 이해하고 있는지 확인합니다.

바인딩 데이터는 다음과 같은 상황에서 노출됩니다.

  • 백업 서비스는 프로비저닝된 서비스 리소스로 사용할 수 있습니다.

    연결하려는 서비스는 Service Binding 사양을 준수합니다. 필요한 모든 바인딩 데이터 값을 사용하여 Secret 리소스를 생성하고 백업 서비스 CR(사용자 정의 리소스)에서 참조해야 합니다. 모든 바인딩 데이터 값의 감지는 automatic입니다.

  • 백업 서비스는 프로비저닝된 서비스 리소스로 사용할 수 없습니다.

    백업 서비스의 바인딩 데이터를 노출해야 합니다. 워크로드 요구 사항 및 환경에 따라 바인딩 데이터를 노출하는 다음 방법 중 하나를 선택할 수 있습니다.

    • 직접 시크릿 참조
    • CRD(사용자 정의 리소스 정의) 또는 CR 주석을 통해 바인딩 데이터 선언
    • OLM(Operator Lifecycle Manager) 설명자를 통해 바인딩 데이터 선언
    • 소유 리소스를 통한 바인딩 데이터 감지

4.6.1.1. 프로비저닝된 서비스

프로비저닝된 서비스는 백업 서비스 CR의 .status.binding.name 필드에 저장된 Secret 리소스에 대한 참조와 함께 백업 서비스 CR을 나타냅니다.

Operator 공급자 또는 백업 서비스를 생성하는 사용자는 Secret 리소스를 생성하고 백업 서비스 CR의 .status.binding.name 섹션에서 참조하여 이 방법을 사용하여 서비스 바인딩 사양을 준수할 수 있습니다. 이 시크릿 리소스는 워크로드가 백업 서비스에 연결하는 데 필요한 모든 바인딩 데이터 값을 제공해야 합니다.

다음 예제에서는 CR에서 참조하는 백업 서비스 및 Secret 리소스를 나타내는 AccountService CR을 보여줍니다.

예: AccountService CR

apiVersion: example.com/v1alpha1
kind: AccountService
name: prod-account-service
spec:
  ...
status:
  binding:
    name: hippo-pguser-hippo

예: 참조된 시크릿 리소스

apiVersion: v1
kind: Secret
metadata:
  name: hippo-pguser-hippo
data:
  password: "MTBz"
  user: "Z3Vlc3Q="
  ...

서비스 바인딩 리소스를 생성할 때 다음과 같이 ServiceBinding 사양에서 AccountService 리소스의 세부 정보를 직접 제공할 수 있습니다.

예: ServiceBinding 리소스

apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  services:
  - group: "example.com"
    version: v1alpha1
    kind: AccountService
    name: prod-account-service
  application:
    name: spring-petclinic-rest
    group: apps
    version: v1
    resource: deployments

중요

servicebinding.io API 그룹을 사용한 Service Binding(Spec API 기술 프리뷰) 은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 https://access.redhat.com/support/offerings/techpreview/를 참조하십시오.

예: Specification API의 ServiceBinding 리소스

apiVersion: servicebinding.io/v1alpha3
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  service:
    apiVersion: example.com/v1alpha1
    kind: AccountService
    name: prod-account-service
  application:
    apiVersion: apps/v1
    kind: Deployment
    name: spring-petclinic-rest

이 메서드는 hippo-pguser-hippo 에서 Secret 리소스를 워크로드에 예상할 바인딩 데이터로 참조하는 모든 키를 노출합니다.

4.6.1.2. 직접 시크릿 참조

Service Binding 정의에서 참조할 수 있는 Secret 리소스에서 필요한 모든 바인딩 데이터 값을 사용할 수 있는 경우 이 메서드를 사용할 수 있습니다. 이 메서드에서 ServiceBinding 리소스는 Secret 리소스를 직접 참조하여 서비스에 연결합니다. Secret 리소스의 모든 키는 바인딩 데이터로 노출됩니다.

예: binding.operators.coreos.com API 사양

apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  services:
  - group: ""
    version: v1
    kind: Secret
    name: hippo-pguser-hippo

예: servicebinding.io API와 호환되는 사양

apiVersion: servicebinding.io/v1alpha3
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  service:
    apiVersion: v1
    kind: Secret
    name: hippo-pguser-hippo

4.6.1.3. CRD 또는 CR 주석을 통해 바인딩 데이터 선언

이 메서드를 사용하여 지원 서비스의 리소스에 주석을 달아 바인딩 데이터를 특정 주석으로 노출할 수 있습니다. metadata 섹션에 주석을 추가하면 백업 서비스의 CR 및 CRD가 변경됩니다. Service Binding Operator는 CR 및 CRD에 추가된 주석을 감지한 다음 주석을 기반으로 추출된 값으로 Secret 리소스를 생성합니다.

다음 예제에서는 metadata 섹션에 추가된 주석과 리소스의 참조된 ConfigMap 오브젝트를 보여줍니다.

예: CR 주석에 정의된 Secret 오브젝트에서 바인딩 데이터 표시

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-postgresql
  annotations:
    service.binding: 'path={.metadata.name}-pguser-{.metadata.name},objectType=Secret'
    ...

이전 예제에서는 hippo-pguser-hippo 로 확인되는 {.metadata.name}-pguser-{.metadata.name} 템플릿에 시크릿 이름의 이름을 배치합니다. 템플릿에는 여러 개의 JSONPath 표현식이 포함될 수 있습니다.

예: 리소스의 참조된 Secret 오브젝트

apiVersion: v1
kind: Secret
metadata:
  name: hippo-pguser-hippo
data:
  password: "MTBz"
  user: "Z3Vlc3Q="

예: CR 주석에 정의된 ConfigMap 오브젝트에서 바인딩 데이터 표시

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-postgresql
  annotations:
    service.binding: 'path={.metadata.name}-config,objectType=ConfigMap'
    ...

이전 예제에서는 hippo-config로 확인되는 {.metadata.name}-config 템플릿에 구성 맵의 이름을 배치합니다. 템플릿에는 여러 개의 JSONPath 표현식이 포함될 수 있습니다.

예: 리소스에서 참조된 ConfigMap 오브젝트

apiVersion: v1
kind: ConfigMap
metadata:
  name: hippo-config
data:
  db_timeout: "10s"
  user: "hippo"

4.6.1.4. OLM 설명자를 통한 바인딩 데이터 선언

Operator에서 백업 서비스를 제공하는 경우 이 방법을 사용할 수 있습니다. Operator가 OLM 번들로 배포된 경우 OLM 설명자를 추가하여 노출할 바인딩 데이터를 설명할 수 있습니다. OLM 설명자는 Cluster Service Version 리소스의 일부입니다. Service Binding Operator는 OLM 설명자를 감지한 다음 탐지된 OLM 설명자를 기반으로 추출된 값으로 Secret 리소스를 생성합니다.

specDescriptors 배열 및 statusDescriptors 배열을 사용하여 바인딩 데이터를 노출할 수 있습니다. specDescriptors 배열은 CR의 .spec 섹션 아래에 있는 경로를 지정합니다. statusDescriptors 배열은 CR의 .status 섹션에 있는 경로를 지정합니다.

다음은 데이터를 바인딩하는 데 사용되는 필드 2개뿐입니다.

  • path: 설명자에 설명된 대로 오브젝트의 점으로 구분된 필드 경로입니다.
  • X-Descriptors: 바인딩 데이터를 정의합니다.

다음 예제에서는 경로를 가리키는 리소스에 따라 X-Descriptor를 정의하는 방법을 보여줍니다.

예: 시크릿 노출을 위한 X-Descriptor 정의

- path: data.dbConfiguration
  x-descriptors:
  - urn:alm:descriptor:io.kubernetes:Secret
  - service.binding

예: 구성 맵 노출을 위한 X-Descriptor 정의

- path: data.dbConfiguration
  x-descriptors:
  - urn:alm:descriptor:io.kubernetes:ConfigMap
  - service.binding

참고
  • X-Descriptors에 service.binding 항목이 서비스 바인딩 구성인지 식별해야 합니다.
  • Secret 또는 ConfigMap 특정 X-Descriptors가 없으면 설명자가 지정된 경로의 바인딩 데이터 값을 참조하고 있음을 나타냅니다.

4.6.1.5. 소유 리소스를 통한 바인딩 데이터 감지

백업 서비스에서 바인딩 데이터를 탐지하는 데 사용할 수 있는 경로, 서비스, 구성 맵 또는 시크릿과 같은 하나 이상의 Kubernetes 리소스를 소유하는 경우 이 방법을 사용할 수 있습니다. 이 메서드에서 Service Binding Operator는 백업 서비스 CR에서 소유한 리소스의 바인딩 데이터를 탐지합니다.

다음 예제에서는 Service Binding CR에서 true 로 설정된 detectBinding Resources API 옵션을 보여줍니다.

예제

apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
  name: spring-petclinic-rest-detect-all
  namespace: my-postgresql
spec:
  detectBindingResources: true
  services:
    - group: postgres-operator.crunchydata.com
      version: v1beta1
      kind: PostgresCluster
      name: hippo
  application:
    name: spring-petclinic-rest
    group: apps
    version: v1
    resource: deployments

이전 예에서 PostgresCluster 사용자 정의 서비스 리소스는 경로, 서비스, 구성 맵 또는 시크릿과 같은 하나 이상의 Kubernetes 리소스를 소유합니다.

Service Binding Operator는 보유된 각 리소스에 노출된 바인딩 데이터를 자동으로 탐지합니다.