このドキュメントでは、GDC 上の VM ランタイムを使用して Cloud Storage にアクセスするための認証情報を作成して使用する方法について説明します。Cloud Storage プラグインを使用すると、Containerd 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 にサービス アカウントの認証情報を提供するには、次の 2 つの方法があります。
- クラスタ内のノードで Google のアプリケーションのデフォルト認証情報(ADC)を構成します。詳細については、オンプレミスまたは他のクラウド プロバイダの ADC を設定するをご覧ください。
- Cloud Storage にアクセスするサービス アカウントのキーを含む Secret を指定します。このドキュメントの残りの部分では、サービス アカウント キーと Secret を作成する方法について説明します。
Secret を作成する
データ ボリュームの Namespace で作成された Secret を使用して、サービス アカウント キーを Kubernetes に渡します。Secret の data セクションには、creds-gcp.json のエントリが含まれています。値は、サービス アカウント キーファイルの Base64 でエンコードされたデータです。CLI は、この Base64 エンコード データを作成します。YAML マニフェストを使用して Secret を作成する場合は、まずサービス アカウント キーファイルの内容の base64 ハッシュを作成します。
CLI
- kubectlを使用して Secret を作成します。- kubectl create secret generic SECRET_NAME \ --from-file=creds-gcp.json=SERVICE_ACCOUNT_KEY_PATH \ --namespace NAMESPACE_NAME- 次の値を置き換えます。 - SECRET_NAME: Secret の名前。
- SERVICE_ACCOUNT_KEY_PATH: サービス アカウント キー ファイルのパス。
- NAMESPACE_NAME: Secret の Namespace。- CDI が実行されるクラスタと、データ ボリュームと同じ Namespace に、Secret を作成します。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
 
 
マニフェスト
- 選択したエディタで、 - Secretマニフェスト(my-secret.yaml など)を作成します。- 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: Secret の名前。
- NAMESPACE_NAME: Secret の Namespace。- CDI が実行されるクラスタと、データ ボリュームと同じ Namespace に、Secret を作成します。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
 
 
- エディタで Secret マニフェストを保存して閉じます。 
- kubectlを使用して Secret マニフェストを適用します。- kubectl apply -f my-secret.yaml
既存の Secret を転送する
Secret を作成する代わりに、SecretForwarder を作成して、既存の Secret を転送して使用することもできます。SecretForwarder は、同じクラスタ内、または管理クラスタからユーザー クラスタへなど、クラスタ間での Secret の転送をサポートします。
ターゲットの Secret を使用して Cloud Storage にアクセスするには、ソースの Secret の data セクションに creds-gcp.json キーが必要です。
同じクラスタ
次の SecretForwarder マニフェストの例では、同じクラスタ内で Secret を転送しています。
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
この例では、次の操作を行います。
- defaultNamespace に- cdi-gcsという名前の- SecretForwarderを作成します。
- anthos-credsNamespace 内の- gke-connectという名前の Secret を、- defaultNamespace 内の- gcs-saという名前の新しい Secret に転送します。
- 同じクラスタに新しい Secret を作成します。
同じクラスタ内で Secret を転送するには、次の操作を行います。
- 任意のエディタで、 - SecretForwarderマニフェスト(my-forwarded-secret.yaml など)を作成します。- 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 の Namespace。
- TARGET_SECRET_NAME: 新しい Secret の名前。
- TARGET_NAMESPACE_NAME: 新しい Secret の Namespace。- CDI が実行されるクラスタと、データ ボリュームと同じ Namespace に、Secret を作成します。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
 
- SOURCE_SECRET_NAME: 転送するソース Secret の名前。
- SOURCE_NAMESPACE_NAME: 転送するソース Secret の Namespace。
 
- エディタで - SecretForwarderマニフェストを保存して閉じます。
- kubectlを使用して- SecretForwarderマニフェストを適用します。- kubectl apply -f my-forwarded-secret.yaml
クラスタ間
次の SecretForwarder マニフェストの例では、Secret をクラスタ間で転送します。
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-user1Namespace に- cdi-gcsという名前の- SecretForwarderを作成します。
- anthos-credsNamespace 内の- gke-connectという名前の Secret を、- defaultNamespace 内の- gcs-saという名前の新しい Secret に転送します。
- user1という名前のクラスタに新しい Secret を作成します。
同じクラスタ内で Secret を転送するには、次の操作を行います。
- 任意のエディタで、 - SecretForwarderマニフェスト(my-forwarded-secret.yaml など)を作成します。- 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 の Namespace。
- TARGET_SECRET_NAME: リモート クラスタ内の新しい Secret の名前。
- TARGET_NAMESPACE_NAME: リモート クラスタ内の新しい Secret の Namespace。- CDI が実行されるクラスタと、データ ボリュームと同じ Namespace に、Secret を作成します。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
 
- SOURCE_SECRET_NAME: 転送するソース Secret の名前。
- SOURCE_NAMESPACE_NAME: 転送するソース Secret の Namespace。
 
- エディタで - SecretForwarderマニフェストを保存して閉じます。
- 管理クラスタの - KUBECONFIGで- kubectlを使用して、管理クラスタで- SecretForwarderマニフェストを適用します。- kubectl apply -f my-forwarded-secret.yaml
Secret を使用してイメージをインポートする
仮想ディスクと VM を作成するときに Cloud Storage からイメージをインポートするには、Secret を使用して次の操作を行います。
- 選択したエディタで - VirtualMachineDiskと- VirtualMachineを定義するマニフェスト(my-vm.yaml, など)を作成します。- 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- ディスク イメージの Cloud Storage の URL(- gs://my-images-bucket/disk.qcow2など)。
- SECRET_NAME- Secret の名前。
 
- エディタでマニフェストを保存して閉じます。 
- kubectlを使用して VM とディスクを作成します。- kubectl apply -f my-vm.yaml