このガイドでは、既存の 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.write
、https://www.googleapis.com/auth/monitoring.write
既存のクラスタで Cloud Run を有効にする
gcloud コマンドラインとコンソールのいずれかを使用して、Cloud Run をクラスタで有効にできます。
Console
既存のクラスタで Cloud Run を有効にするには、次の手順を行います。
Cloud Console で Google Kubernetes Engine ページに移動します。
Cloud Run を有効にするクラスタをクリックします。
[編集] をクリックします。
[Cloud Run for Anthos on Google Cloud を有効にする] を選択します。
[保存] をクリックします。更新が完了すると、クラスタは Cloud Run をサポートします。
コマンドライン
既存のクラスタで Cloud Run を有効にするには、次の手順を行います。
次のコマンドを使用してクラスタを有効にします。
gcloud container clusters update \ CLUSTER_NAME \ --update-addons=CloudRun=ENABLED,HttpLoadBalancing=ENABLED \ --zone=ZONE
次のように置き換えます。
- CLUSTER_NAME を、クラスタの名前で置き換えます。
- ZONE を、クラスタで使用しているゾーンに置き換えます(例:
us-central1-a
)。
有効化が完了するまで待ちます。成功すると、
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
を手動で指定する必要があります。
コントロール プレーンのクラスタ CIDR ブロックを表示し、値を
masterIpv4CidrBlock
フィールドに記録します。gcloud container clusters describe CLUSTER_NAME
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 )'
上記で記録した値を使用して、ファイアウォール ルールを追加します。
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 の設定をご覧ください。
内部ロードバランサを設定するには:
新しいクラスタを作成するか既存のクラスタを更新して、内部 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
変更が有効になるまで数分かかることがあります。
次のコマンドを実行して、GKE クラスタの更新を確認します。
kubectl -n gke-system get svc istio-ingress --watch
- アノテーション「cloud.google.com/load-balancer-type: Internal」を記録します。
- Ingress ロードバランサで
IP
の値を探して、プライベート IP アドレスに変更します。 IP
フィールドにプライベート IP アドレスが表示されたら、Ctrl+C
を押して更新を停止します。
変更後の内部接続を確認するには:
sample
というサービスを Cloud Run for Anthos on Google Cloud のdefault
名前空間にデプロイします。gcloud run deploy sample \ --image gcr.io/knative-samples/simple-api \ --namespace default \ --platform gke
Compute Engine 仮想マシン(VM)を、GKE クラスタと同じゾーンに作成します。
VM=cloudrun-gke-ilb-tutorial-vm gcloud compute instances create $VM
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)
IP アドレスを含むファイルを VM にコピーします。
gcloud compute scp external-ip.txt $VM:~
SSH を使用して VM に接続します。
gcloud compute ssh $VM
SSH セッション中に、サンプル サービスをテストします。
curl -s -w'\n' -H Host:sample.default.example.com $(cat external-ip.txt)
出力は次のとおりです。
OK
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 サービスを管理してデプロイするには、次の手順を行います。
デプロイするクラスタの Google Cloud プロジェクト ID に対する読み取りアクセス権があることを確認します。
ターゲット GKE クラスタの認証情報でローカルの
kubeconfig
ファイルを更新します。gcloud container clusters get-credentials NAME \ --region=REGION \ --project=PROJECT-ID
- REGION は、ターゲット クラスタの Compute Engine リージョンです。
- PROJECT-ID は、読み取りアクセスできるプロジェクトです。
詳細については、
gcloud container clusters get-credentials
コマンドのリファレンス ドキュメントをご覧ください。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 を無効にするには、次の手順を行います。
Cloud Console で Google Kubernetes Engine ページに移動します。
Cloud Run を無効にするクラスタをクリックします。
[Cloud Run for Anthos on Google Cloud を無効にする] を選択します。
(省略可能)Cloud Run がないクラスタで使用しないアドオンを無効にします。これには Istio が含まれる場合があります。
[保存] をクリックします。
コマンドライン
クラスタを削除するには:
次のコマンドを実行します。
gcloud container clusters update \ CLUSTER_NAME \ --update-addons=CloudRun=DISABLED \ --zone=ZONE
次のように置き換えます。
- CLUSTER_NAME を、クラスタの名前で置き換えます。
- ZONE を、クラスタで使用しているゾーンに置き換えます(例:
us-central1-a
)。
有効化が完了するまで待ちます。成功すると、
Updating your-cluster-name...done.
のようなメッセージが表示されます。