Cloud Run for Anthos を設定する

このガイドでは、Google Kubernetes Engine(GKE)クラスタを設定し、Cloud Run for Anthos を有効にする方法について説明します。Google Cloud コンソールまたは Google Cloud CLI のいずれかを使用して、標準および限定公開の GKE クラスタで Cloud Run for Anthos を有効にできます。

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

始める前に

  1. Cloud Run for Anthos は Google Kubernetes Engine のアドオンです。無料トライアルは 2021 年 9 月 30 日まで利用できます
  2. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  3. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  4. Google Cloud プロジェクトで課金が有効になっていることを確認します

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

コマンドライン環境の設定

Cloud Run for Anthos の管理には Google Cloud コンソールまたは gcloud CLI のいずれかを使用できますが、gcloud CLI を必要とする一部のタスクもあります。

Cloud Run for Anthos の gcloud および kubectl コマンドライン ツールを設定するには:

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

  2. gcloud CLI のデフォルトのプロジェクト設定を、先ほど作成したプロジェクトか、使用する既存のプロジェクトに設定します。

    gcloud config set project PROJECT-ID

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

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

    gcloud config set compute/zone ZONE

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

  4. プロジェクトで次の API を有効にします。これは、クラスタの作成、コンテナの構築、Google Kubernetes Engine レジストリへのコンテナの公開に必要です。

    gcloud services enable container.googleapis.com containerregistry.googleapis.com cloudbuild.googleapis.com
  5. kubectl コマンドライン ツールをインストールします。

    gcloud components install kubectl
  6. インストール済みの gcloud CLI コンポーネントを更新します。

    gcloud components update

Cloud Run for Anthos の有効化

Cloud Run for Anthos は GKE クラスタ上で動作します。既存のクラスタで Cloud Run for Anthos を有効にすることも、Cloud Run for Anthos を有効にした新しいクラスタを作成することもできます。

Cloud Run for Anthos の設定方法を選択するには:

Cloud Run for Anthos は、限定公開 GKE クラスタで有効にすることもできます。限定公開 GKE クラスタの作成方法については、GKE ドキュメントの限定公開クラスタの作成をご覧ください。

Cloud Run for Anthos を有効にした新しい GKE クラスタの作成

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

Cloud Run for Anthos のテストには、これらのクラスタ構成が推奨されます。本番環境ワークロードでは、特定のニーズを満たすように GKE クラスタを構成する必要があります。さまざまな GKE クラスタとその構成オプションについては、GKE ドキュメントのクラスタのタイプをご覧ください。

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

  1. クラスタを作成します。

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

    クラスタの自動スケーリングはデフォルトでは有効になっていませんが、Cloud Run for Anthos はクラスタ内の使用可能な容量に基づいてインスタンス数を自動的に調整します。

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

既存のクラスタでの Cloud Run for Anthos の有効化

GKE クラスタには、次の最小構成が必要です。

gcloud CLI または Google Cloud コンソールを使用して、クラスタで Cloud Run for Anthos を有効にできます。

Console

既存のクラスタで Cloud Run for Anthos を有効にするには:

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. Cloud Run for Anthos を有効にするクラスタの名前をクリックします。

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

  4. [Cloud Run for Anthos を有効にする] をクリックします。

  5. [保存] をクリックします。更新が完了すると、クラスタで Cloud Run for Anthos がサポートされます。

コマンドライン

既存のクラスタで Cloud Run for Anthos を有効にするには:

  1. 次のコマンドを使用してクラスタを有効にします。

    gcloud container clusters update \
    CLUSTER_NAME \
    --update-addons=CloudRun=ENABLED,HttpLoadBalancing=ENABLED \
    --zone=ZONE

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

    • CLUSTER_NAME: クラスタの名前に置き換えます。
    • ZONE: クラスタのゾーンに置き換えます。例: us-central1-a
  2. 有効化が完了するまで待ちます。成功すると、コマンドラインで次のようなメッセージが返されます。

    Updating your-cluster-name...done.

gcloud CLI のデフォルトの設定の構成

クラスタを作成したら、Google Cloud CLI で使用するデフォルト値を設定できます。このコマンドラインを使用すると、クラスタ名やロケーションなどの設定したデフォルト値に関するプロンプトが表示されなくなります。

以下についてデフォルト設定を構成できます。

  • クラスタ名
  • クラスタのロケーション
  • 認証情報
  • 名前空間
  • プラットフォーム

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

  1. デフォルトのクラスタとクラスタのロケーションを設定し、次のコマンドを実行して認証情報を取得します。

    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. デフォルトでは、クラスタは default という名前の Namespace で作成されます。Namespace、および default 以外の Namespace を作成して使用する理由については、 Namespace をご覧ください。

    新しい Namespace を作成するには:

    kubectl create namespace NAMESPACE

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

  3. 前の手順で新しい名前空間を作成した場合は、Google Cloud CLI を呼び出すたびに使用されるデフォルトの名前空間として、その名前空間を設定できます。それ以外の場合は、default 名前空間が使用されます。新しい Namespace を設定するには、次のコマンドを実行します。

    gcloud config set run/namespace NAMESPACE

    NAMESPACE は、gcloud CLI ツールがデフォルトで使用する名前空間の名前に置き換えます。

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 サービスを管理してデプロイする必要があります。GKE マルチテナンシーの詳細については、クラスタ マルチテナンシーをご覧ください。

Cloud Run for Anthos にマルチテナンシーを構成する方法については、プロジェクト間マルチテナンシーをご覧ください。

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

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

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

始める前に

  • クラスタで admin 権限が必要です。
  • サポートされているのは、Google Cloud CLI バージョン 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 という Service を default Namespace の Cloud Run for Anthos にデプロイします。

    gcloud run deploy sample \
    --image gcr.io/knative-samples/simple-api \
    --namespace default
    
  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 にインストールされている Istio コンポーネントに加えて、Anthos Service MeshIstio on GKE アドオン、またはカスタム Istio インストールを Cloud Run for Anthos に接続する方法について説明します。

デフォルトの Cloud Run for Anthos のインストールに含まれる 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 インストールで設定されたクラスタ ローカル ドメイン istio-ingress.gke-system.svc.cluster.local を持ちます。

重要: Istio の AuthorizationPolicy を構成して使用する場合は、アクセス制御のためのパスタイプの照合に関する既知の脆弱性に対処する必要があります。脆弱性に対する保護の詳細については、セキュリティのベスト プラクティスをご覧ください。

追加の 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 を無効にする

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

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

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

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

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

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

次のステップ