이 문서에서는 GDC용 VM 런타임을 사용하여 Cloud Storage에 액세스하도록 사용자 인증 정보를 만들고 사용하는 방법을 보여줍니다. Cloud Storage 플러그인을 사용하면 Containerized Data Importer(CDI)를 사용하여 Cloud Storage 버킷에서 VM 이미지를 가져올 수 있습니다. 그런 후 Cloud Storage의 이미지에서 가상 디스크를 만들고 클러스터에서 실행되는 VM에 이를 연결할 수 있습니다. CDI는 GDC용 VM 런타임을 실행하는 클러스터에서 자동으로 사용 설정됩니다.
시작하기 전에
이 문서를 완료하려면 다음 리소스에 대해 액세스 권한이 필요합니다.
- Google Distributed Cloud 버전 1.12.0(
anthosBareMetalVersion: 1.12.0
) 이상 클러스터에 대한 액세스 권한. 워크로드 실행이 가능한 모든 클러스터 유형을 사용할 수 있습니다. 필요한 경우 Compute Engine에서 Google Distributed Cloud를 사용해 보거나 클러스터 만들기 개요를 참조하세요. - Cloud Storage 액세스에 사용하려는 서비스 계정 및 서비스 계정 키. 필요한 경우 Cloud Storage 버킷에 액세스할 수 있는 서비스 계정을 구성합니다.
사용자 인증 정보 개요
Cloud Storage에 액세스하려면 스토리지 버킷에 사용자 인증 정보를 제공하는 서비스 계정을 사용합니다. 스토리지 버킷에 성공적으로 액세스하기 위해서는 서비스 계정에 여러 권한이 필요합니다.
- 공개 스토리지 버킷: 자체 식별을 위해 서비스 계정을 사용하지만 특정 권한은 필요하지 않습니다.
- 비공개 스토리지 버킷: 스토리지 계정에 스토리지 버킷에 대한 뷰어 또는 관리자 권한이 필요합니다.
CDI에 서비스 계정 인증 정보를 제공하는 방법은 두 가지입니다.
- 클러스터 노드에 Google 애플리케이션 기본 사용자 인증 정보(ADC)를 구성합니다. 자세한 내용은 서비스 계정으로 인증을 참조하세요.
- Cloud Storage에 액세스하기 위해 서비스 계정 키가 포함된 보안 비밀을 제공합니다. 이 문서의 나머지 부분에서는 서비스 계정 키 및 보안 비밀을 만드는 방법을 보여줍니다.
보안 비밀 만들기
데이터 볼륨의 네임스페이스에 생성된 보안 비밀을 사용해서 서비스 계정 키를 Kubernetes로 전달합니다. 보안 비밀의 data
섹션에는 creds-gcp.json
항목이 포함되어 있습니다. 값은 서비스 계정 키 파일의 base64 인코딩 데이터입니다. CLI에서 이 base64 인코딩 데이터가 자동으로 생성됩니다. 보안 비밀을 만들기 위해 YAML 매니페스트를 사용하는 경우 먼저 서비스 계정 키 파일의 콘텐츠를 base64 해시로 만듭니다.
CLI
kubectl
을 사용하여 보안 비밀을 만듭니다.kubectl create secret generic SECRET_NAME \ --from-file=creds-gcp.json=SERVICE_ACCOUNT_KEY_PATH \ --namespace NAMESPACE_NAME
다음 값을 바꿉니다.
SECRET_NAME
: 보안 비밀의 이름SERVICE_ACCOUNT_KEY_PATH
: 서비스 계정 키 파일의 경로NAMESPACE_NAME
: 보안 비밀의 네임스페이스- CDI가 실행되는 클러스터 및 데이터 볼륨과 동일한 네임스페이스에 보안 비밀을 만듭니다. CDI는 GDC용 VM 런타임을 실행하는 클러스터에서 자동으로 사용 설정됩니다.
매니페스트
원하는 편집기에서 my-secret.yaml과 같은
Secret
매니페스트를 만듭니다.nano my-secret.yaml
다음 YAML 매니페스트를 복사하여 붙여넣습니다.
apiVersion: v1 data: creds-gcp.json: BASE64_SERVICE_ACCOUNT_FILE kind: Secret metadata: name: SECRET_NAME namespace: NAMESPACE_NAME type: Opaque
다음 값을 바꿉니다.
BASE64_SERVICE_ACCOUNT_FILE
: 서비스 계정 키 파일의 콘텐츠에 대한 base64 해시입니다.SECRET_NAME
: 보안 비밀의 이름NAMESPACE_NAME
: 보안 비밀의 네임스페이스- CDI가 실행되는 클러스터 및 데이터 볼륨과 동일한 네임스페이스에 보안 비밀을 만듭니다. CDI는 GDC용 VM 런타임을 실행하는 클러스터에서 자동으로 사용 설정됩니다.
편집기에서 보안 비밀 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 보안 비밀 매니페스트를 적용합니다.kubectl apply -f my-secret.yaml
기존 보안 비밀 전달
보안 비밀을 만드는 대신 SecretForwarder
를 만들어서 기존 보안 비밀을 사용하도록 전달할 수 있습니다. SecretForwarder
에서는 동일한 클러스터 내에서 또는 관리자 클러스터에서 사용자 클러스터로와 같이 클러스터 간에 보안 비밀을 전달할 수 있습니다.
대상 보안 비밀을 사용하여 Cloud Storage에 액세스하려면 소스 보안 비밀의 data
섹션에 creds-gcp.json
키가 있어야 합니다.
동일한 클러스터
다음 예시 SecretForwarder
매니페스트는 동일한 클러스터에서 보안 비밀을 전달합니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
name: cdi-gcs
namespace: default
spec:
inClusterTargetSecrets:
name: gcs-sa
namespaces:
- default
sourceSecret:
name: gke-connect
namespace: anthos-creds
이 예시에서는 다음을 수행합니다.
default
네임스페이스에서cdi-gcs
라는SecretForwarder
를 만듭니다.anthos-creds
네임스페이스에 있는gke-connect
라는 보안 비밀을default
네임스페이스에 있는gcs-sa
라는 새 보안 비밀로 전달합니다.- 동일한 클러스터에 새 보안 비밀을 만듭니다.
동일한 클러스터에서 보안 비밀을 전달하려면 다음 단계를 완료합니다.
원하는 편집기에서 my-forwarded-secret.yaml과 같은
SecretForwarder
매니페스트를 만듭니다.nano my-forwarded-secret.yaml
다음 YAML 매니페스트를 복사하여 붙여넣습니다.
apiVersion: baremetal.cluster.gke.io/v1 kind: SecretForwarder metadata: name: SECRET_FORWARDER_NAME namespace: NAMESPACE_NAME spec: inClusterTargetSecrets: name: TARGET_SECRET_NAME namespaces: - TARGET_NAMESPACE_NAME sourceSecret: name: SOURCE_SECRET_NAME namespace: SOURCE_NAMESPACE_NAME
다음 값을 바꿉니다.
SECRET_FORWARDER_NAME
: SecretForwarder의 이름NAMESPACE_NAME
: SecretForwarder의 네임스페이스TARGET_SECRET_NAME
: 새 보안 비밀의 이름TARGET_NAMESPACE_NAME
: 새 보안 비밀의 네임스페이스- CDI가 실행되는 클러스터 및 데이터 볼륨과 동일한 네임스페이스에 보안 비밀을 만듭니다. CDI는 GDC용 VM 런타임을 실행하는 클러스터에서 자동으로 사용 설정됩니다.
SOURCE_SECRET_NAME
: 전달할 소스 보안 비밀의 이름SOURCE_NAMESPACE_NAME
: 전달할 소스 보안 비밀의 네임스페이스
편집기에서
SecretForwarder
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여SecretForwarder
매니페스트를 적용합니다.kubectl apply -f my-forwarded-secret.yaml
클러스터 간
다음 예시 SecretForwarder
매니페스트는 보안 비밀을 클러스터 간에 전달합니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
name: cdi-gcs
namespace: cluster-user1
spec:
RemoteClusterTargetSecrets:
name: gcs-sa
namespaces:
- default
sourceSecret:
name: gke-connect
namespace: anthos-creds
이 예시에서는 다음을 수행합니다.
cluster-user1
네임스페이스에서cdi-gcs
라는SecretForwarder
를 만듭니다.anthos-creds
네임스페이스에 있는gke-connect
라는 보안 비밀을default
네임스페이스에 있는gcs-sa
라는 새 보안 비밀로 전달합니다.- 클러스터에
user1
라는 새 보안 비밀을 만듭니다.
동일한 클러스터에서 보안 비밀을 전달하려면 다음 단계를 완료합니다.
원하는 편집기에서 my-forwarded-secret.yaml과 같은
SecretForwarder
매니페스트를 만듭니다.nano my-forwarded-secret.yaml
다음 YAML 매니페스트를 복사하여 붙여넣습니다.
apiVersion: baremetal.cluster.gke.io/v1 kind: SecretForwarder metadata: name: SECRET_FORWARDER_NAME namespace: NAMESPACE_NAME spec: RemoteClusterTargetSecrets: name: TARGET_SECRET_NAME namespaces: - TARGET_NAMESPACE_NAME sourceSecret: name: SOURCE_SECRET_NAME namespace: SOURCE_NAMESPACE_NAME
다음 값을 바꿉니다.
SECRET_FORWARDER_NAME
: 원격 클러스터에 있는 SecretForwarder의 이름NAMESPACE_NAME
: 원격 클러스터에 있는 SecretForwarder의 네임스페이스TARGET_SECRET_NAME
: 원격 클러스터에 있는 새 보안 비밀의 이름TARGET_NAMESPACE_NAME
: 원격 클러스터에 있는 새 보안 비밀의 네임스페이스- CDI가 실행되는 클러스터 및 데이터 볼륨과 동일한 네임스페이스에 보안 비밀을 만듭니다. CDI는 GDC용 VM 런타임을 실행하는 클러스터에서 자동으로 사용 설정됩니다.
SOURCE_SECRET_NAME
: 전달할 소스 보안 비밀의 이름SOURCE_NAMESPACE_NAME
: 전달할 소스 보안 비밀의 네임스페이스
편집기에서
SecretForwarder
매니페스트를 저장하고 닫습니다.관리자 클러스터의
KUBECONFIG
와 함께kubectl
을 사용하여 관리자 클러스터에서SecretForwarder
매니페스트를 적용합니다.kubectl apply -f my-forwarded-secret.yaml
보안 비밀을 사용하여 이미지 가져오기
가상 디스크 및 VM을 만들 때 보안 비밀을 사용하여 Cloud Storage에서 이미지를 가져오려면 다음 단계를 완료합니다.
원하는 편집기에서 my-vm.yaml과 같이
VirtualMachineDisk
및VirtualMachine
을 정의하는 매니페스트를 만듭니다.nano my-vm.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: VM_NAME-boot-dv spec: size: 20Gi source: gcs: url: IMAGE_URL secretRef: SECRET_NAME --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv
다음 값을 바꿉니다.
VM_NAME
- VM의 이름IMAGE_URL
-gs://my-images-bucket/disk.qcow2
와 같이 디스크 이미지 Cloud Storage의 URLSECRET_NAME
- 보안 비밀의 이름
편집기에서 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM 및 디스크를 만듭니다.kubectl apply -f my-vm.yaml