6.7. 바인딩 데이터 예상
이 섹션에서는 바인딩 데이터를 사용하는 방법에 대한 정보를 제공합니다.
6.7.1. 바인딩 데이터 사용
백업 서비스에서 바인딩 데이터를 노출한 후 워크로드에서 이 데이터에 액세스하고 사용할 수 있도록 백업 서비스의 워크로드에 예상해야 합니다.After the backing service exposes the binding data, for a workload to access and consume this data, you must project it into the workload from a backing service. Service Binding Operator는 다음 방법에서 이 데이터 세트를 워크로드에 자동으로 예상합니다.
- 기본적으로 파일로 설정됩니다.
-
환경 변수로
ServiceBinding
리소스에서.spec.bindAsFiles
매개변수를 구성합니다.
6.7.2. 워크로드 컨테이너 내부의 바인딩 데이터를 프로젝트에 대한 디렉터리 경로 구성
기본적으로 Service Binding Operator는 바인딩 데이터를 워크로드 리소스의 특정 디렉터리에 파일로 마운트합니다. 워크로드가 실행되는 컨테이너에서 SERVICE_BINDING_ROOT
환경 변수 설정을 사용하여 디렉터리 경로를 구성할 수 있습니다.
예: 파일로 마운트된 바인딩 데이터
$SERVICE_BINDING_ROOT 1 ├── account-database 2 │ ├── type 3 │ ├── provider 4 │ ├── uri │ ├── username │ └── password └── transaction-event-stream 5 ├── type ├── connection-count ├── uri ├── certificates └── private-key
바인딩 데이터를 환경 변수로 사용하려면 환경 변수를 읽을 수 있는 선택한 프로그래밍 언어의 기본 제공 언어 기능을 사용합니다.
예: Python 클라이언트 사용
import os username = os.getenv("USERNAME") password = os.getenv("PASSWORD")
바인딩 데이터 디렉터리 이름을 사용하여 바인딩 데이터를 조회하는 경우
Service Binding Operator는 ServiceBinding
리소스 이름(.metadata.name
)을 바인딩 데이터 디렉터리 이름으로 사용합니다. 또한 사양에서는 .spec.name
필드를 통해 해당 이름을 재정의하는 방법을 제공합니다. 결과적으로 네임스페이스에 ServiceBinding
리소스가 여러 개인 경우 데이터 이름 충돌을 바인딩할 가능성이 있습니다. 그러나 Kubernetes에서 볼륨 마운트의 특성으로 인해 바인딩 데이터 디렉터리에는 Secret
리소스 중 하나만의 값이 포함됩니다.
6.7.2.1. 바인딩 데이터를 파일로 투사하기 위한 최종 경로 계산
다음 표에는 특정 디렉터리에 파일이 마운트될 때 바인딩 데이터 프로젝션의 최종 경로가 계산되는 방법에 대한 구성이 요약되어 있습니다.
SERVICE_BINDING_ROOT | 최종 경로 |
---|---|
사용할 수 없음 |
|
|
|
이전 표에서 < ServiceBinding_ResourceName
> 항목은 CR(사용자 정의 리소스)의 .metadata.name
섹션에서 구성하는 ServiceBinding
리소스의 이름을 지정합니다.
기본적으로 예상된 파일에는 0644로 설정된 권한을 가져옵니다. Service Binding Operator는 Kubernetes의 버그로 인해 특정 권한을 설정할 수 없으므로 서비스에 0600
과 같은 특정 권한이 필요한 경우 문제가 발생합니다. 이 문제를 해결하려면 프로그램 코드 또는 워크로드 리소스 내에서 실행 중인 애플리케이션의 코드를 수정하여 파일을 /tmp
디렉터리에 복사하고 적절한 권한을 설정할 수 있습니다.
기존 SERVICE_BINDING_ROOT
환경 변수 내의 바인딩 데이터에 액세스하고 사용하려면 환경 변수를 읽을 수 있는 선택한 프로그래밍 언어의 기본 제공 언어 기능을 사용합니다.
예: Python 클라이언트 사용
from pyservicebinding import binding try: sb = binding.ServiceBinding() except binding.ServiceBindingRootMissingError as msg: # log the error message and retry/exit print("SERVICE_BINDING_ROOT env var not set") sb = binding.ServiceBinding() bindings_list = sb.bindings("postgresql")
이전 예제에서 bindings_list
변수에는 postgresql
데이터베이스 서비스 유형의 바인딩 데이터가 포함되어 있습니다.
6.7.3. 바인딩 데이터 계획
워크로드 요구 사항 및 환경에 따라 바인딩 데이터를 파일 또는 환경 변수로 프로젝트하도록 선택할 수 있습니다.
사전 요구 사항
다음 개념을 이해하고 있습니다.
- 워크로드의 환경 및 요구 사항과 제공되는 서비스와 함께 작동하는 방법.
- 워크로드 리소스의 바인딩 데이터 사용
- 기본 방법에 대해 데이터 프로젝션의 최종 경로를 계산하는 방법에 대한 구성입니다.
- 바인딩 데이터는 백업 서비스에서 노출됩니다.
절차
-
바인딩 데이터를 파일로 프로젝션하려면 기존
SERVICE_BINDING_ROOT
환경 변수가 워크로드가 실행되는 컨테이너에 있는지 확인하여 대상 폴더를 결정합니다. -
바인딩 데이터를 환경 변수로 프로젝션하려면
.spec.bindAsFiles
매개변수 값을 CR(사용자 정의 리소스)의ServiceBinding
리소스에서false
로 설정합니다.