Cloud Run を既存の GKE クラスタで有効にする

このガイドでは、既存の GKE クラスタで Cloud Run を有効にする方法について説明します。

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

前提条件

このページでは、環境を設定済みで、次の最小構成のクラスタがあることを前提としています。

  • 2 vCPU のノード
  • スコープ: https://www.googleapis.com/auth/logging.writehttps://www.googleapis.com/auth/monitoring.write

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

gcloud コマンドラインとコンソールのいずれかを使用して、Cloud Run をクラスタで有効にできます。

Console

既存のクラスタで Cloud Run を有効にするには、次の手順を行います。

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

    Google Kubernetes Engine に移動

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

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

  4. [Cloud Run for Anthos on Google Cloud を有効にする] を選択します。

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

コマンドライン

既存のクラスタで Cloud Run を有効にするには、次の手順を行います。

  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. のようなメッセージが表示されます。

限定公開クラスタでデプロイを有効にする

以下のバージョンの GKE クラスタで Cloud Run for Anthos を使用している場合は、以降の手順をスキップできます。

  • 1.16.8-gke.7+
  • 1.15.11-gke.9+

限定公開 GKE クラスタで Cloud Run for Anthos にサービスをデプロイするには、コントロール プレーン(マスター)サーバーからポート 8443 上のノードへの TCP 接続を許可し、プロジェクトのファイアウォール ルールを編集して、許可する 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

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

限定公開内部ネットワークでデプロイを有効にする

内部ネットワークでのサービスのデプロイは、社内用アプリをスタッフに提供する企業や、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
    

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 も使用できます。

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

自動の Istio サイドカー インジェクションを有効にする

デプロイされたサービスの名前空間で自動の Istio サイドカー インジェクションを有効にするには、別の Istio インストールを使用する必要があります。

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

マルチテナントのユースケースでは、現在のプロジェクトの外部にある 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 を無効にする

クラスタの Cloud Run は、コンソールまたはコマンドラインを使用していつでも無効にできます。

Console

クラスタの Cloud Run を無効にするには、次の手順を行います。

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

    Google Kubernetes Engine に移動

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

  3. [Cloud Run for Anthos on Google Cloud を無効にする] を選択します。

  4. (省略可能)Cloud Run がないクラスタで使用しないアドオンを無効にします。これには Istio が含まれる場合があります。

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

コマンドライン

クラスタを削除するには:

  1. 次のコマンドを実行します。

    gcloud container clusters update \
    CLUSTER_NAME \
    --update-addons=CloudRun=DISABLED \
    --zone=ZONE

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

    • CLUSTER_NAME を、クラスタの名前で置き換えます。
    • ZONE を、クラスタで使用しているゾーンに置き換えます(例: us-central1-a)。
  2. 有効化が完了するまで待ちます。成功すると、Updating your-cluster-name...done. のようなメッセージが表示されます。