このドキュメントでは、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)を構成します。詳細については、サービス アカウントとして認証するをご覧ください。
- 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
この例では、次の操作を行います。
default
Namespace にcdi-gcs
という名前のSecretForwarder
を作成します。anthos-creds
Namespace 内のgke-connect
という名前の Secret を、default
Namespace 内の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-user1
Namespace にcdi-gcs
という名前のSecretForwarder
を作成します。anthos-creds
Namespace 内のgke-connect
という名前の Secret を、default
Namespace 内の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