このドキュメントでは、GDC 上の VM ランタイムを使用して Cloud Storage にアクセスするための認証情報を作成して使用する方法について説明します。Cloud Storage プラグインを使用すると、Containerd Data Importer(CDI)を使用して Cloud Storage バケットから VM イメージをインポートできます。その後、Cloud Storage にあるこれらのイメージから仮想ディスクを作成し、クラスタ内で実行される VM にアタッチできます。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
準備
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- GKE on Bare Metal バージョン 1.12.0(
anthosBareMetalVersion: 1.12.0
)以降のクラスタへのアクセス権。ワークロードを実行可能な、どのクラスタタイプでも使用できます。必要に応じて、Compute Engine の GDCV for Bare Metal を試すか、クラスタ作成の概要をご覧ください。 - Cloud Storage へのアクセスに使用するサービス アカウントとサービス アカウント キー。必要に応じて、Cloud Storage バケットにアクセスできるサービス アカウントを構成します。
クルデンシャルの概要
Cloud Storage にアクセスするには、ストレージ バケットに認証情報を提供するサービス アカウントを使用します。ストレージ バケットに正常にアクセスするには、サービス アカウンにさまざまな権限が必要です。
- 公開ストレージ バケット: 自己識別にはサービス アカウントを使用しますが、特定の権限は必要ありません。
- プライベート ストレージ バケット: ストレージ アカウントには、ストレージ バケットに対する閲覧者または管理者の権限が必要です。
CDI にサービス アカウントの認証情報を提供するには、次の 2 つの方法があります。
- クラスタ内のノードで Google のアプリケーションのデフォルト認証情報(ADC)を構成します。詳細については、サービス アカウントとして認証するをご覧ください。
- Cloud Storage にアクセスするサービス アカウントのキーを含む Secret を指定します。このドキュメントの残りの部分では、サービス アカウント キーと Secret を作成する方法について説明します。
シークレットを作成
データ ボリュームの名前空間で作成された 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 の名前空間。- CDI が実行されるクラスタと、データ ボリュームと同じ名前空間に、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 の名前空間。- CDI が実行されるクラスタと、データ ボリュームと同じ名前空間に、Secret を作成します。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
Secret マニフェストをエディタに保存して閉じます。
kubectl
を使用して Secret マニフェストを適用します。kubectl apply -f my-secret.yaml
既存の Secret を転送する
Secret を作成する代わりに、既存の Secret を転送して使用するために SecretForwarder
を作成できます。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
名前空間にcdi-gcs
という名前のSecretForwarder
を作成します。anthos-creds
名前空間内のgke-connect
という名前の Secret を、default
名前空間内の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 の名前空間。TARGET_SECRET_NAME
: 新しい Secret の名前。TARGET_NAMESPACE_NAME
: 新しい Secret の名前空間。- CDI が実行されるクラスタと、データ ボリュームと同じ名前空間に、Secret を作成します。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
SOURCE_SECRET_NAME
: 転送するソース Secret の名前。SOURCE_NAMESPACE_NAME
: 転送するソース Secret の名前空間。
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
名前空間にcdi-gcs
という名前のSecretForwarder
を作成します。anthos-creds
名前空間内のgke-connect
という名前の Secret を、default
名前空間内の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 の名前空間。TARGET_SECRET_NAME
: リモート クラスタ内の新しい Secret の名前。TARGET_NAMESPACE_NAME
: リモート クラスタ内の新しい Secret の名前空間。- CDI が実行されるクラスタと、データ ボリュームと同じ名前空間に、Secret を作成します。CDI は、GDC 上の VM ランタイムを実行するクラスタでは自動的に有効になります。
SOURCE_SECRET_NAME
: 転送するソース Secret の名前。SOURCE_NAMESPACE_NAME
: 転送するソース Secret の名前空間。
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