このドキュメントでは、Anthos VM Runtime を使用して Cloud Storage にアクセスするための認証情報を作成し、使用する方法について説明します。Cloud Storage プラグインを使用すると、Containerized Data Importer(CDI)を使用して Cloud Storage バケットから VM イメージをインポートできます。その後、Cloud Storage のこれらのイメージから仮想ディスクを作成し、クラスタ内で実行される VM にアタッチできます。CDI は、Anthos VM ランタイムを実行するクラスタでは自動的に有効になります。
準備
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- Anthos clusters on bare metal バージョン 1.12.0(
anthosBareMetalVersion: 1.12.0
)以降のクラスタへのアクセス権。ワークロードを実行可能な、どのクラスタタイプでも使用できます。必要に応じて、Compute Engine の Anthos clusters on 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 は、Anthos 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 は、Anthos 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 は、Anthos 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 は、Anthos VM ランタイムを実行するクラスタでは自動的に有効になります。
SOURCE_SECRET_NAME
: 転送するソース Secret の名前。SOURCE_NAMESPACE_NAME
: 転送するソース Secret の名前空間。
SecretForwarder
マニフェストをエディタに保存して閉じます。管理クラスタの
KUBECONFIG
でkubectl
を使用して、管理クラスタのSecretForwarder
マニフェストを適用します。kubectl apply -f my-forwarded-secret.yaml
Secret を使用してイメージをインポートする
仮想ディスクと VM を作成するときに、Secret を使用して Cloud Storage からイメージをインポートするには、次の手順を行います。
選択したエディタで
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