Cloud Run for Anthos on Google Cloud の設定

このガイドでは、Cloud Run for Anthos on Google Cloud を有効にして、新しい Google Kubernetes Engine クラスタを設定する方法について説明します。Cloud Console または gcloud コマンドラインのいずれかを使用できるため、両方の手順を説明します。既存のクラスタで Cloud Run を有効にする場合は、既存のクラスタで Cloud Run for Anthos on Google Cloud を有効にするをご覧ください。

Cloud Run for Anthos on Google Cloud を有効にすると、IstioKnative Serving がクラスタにインストールされ、ステートレス ワークロードが接続および管理されます。詳細については、Cloud Run for Anthos on Google Cloud のアーキテクチャの概要をご覧ください。

要件

  1. Anthos のサブスクリプションが必要です。無料トライアルは、2021 年 3 月 31 日まで利用できます。料金については、こちらをご覧ください。
  2. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  3. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  4. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

gcloud を設定する

Cloud Console または gcloud コマンドラインのどちらでも Cloud Run for Anthos on Google Cloud を使用できますが、タスクによっては gcloud コマンドラインを使用する必要があります。

Cloud Run for Anthos on Google Cloud の gcloud コマンドラインを設定するには:

  1. Cloud SDK をインストールして初期化します

  2. gcloud のデフォルトのプロジェクト設定を、先ほど作成したものに設定する必要があります。

    gcloud config set project PROJECT-ID

    PROJECT-ID は、作成したプロジェクトのプロジェクト ID に置き換えます。

  3. 新しいクラスタの zone に必要なゾーンを設定します。GKE がサポートされていれば、どのゾーンでも使用できます。次に例を示します。

    gcloud config set compute/zone ZONE

    ZONE は、実際のゾーンに置き換えます。

  4. プロジェクトで次の API を有効にします。これは、クラスタの作成や、コンテナのビルドと Google Container レジストリへのパブリッシュで必要になります。

    gcloud services enable container.googleapis.com containerregistry.googleapis.com cloudbuild.googleapis.com
  5. インストールされている gcloud コンポーネントを更新します。

    gcloud components update
  6. kubectl コマンドライン ツールをインストールします。

    gcloud components install kubectl

クラスタを作成して Cloud Run を有効にする

以下の手順では、次の構成でクラスタを作成します。

  • Cloud Run for Anthos on Google Cloud が有効になりました。
  • Kubernetes バージョンについては、使用可能な GKE バージョンをご覧ください。
  • 2 vCPU のノード

これらは新しいクラスタの推奨設定です。

クラスタは、gcloud コマンドラインまたはコンソールで作成できます。該当するタブをクリックして、必要な手順を確認してください。

Console

クラスタを作成して Cloud Run for Anthos on Google Cloud 用に有効にするには:

  1. Cloud Console で Google Kubernetes Engine ページに移動します。

    Google Kubernetes Engine に移動

  2. [クラスタを作成] をクリックして、[Kubernetes クラスタの作成] ページを開きます。

  3. [クラスタの基本] セクションで、次の操作を行います。

    • クラスタの名前を [名前] に入力します。
    • ロケーション タイプとして [ゾーン] または [リージョン] を選択します。いずれかが Cloud Run for Anthos on Google Cloud で使用できます。ゾーンクラスタは低コストですが、コントロール プレーン(マスター)のアップグレード中にダウンタイムが発生します。
    • 前のステップの選択に応じて、クラスタのゾーンまたはリージョンを選択します。近くのゾーンまたはリージョンを選択します(例: us-central1-a)。
    • プルダウン リストから、コントロール プレーン クラスタ バージョンとしていずれかの使用可能なバージョンを選択します。
  4. [Features] セクションで、[Cloud Run for Anthos を有効にする] のチェックボックスを選択します。

  5. [作成] をクリックして、この構成でクラスタを作成し、プロビジョニングします。プロセスが完了するまでに少し時間がかかることがあります。

コマンドライン

Cloud Run for Anthos on Google Cloud を有効にする新しいクラスタを作成するには:

  1. 新しいクラスタの作成

    gcloud container clusters create CLUSTER-NAME \
    --zone=ZONE \
    --addons=HttpLoadBalancing,CloudRun \
    --machine-type=n1-standard-2 \
    --num-nodes=3 \
    --cluster-version=GKE-VERSION \
    --enable-stackdriver-kubernetes

    これらの手順では、クラスタの自動スケーリングを有効にしてクラスタのサイズを変更することはできません。Cloud Run for Anthos on Google Cloud はクラスタ内のインスタンスを自動的にスケーリングします。

  2. クラスタの作成が完了するまで待機します。

Cloud Run が有効化された限定公開クラスタを作成する

デフォルトでは、上記で作成したクラスタは Pod からパブリック ネットワークへのアクセスを構成できます。Pod、ノード、ワークロードをパブリック ネットワークに接続しないようにする Cloud Run 対応の限定公開クラスタを作成する場合は、次の手順をご覧ください。それ以外の場合は、次のセクションに進みます。

外部クライアントは、まだ限定公開クラスタの外部ロードバランサの IP アドレスを呼び出すことができます。公開されないクラスタを作成するには、非公開の内部ネットワークの設定をご覧ください。

  1. 4 基以上の vCPU を持つ限定公開クラスタを作成します。

    限定公開クラスタを作成する

  2. 以下のバージョンの GKE クラスタで Cloud Run for Anthos を使用している場合は、以降の手順をスキップできます。
    • 1.16.8-gke.7+
    • 1.15.11-gke.9+
    限定公開 GKE クラスタでサービスを Cloud Run for Anthos にデプロイするには、コントロールプレーン(マスター)サーバーからノードへの TCP 接続をポート 8443 で許可し、プロジェクトのファイアウォール ルールを編集して、許可する TCP 接続のリストにポート 8443 を手動で指定する必要があります。
    1. コントロール プレーンのクラスタ CIDR ブロックを表示し、値を masterIpv4CidrBlock フィールドに記録します。

      gcloud container clusters describe CLUSTER_NAME
    2. TARGET_TAGS フィールドの値を表示し記録します。

      gcloud compute firewall-rules list \
                --filter 'name~^gke-CLUSTER_NAME' \
                 --format 'table(
                         name,
                         network,
                         direction,
                         sourceRanges.list():label=SRC_RANGES,
                         allowed[].map().firewall_rule().list():label=ALLOW,
                         targetTags.list():label=TARGET_TAGS
                 )'
    3. 上記で記録した値を使用して、ファイアウォール ルールを追加します。

      gcloud compute firewall-rules create FIREWALL_RULE_NAME \
           --action ALLOW \
           --direction INGRESS \
           --source-ranges masterIpv4CidrBlock \
           --rules tcp:8443 \
           --target-tags TARGET_TAGS

      詳細については、ファイアウォール ルールの作成をご覧ください。

クラスタとプラットフォーム用の gcloud を構成する

クラスタの作成後に、次を行います。

  • デフォルト プラットフォームを gke に設定します。
  • 必要に応じて、クラスタ名とクラスタのロケーションのデフォルトを設定し、コマンドラインの使用時にプロンプトを表示しないようにします。
  • gcloud コマンドラインがクラスタにアクセスできるように、認証情報を取得します。

デフォルトを設定するには:

  1. デフォルトのプラットフォームを gke に設定し、デフォルトのクラスタとクラスタのロケーションを設定して、次のように認証情報を取得します。

    gcloud config set run/platform gke
    gcloud config set run/cluster CLUSTER
    gcloud config set run/cluster_location ZONE
    gcloud container clusters get-credentials CLUSTER

    次のように置き換えます。

    • CLUSTER は、クラスタの名前に置き換えます。
    • ZONE は、クラスタの場所に置き換えます。
  2. Kubernetes クラスタには default という Namespace が用意されています。Namespace の詳細と、default 以外の Namespace を作成して使用する理由については、Kubernetes ドキュメントの Namespace を参照してください。新しい Namespace を作成するには:

    kubectl create namespace NAMESPACE

    NAMESPACE は、作成する Namespace に置き換えます。

  3. 前のステップで新しい Namespace を作成し、default Namespace の代わりに使用する場合は、gcloud コマンドラインの呼び出し時に、デフォルトで使用する新しい Namespace に設定します。

    gcloud config set run/namespace NAMESPACE

Workload Identity を持つクラスタで指標を有効にする

Workload Identity を有効にすると、Cloud Run for Anthos はリビジョン リクエスト数やリクエストのレイテンシなどの特定の指標を Google Cloud のオペレーション スイートに報告しませんが、CPU とメモリなどの指標の報告は継続します。

すべての指標を有効にするには、Cloud Monitoring に指標を書き込むための権限を手動で設定する必要があります。そのためには、お使いの Cloud Run for Anthos サービスに関連付けられた Google サービス アカウント(GSA)にモニタリング指標の書き込みの役割を付与します。

サービスの GSA にモニタリング指標書き込みのロールの権限を付与します。

gcloud projects add-iam-policy-binding PROJECT_ID 
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
--role=roles/monitoring.metricWriter

以下のように置き換えます。

  • PROJECT_ID は、KSA をホストするクラスタ プロジェクトのプロジェクト ID に置き換えます。
  • GSA_PROJECT は、クラスタ内に存在しない GSA のプロジェクト ID に置き換えます。組織内のどの GSA も使用できます。

詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

GKE クラスタ内から、Compute API、Storage API、Database API、Machine Learning API などの Google Cloud APIs が提供するサービスを設定する方法については、Workload Identity の使用をご覧ください。

マルチテナント設定での開発

マルチテナントのユースケースでは、現在のプロジェクトの外部にある Google Kubernetes Engine クラスタへの Cloud Run for Anthos サービスを管理してデプロイする必要があります。このセクションでは、マルチテナント クラスタ設定で Cloud Run for Anthos on Google Cloud サービスを開発する方法について説明します。

現在のプロジェクト外の Google Kubernetes Engine クラスタへの Cloud Run for Anthos サービスを管理してデプロイするには、次の手順を行います。

  1. デプロイするクラスタの Google Cloud プロジェクト ID に対する読み取りアクセス権があることを確認します。

  2. ターゲット GKE クラスタの認証情報でローカルの kubeconfig ファイルを更新します。

    gcloud container clusters get-credentials NAME \
    --region=REGION \
    --project=PROJECT-ID
    • REGION は、ターゲット クラスタの Compute Engine リージョンです。
    • PROJECT-ID は、読み取りアクセスできるプロジェクトです。

    詳細については、gcloud container clusters get-credentials コマンドのリファレンス ドキュメントをご覧ください。

  3. gcloud コマンドラインを使用して、デフォルトのプラットフォームを kubernetes に設定した GKE クラスタと通信します。

    gcloud config set run/platform kubernetes
    

これで kubeconfig ファイルで指定されたターゲット GKE クラスタでコマンドを実行できるようになりました。

たとえば、次のコマンドは、認証情報が kubeconfig ファイルに保存されている GKE クラスタへ指定されたコンテナ イメージを使用して、Cloud Run for Anthos サービスをデプロイします。

gcloud run deploy SERVICE-NAME --image IMAGE-NAME

プライベートな内部ネットワークの設定

内部ネットワークでのサービスのデプロイは、社内用アプリをスタッフに提供する企業や、Cloud Run for Anthos on Google Cloud クラスタの外部で実行されるクライアントが使用するサービスにおいて便利です。この構成により、ネットワーク内の他のリソースが、一般からはアクセスできない非公開の内部 IP アドレス(RFC 1918)を使用するサービスと通信できるようになります。

内部ネットワークを作成するには、公開の外部ネットワーク ロードバランサではなく、内部 TCP/UDP 負荷分散を使用するように Istio の Ingress ゲートウェイを構成します。そうすると、Cloud Run for Anthos on Google Cloud サービスを VPC ネットワーク内の内部 IP アドレスにデプロイできます。

始める前に

  • クラスタで admin 権限が必要です。
  • Cloud SDK バージョン 310.0 以降のみサポートされています。詳細については、gcloud の設定をご覧ください。

内部ロードバランサを設定するには、次のようにします。

  1. 新しいクラスタを作成するか既存のクラスタを更新して、内部 TCP/UDP 負荷分散を使用するように Istio Ingress ゲートウェイを更新します。

    • 内部ロードバランサで新しいクラスタを作成する。

      gcloud container clusters create CLUSTER_NAME \
      --addons=HttpLoadBalancing,CloudRun \
      --machine-type=n1-standard-2  \
      --num-nodes=3  \
      --enable-stackdriver-kubernetes \
      --cloud-run-config=load-balancer-type=INTERNAL
    • 内部ロードバランサを使用するように既存のクラスタを更新します。

      gcloud container clusters update CLUSTER_NAME
      --update-addons=CloudRun=ENABLED \
      --cloud-run-config=load-balancer-type=INTERNAL

    変更が有効になるまで数分かかることがあります。

  2. 次のコマンドを実行して、GKE クラスタの更新を確認します。

    kubectl -n gke-system get svc istio-ingress --watch
    
    1. アノテーション「cloud.google.com/load-balancer-type: Internal」を記録します。
    2. Ingress ロードバランサで IP の値を探して、プライベート IP アドレスに変更します。
    3. IP フィールドにプライベート IP アドレスが表示されたら、Ctrl+C を押して更新を停止します。

変更後の内部接続を確認するには:

  1. sample というサービスを Cloud Run for Anthos on Google Cloud の default 名前空間にデプロイします。

    gcloud run deploy sample \
    --image gcr.io/knative-samples/simple-api \
    --namespace default \
    --platform gke
    
  2. Compute Engine 仮想マシン(VM)を、GKE クラスタと同じゾーンに作成します。

    VM=cloudrun-gke-ilb-tutorial-vm
    
    gcloud compute instances create $VM
    
  3. Istio Ingress ゲートウェイのプライベート IP アドレスを EXTERNAL_IP 環境変数と external-ip.txt ファイルに保存します。

    export EXTERNAL_IP=$(kubectl -n gke-system get svc istio-ingress \
        -o jsonpath='{.status.loadBalancer.ingress[0].ip}' | tee external-ip.txt)
    
  4. IP アドレスを含むファイルを VM にコピーします。

    gcloud compute scp external-ip.txt $VM:~
    
  5. SSH を使用して VM に接続します。

    gcloud compute ssh $VM
    
  6. SSH セッション中に、サンプル サービスをテストします。

    curl -s -w'\n' -H Host:sample.default.example.com $(cat external-ip.txt)
    

    出力は次のとおりです。

    OK
    
  7. SSH セッションを終了します。

    exit
    

個別の Istio インストールを使用する

次の手順では、すでにデフォルトで Cloud Run for Anthos on Google Cloud にインストールされている Istio コンポーネントに加えて、Anthos Service MeshIstio on GKE アドオン、または Istio カスタム インストールを Cloud Run for Anthos に接続する方法について説明します。

デフォルトの Cloud Run for Anthos on Google Cloud インストールに含まれる Istio コンポーネントは、現在、自動サイドカー インジェクションをサポートしていません。ただし、Istio インストールを追加すると、デプロイされたサービスの Namespace で Istio サイドカー インジェクションを有効にできます。

Istio を追加でインストールするには、Istio Ingress Gateway の名前が、istio-system Namespace で istio-ingressgateway であることを確認する必要があります。Cloud Run for Anthos は、次の場所にインストールされた Istio Ingress Gateway からの外部トラフィックをサポートし、処理できます。

  • istio-system Namespace。追加の Istio インストールを使用するときにデフォルトで設定されたクラスタ ローカル ドメイン istio-ingressgateway.istio-system.svc.cluster.local を持ちます。
  • gke-system Namespace。デフォルトの Cloud Run for Anthos on Google Cloud インストールで設定されたクラスタ ローカル ドメイン istio-ingress.gke-system.svc.cluster.local を持ちます。

追加の Istio Ingress Gateway Cloud Run for Anthos の使用を確認するには:

  1. config-istio ConfigMap を開きます。

    kubectl get configmap config-istio --namespace knative-serving -oyaml
    
  2. 追加の Istio Ingress Gateway の名前が istio-ingressgateway で、istio-system Namespace にあることを確認します。

HTTPS とカスタム ドメインを有効にする

クラスタに適用する HTTPS とカスタム ドメインを使用する場合は、HTTPS と自動 TLS 証明書の有効化カスタム ドメインのマッピングをご覧ください。

Cloud Run for Anthos on Google Cloud を無効にする

クラスタで Cloud Run for Anthos on Google Cloud を無効にするには:

  1. Cloud Console で Google Kubernetes Engine ページに移動します。

    Google Kubernetes Engine に移動

  2. Cloud Run for Anthos on Google Cloud を無効にするクラスタをクリックします。

  3. [編集] をクリックします。

  4. [Cloud Run for Anthos] プルダウンから [無効] を選択します。

  5. [保存] をクリックします。

次のステップ