이 문서에서는 Google Distributed Cloud용 VM 런타임을 사용하여 사용자 인증 정보를 만들고 사용하여 Cloud Storage에 액세스하는 방법을 설명합니다. Cloud Storage 플러그인을 사용하면 Containerized Data Importer(CDI)를 사용하여 Cloud Storage 버킷에서 VM 이미지를 가져올 수 있습니다. 그런 후 Cloud Storage의 이미지에서 가상 디스크를 만들고 클러스터에서 실행되는 VM에 이를 연결할 수 있습니다. CDI는 Google Distributed Cloud용 VM 런타임을 실행하는 클러스터에서 자동으로 사용 설정됩니다.
시작하기 전에
이 문서를 완료하려면 다음 리소스에 대해 액세스 권한이 필요합니다.
- 베어메탈용 GKE 버전 1.12.0(
anthosBareMetalVersion: 1.12.0
) 이상 클러스터에 대한 액세스 권한. 워크로드 실행이 가능한 모든 클러스터 유형을 사용할 수 있습니다. 필요한 경우 Compute Engine에서 베어메탈용 GKE를 사용하거나 클러스터 만들기 개요를 참조하세요. - 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는 Google Distributed Cloud용 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는 Google Distributed Cloud용 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는 Google Distributed Cloud용 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는 Google Distributed Cloud용 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의 URL입니다.SECRET_NAME
- 보안 비밀의 이름입니다.
편집기에서 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM 및 디스크를 만듭니다.kubectl apply -f my-vm.yaml