Knative serving のインストールおよび構成方法について説明します。
始める前に
GKE クラスタに Knative serving がインストールされている必要があります。GKE クラスタの前提条件と Knative serving のインストール方法の詳細については、インストール ガイドをご覧ください。
Workload Identity Federation for GKE による認証の設定
GKE 用 Workload Identity 連携を使用して、Knative serving サービスを Google Cloud APIs とサービスに対して認証できます。サービスをクラスタにデプロイする前に、Workload Identity Federation for GKE を設定する必要があります。それ以外の場合は、Workload Identity Federation for GKE を有効にする前にクラスタに存在する各サービスを移行する必要があります。GKE 用 Workload Identity 連携の使用の詳細
GKE 用 Workload Identity 連携での指標の有効化
Google Cloud Observability へのリクエスト数やリクエストのレイテンシなどの指標を有効にするには、Cloud Monitoring の書き込み権限を手動で設定する必要があります。詳細については、Workload Identity Federation for GKE での指標の有効化をご覧ください。
HTTPS とカスタム ドメインの構成
HTTPS を有効にしてカスタム ドメインを設定するには、以下のページをご覧ください。
Cloud Service Mesh を設定する
Knative serving 用の Cloud Service Mesh オプションを構成するには、プライベートな内部ネットワークの設定方法などの、クラスタ内コントロール プレーンのオプションをご覧ください。
プライベートな内部ネットワークの設定
内部ネットワークでのサービスのデプロイは、社内用アプリをスタッフに提供する企業や、Knative serving クラスタの外部で実行されるクライアントが使用するサービスにおいて便利です。この構成により、ネットワーク内の他のリソースが、一般からはアクセスできない非公開の内部 IP アドレス(RFC 1918)を使用するサービスと通信できるようになります。
内部ネットワークを作成するには、公開の外部ネットワーク ロードバランサではなく、内部 TCP / UDP ロード バランシングを使用するように Cloud Service Mesh を構成します。これにより、VPC ネットワークの内部 IP アドレスに Knative serving サービスをデプロイできます。
始める前に
- クラスタで
admin
権限が必要です。 - カスタム ドメインを構成した場合、現在、Knative serving でのマネージド TLS は内部ロードバランサでサポートされていないため、マネージド TLS 機能を無効にする必要があります。
- サポートされているのは、Google Cloud CLI バージョン 310.0 以降のみです。コマンドライン ツールの設定の詳細については、以下をご覧ください。
内部ロードバランサをセットアップするには:
Cloud Service Mesh の内部ロードバランサ機能を有効にします。
内部ロードバランサは、Cloud Service Mesh をインストールする際に構成するか、既存のインストールを更新することで構成できるオプション機能です。
クラスタ内コントロール プレーンでオプション機能を有効にするの手順に沿って、
--option internal-load-balancer
スクリプト オプションが含まれていることを確認してください。--option internal-load-balancer
オプションを指定すると、スクリプトによって GitHub から内部ロードバランサの有効化カスタム リソースが自動的に取得されます。カスタム リソースを変更する必要がある場合は、代わりに--custom_overlay
オプションの使用手順に沿って操作してください。次のコマンドを実行して、GKE クラスタの更新を確認します。
kubectl -n INGRESS_NAMESPACE get svc istio-ingressgateway --watch
INGRESS_NAMESPACE は、Cloud Service Mesh Ingress サービスの名前空間に置き換えます。Cloud Service Mesh をデフォルトの構成を使用してインストールした場合は、
istio-system
を指定します。- アノテーション
cloud.google.com/load-balancer-type: Internal
を確認します。 - Ingress ロードバランサで
IP
の値を探して、プライベート IP アドレスに変更します。 IP
フィールドにプライベート IP アドレスが表示されたら、Ctrl+C
を押して更新を停止します。
- アノテーション
Google Cloud の限定公開クラスタの場合は、ポートを開く必要があります。詳細については、Cloud Service Mesh ドキュメントの限定公開クラスタでポートを開くをご覧ください。
変更後の内部接続を確認するには:
sample
というサービスをdefault
Namespace の Knative serving にデプロイします。gcloud run deploy sample \ --image gcr.io/knative-samples/helloworld \ --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 INGRESS_NAMESPACE get svc istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}' | tee external-ip.txt)
INGRESS_NAMESPACE は、Cloud Service Mesh Ingress サービスの名前空間に置き換えます。Cloud Service Mesh をデフォルトの構成を使用してインストールした場合は、
istio-system
を指定します。IP アドレスを含むファイルを VM にコピーします。
gcloud compute scp external-ip.txt $VM:~
SSH を使用して VM に接続します。
gcloud compute ssh $VM
SSH セッション中に、サンプル サービスをテストします。
curl -s -w'\n' -H Host:sample.default.nip.io $(cat external-ip.txt)
出力は次のとおりです。
Hello World!
SSH セッションを終了します。
exit
マルチテナント環境の設定
マルチテナントのユースケースでは、現在のプロジェクトの外部にある Google Kubernetes Engine クラスタへの Namespace サービスを管理してデプロイする必要があります。GKE マルチテナンシーの詳細については、クラスタ マルチテナンシーをご覧ください。
Knative serving 用にマルチテナンシーを構成する方法については、プロジェクト間マルチテナンシーをご覧ください。