このチュートリアルでは、Google 提供のツール(asmcli
)を使用して、Anthos Service Mesh 1.23.3-asm.2 を新しい Google Kubernetes Engine(GKE)クラスタにインストールします。このチュートリアルでは、次のことについて説明します。
- Google Cloud プロジェクトを構成する。
- Anthos Service Mesh で必要な、最小限の vCPU を使用して GKE クラスタを作成する。
- クラスタ内コントロール プレーンを使用して、Anthos Service Mesh をインストールする
- サンプル アプリケーションをデプロイして、Google Cloud Console の Anthos Service Mesh ダッシュボードにテレメトリー データを表示できるようにする。
- サンプル アプリケーションを公開してアクセスする。
このクイックスタートでは、説明をわかりやすくするため、次の方法を選択しています。
- Anthos Service Mesh 認証局を有効にする(Mesh CA)
- Ingress ゲートウェイをデプロイしてアプリケーションを公開する
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このクイックスタートの終了後、クラスタを削除するとそれ以上の請求が発生しなくなります。詳細については、クリーンアップをご覧ください。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine API.
- プロジェクト ID をメモします。
Anthos Service Mesh には他の API も必要ですが、asmcli
により、API が自動的に有効になります。課金費用を抑えるため、asmcli
スクリプトは Anthos API を有効にしません。Anthos API が有効になっている場合、Cloud Console にはいくつかの違いがあります。詳細については、Anthos と Anthos Service Mesh の UI の違いをご覧ください。
必要なツールをインストールする
ツールは、Cloud Shell か、Linux を実行するローカルマシンで実行できます。Cloud Shell で必要なすべてのツールがプリインストールされます。macOS には bash の古いバージョンが付属しているため、サポートされませんので注意してください。
Cloud Shell
Cloud Shell は、Debian ベースの Linux オペレーティング システムを実行している g1-small Compute Engine 仮想マシン(VM)をプロビジョニングします。Cloud Shell を使用する利点は次のとおりです。
Cloud Shell には、
gcloud
、kubectl
、kpt
、必要な他のコマンドライン ツールが含まれています。Cloud Shell の $HOME ディレクトリには 5 GB の永続ストレージ スペースがあります。
テキスト エディタを選択できます。
コードエディタ。Cloud Shell ウィンドウの上部にある edit をクリックしてアクセスします。
Emacs、Vim、Nano。Cloud Shell のコマンドラインからアクセスします。
Cloud Shell を使用するには:
- Cloud Console に移動します。
- Cloud プロジェクトを選択します。
Cloud Console ウィンドウの上部にある [Cloud Shell をアクティブにする] ボタンをクリックします。
Cloud Console の一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。
ローカル Linux コンピュータ
次のツールがインストールされていることを確認してください。
- Google Cloud CLI
- 標準のコマンドライン ツール:
awk
、curl
、grep
、sed
、tr
- git
- kpt
- kubectl
- jq
Google Cloud CLI で認証します。
gcloud auth login --project PROJECT_ID
コンポーネントを更新します。
gcloud components update
kpt
から検出できるように、パスにgit
を設定します。
GKE クラスタを作成する
次のコマンドを実行して、Anthos Service Mesh に必要な vCPU の最小数を要件とするクラスタを作成します。コマンドのプレースホルダを次の情報に置き換えます。
- CLUSTER_NAME: クラスタの名前。名前には、小文字の英数字と
-
のみを使用できます。先頭には英字、末尾には英数字を使用し、40 文字以下にする必要があります。 - PROJECT_ID: クラスタが作成されるプロジェクト ID。
- CLUSTER_LOCATION: クラスタのゾーン(
us-central1-a
など)。
gcloud container clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION \ --machine-type=e2-standard-4 \ --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.goog
クラスタの作成には数分かかります。クラスタの作成中、
gcloud
コマンドから次の内容が出力されます。Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...working...
作成に成功すると、次のような出力が表示されます。
Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...done. Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME]. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/CLUSTER_LOCATION/CLUSTER_NAME?project=PROJECT_ID kubeconfig entry generated for CLUSTER_NAME. NAME: CLUSTER_NAME LOCATION: CLUSTER_LOCATION MASTER_VERSION: 1.20.10-gke.1600 MASTER_IP: 198.51.100.1 MACHINE_TYPE: e2-standard-4 NODE_VERSION: 1.20.10-gke.1600 NUM_NODES: 2 STATUS: RUNNING
- CLUSTER_NAME: クラスタの名前。名前には、小文字の英数字と
クラスタとのやり取りに必要な認証情報を取得します。
gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
予想される出力:
Fetching cluster endpoint and auth data. kubeconfig entry generated for CLUSTER_NAME.
kubectl
の現在のコンテキストをクラスタに設定します。kubectl config set-context CLUSTER_NAME
予想される出力:
Context "CLUSTER_NAME" created.
asmcli をダウンロードする
このセクションでは、asmcli
のダウンロード方法について説明します。
Anthos Service Mesh 1.23.3 をインストールするバージョンを現在の作業ディレクトリにダウンロードします。
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.23 > asmcli
予想される出力:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
スクリプトを実行可能にします。
chmod +x asmcli
Anthos Service Mesh をインストールする
Anthos Service Mesh は、次のオプションを指定して asmcli
ツールを実行し、前に作成したクラスタにインストールします。クラスタを作成してからこのページを閉じていない場合、プレースホルダには、gcloud container clusters create
コマンドに入力した値が設定されています。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca
--project_id
、--cluster_name
、--cluster_location
: クラスタが属するプロジェクト ID、クラスタ名、クラスタゾーンまたはリージョンを指定します。--fleet_id
: フリート ホスト プロジェクトのプロジェクト ID。このオプションを指定しない場合、asmcli
は、クラスタ登録時にクラスタが作成されたプロジェクトを使用します。--output_dir
: asmcli
が anthos-service-mesh
パッケージをダウンロードして、istioctl
、サンプル、マニフェストを含むインストール ファイルを抽出するディレクトリを指定する場合に指定します。それ以外の場合、asmcli
はファイルを tmp
ディレクトリにダウンロードします。相対パスまたはフルパスを指定できます。環境変数 $PWD
はここでは機能しません。--enable_all
: スクリプトが次の処理を行います。
- 必要な IAM 権限を付与する。
- 必要な Google API を有効にする。
- メッシュを識別するラベルをクラスタに設定する。
- クラスタを登録する(まだ登録されていない場合)。
asmcli
ツールが完了するまで、数分かかる場合があります。このツールは、進捗状況がわかるように情報メッセージを出力します。
インストール成功時に予想される出力:
asmcli: Successfully installed ASM.
Ingress ゲートウェイをデプロイする
Anthos Service Mesh では、サービス メッシュの一部としてゲートウェイをデプロイし、管理できます。ゲートウェイでは、メッシュのエッジで動作し、受信または送信 HTTP / TCP 接続を処理するロードバランサを記述します。ゲートウェイは、メッシュ内外に送信されるトラフィックをきめ細かく制御する Envoy プロキシです。
Ingress ゲートウェイの名前空間をまだ作成していない場合は作成します。ゲートウェイはユーザー ワークロードであり、コントロール プレーンの名前空間にデプロイすることはおすすめしません。
GATEWAY_NAMESPACE
は、名前空間の名前に置き換えます。kubectl create namespace GATEWAY_NAMESPACE
予想される出力:
namespace/GATEWAY_NAMESPACE created
ゲートウェイで自動挿入を有効にします。必要な手順は、ゲートウェイの名前空間でデフォルトのインジェクション ラベル(例:
istio-injection enabled
)とリビジョン ラベルのどちらを使用するかによって異なります。デフォルトのリビジョンタグとリビジョン ラベルは、サイドカー インジェクタ Webhook によって使用され、挿入されたプロキシを特定のコントロール プレーンのリビジョンに関連付けます。デフォルトのインジェクション ラベル
デフォルトのインジェクション ラベルを名前空間に適用します。
kubectl label namespace GATEWAY_NAMESPACE istio-injection=enabled istio.io/rev-
リビジョン ラベル
次のコマンドを使用して、
istiod
のリビジョン ラベルを探します。kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
このコマンドは、Anthos Service Mesh バージョンに対応するリビジョン ラベル(例:
asm-1233-2
)を出力します。リビジョン ラベルを名前空間に適用します。次のコマンドで、
REVISION
は前の手順でメモしたistiod
リビジョン ラベルの値です。kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev=REVISION --overwrite
予想される出力:
namespace/GATEWAY_NAMESPACE labeled
--output_dir
で指定したディレクトリに移動します。samples/gateways/istio-ingressgateway/
ディレクトリにある Ingress ゲートウェイ構成のサンプルをそのままデプロイするか、必要に応じて変更します。kubectl apply -n GATEWAY_NAMESPACE \ -f DIR_PATH/samples/gateways/istio-ingressgateway
予想される出力:
deployment.apps/istio-ingressgateway created poddisruptionbudget.policy/istio-ingressgateway created horizontalpodautoscaler.autoscaling/istio-ingressgateway created role.rbac.authorization.k8s.io/istio-ingressgateway created rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created service/istio-ingressgateway created serviceaccount/istio-ingressgateway created
ゲートウェイのベスト プラクティスの詳細を確認してください。
Online Boutique のサンプルをデプロイする
anthos-service-mesh-packages
リポジトリの Online Boutique サンプル アプリケーションは、microservices-demo
リポジトリの元のマニフェスト セットから変更されています。ベスト プラクティスに従い、各サービスは、一意のサービス アカウントを持つ個別の名前空間にデプロイします。
アプリケーションの名前空間を作成します。
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
予想される出力:
namespace/ad created namespace/cart created namespace/checkout created namespace/currency created namespace/email created namespace/frontend created namespace/loadgenerator created namespace/payment created namespace/product-catalog created namespace/recommendation created namespace/shipping created
自動サイドカー インジェクション(自動挿入)を有効にします。ここで使用されるリビジョン ラベルは、Ingress ゲートウェイ名前空間にアノテーションを付ける際に使用したものと同じです。アプリケーションの名前空間にリビジョン ラベルを適用します。次のコマンドで、REVISION は、Ingress ゲートウェイ名前空間にアノテーションを付ける際に使用した値です。
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns istio.io/rev=REVISION --overwrite done;
予想される出力:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
サンプル アプリケーションをクラスタにデプロイします。
サービス アカウントとデプロイを作成します。
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
予想される出力:
serviceaccount/ad created deployment.apps/adservice created serviceaccount/cart created deployment.apps/cartservice created serviceaccount/checkout created deployment.apps/checkoutservice created serviceaccount/currency created deployment.apps/currencyservice created serviceaccount/email created deployment.apps/emailservice created serviceaccount/frontend created deployment.apps/frontend created serviceaccount/loadgenerator created deployment.apps/loadgenerator created serviceaccount/payment created deployment.apps/paymentservice created serviceaccount/product-catalog created deployment.apps/productcatalogservice created serviceaccount/recommendation created deployment.apps/recommendationservice created serviceaccount/shipping created deployment.apps/shippingservice created
サービスを作成します。
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/services
予想される出力:
service/adservice created service/cartservice created service/checkoutservice created service/currencyservice created service/emailservice created service/frontend created service/frontend-external created service/paymentservice created service/productcatalogservice created service/recommendationservice created service/shippingservice created
サービス エントリを作成します。
kubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
予想される出力:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
アプリケーションの公開とアクセス
アプリケーションを公開するには、いくつかの方法があります。このガイドでは、上記でデプロイした Ingress ゲートウェイを使用します。Online Boutique アプリケーションを公開するその他の方法については、Online Boutique サンプル アプリケーションのデプロイガイドのアプリケーションの公開とアクセスのセクションをご覧ください。
フロントエンド サービス用の
Gateway
とVirtualService
をデプロイしますkubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/frontend-gateway.yaml
予想される出力:
gateway.networking.istio.io/frontend-gateway created virtualservice.networking.istio.io/frontend-ingress created
Ingress ゲートウェイの外部 IP アドレスを取得します。プレースホルダは、次の情報に置き換えます。
- GATEWAY_SERVICE_NAME: Ingress ゲートウェイ サービスの名前。変更せずにサンプル ゲートウェイをデプロイした場合は、
istio-ingressgateway
になります。 - GATEWAY_NAMESPACE: Ingress ゲートウェイをデプロイした名前空間。
kubectl get service GATEWAY_SERVICE_NAME \ -n GATEWAY_NAMESPACE
出力は次のようになります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
この例では、Ingress ゲートウェイの IP アドレスは
35.239.7.64
です。- GATEWAY_SERVICE_NAME: Ingress ゲートウェイ サービスの名前。変更せずにサンプル ゲートウェイをデプロイした場合は、
ブラウザでアプリケーションに移動して、インストールを確認します。
http://EXTERNAL_IP/
サービス メッシュ ダッシュボードを表示する
サイドカー プロキシが挿入されたクラスタにワークロードをデプロイすると、Cloud Console の Anthos Service Mesh ページで、Anthos Service Mesh が提供するすべてのオブザーバビリティ機能を確認できます。ワークロードをデプロイした後、Cloud Console にテレメトリー データが表示されるまでに 1~2 分ほどかかることがあります。
Cloud Console での Anthos サービス メッシュへのアクセスは、Identity and Access Management(IAM)によって制御されます。Anthos Service Mesh ページにアクセスするには、プロジェクト オーナーがユーザーに対して、プロジェクト編集者または閲覧者のロール、または、より限定的なロール(Cloud Console での Anthos Service Mesh へのアクセスの制御を参照)を付与する必要があります。
Google Cloud Console で、[Anthos Service Mesh] に移動します。
メニューバーのプルダウン リストから Cloud プロジェクトを選択します。
複数のサービス メッシュがある場合は、[サービス メッシュ] プルダウン リストからメッシュを選択します。
詳細については、Cloud Console での Anthos Service Mesh の確認をご覧ください。
クリーンアップ
クリーンアップの前に、相互 TLS の詳細を確認される場合は、Anthos Service Mesh の例: mTLS をご覧ください。
クラスタを維持して Online Boutique のサンプルを削除するには:
アプリケーションの名前空間を削除します。
kubectl delete -f DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
予想される出力:
namespace "ad" deleted namespace "cart" deleted namespace "checkout" deleted namespace "currency" deleted namespace "email" deleted namespace "frontend" deleted namespace "loadgenerator" deleted namespace "payment" deleted namespace "product-catalog" deleted namespace "recommendation" deleted namespace "shipping" deleted
サービス エントリを削除します。
kubectl delete -f DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
予想される出力:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
追加料金の発生を回避するには、クラスタを削除します。
次のコマンドを実行します。
gcloud container clusters delete CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
[Do you want to continue (Y/n)?] というプロンプトが表示されたら「y」と入力します。
数分後、次の出力が表示されます。
Deleting cluster CLUSTER_NAME...done. Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
次のステップ
以下の詳細を確認する
- クラスタ要件
asmcli
ツールのオプションとフラグ- Service のデプロイ
- このチュートリアルで使用した
gcloud
コマンド