このチュートリアルでは、Istio マルチクラスタ サービス メッシュを使用して、複数の Kubernetes クラスタにアプリケーションをデプロイする方法について説明します。Istio マルチクラスタ サービス メッシュを使用すると、複数の Kubernetes クラスタ上で実行されているサービス間で安全に通信を行うことができます。Kubernetes クラスタはさまざまな場所で実行されています。Google Cloud で実行される Google Kubernetes Engine(GKE)クラスタや、オンプレミスのデータセンターで実行される Kubernetes クラスタなど、異なるクラウド プラットフォームで実行されている場合もあります。
このチュートリアルでは、複数のネットワークにまたがる複数の GKE クラスタにサービス メッシュを作成する方法を説明します。このチュートリアルでは、Deployment、Service、Ingress など、Kubernetes の基本的な知識が必要になります。Istio の基礎知識は必要ありませんが、あったほうが内容を理解しやすくなります。
Istio は、Kubernetes クラスタで実行される Service の検出、動的ルーティング、安全な接続を行うためのオープンソースのサービス メッシュです。Istio は、メッシュ内でルーティング、ロード バランシング、スロットリング、テレメトリ、サーキット ブレーク、認証、サービス呼び出しの認可を行うためのポリシーベースのフレームワークを提供します。これにより、アプリケーションのコードをほとんど変更せずに、これらの機能を実現できます。Istio を Kubernetes クラスタにインストールすると、Istio は Kubernetes の Service レジストリを使用して、複数の GKE クラスタで実行される相互接続サービス(またはマイクロサービス)を自動的に検出し、サービス メッシュを作成します。Istio では、各 Pod で実行される Envoy サイドカー プロキシを使用して、Pod 間のトラフィックのルーティングとセキュリティを管理し、クラスタ内で実行されるすべてのマイクロサービスとワークロードのオブザーバビリティを提供します。
1 つの Kubernetes クラスタで実行されるマイクロサービスで、他の Kubernetes クラスタで実行されるマイクロサービスとの通信が必要になる場合があります。たとえば、複数のマイクロサービスがリージョンを超えて通信を行う場合もあれば、環境やマイクロサービスのオーナーが独自の Kubernetes クラスタを維持する場合もあります。Istio を使用すると、1 つの Kubernetes クラスタを超えるサービス メッシュを作成し、リモート クラスタで実行されているマイクロサービスや、Kubernetes の外部にある VM で実行されている外部マイクロサービスを管理することが可能になります。
Istio は、マルチクラスタ環境に 2 つの主な構成を提供します。
- プライマリ リモート コントロール プレーンを使用したマルチクラスタ サービス メッシュ
- マルチプライマリ コントロール プレーンを使用したマルチクラスタ サービス メッシュ
マルチプライマリ コントロール プレーン構成では、各クラスタに独自の Istio コントロール プレーンがインストールされ、各コントロール プレーンが独自のローカル サービス メッシュを管理します。Istio ゲートウェイ、共通のルート認証局(CA)、複数の GKE クラスタでの自動サービス ディスカバリを使用して、各クラスタのマイクロサービスを含む単一の論理サービス メッシュを構成します。これにより、すべてのクラスタが独自のマルチクラスタ サービス メッシュを管理し、クラスタのすべての受信アクセスが Istio East-West ゲートウェイを経由するようになります。Istio East-West ゲートウェイがすべてのクラスタから到達可能である限り、このアプローチに特別なネットワーク要件はありません。
このチュートリアルでは、マルチプライマリ コントロール プレーン アーキテクチャを使用して Istio を 2 つの GKE クラスタにデプロイします。このチュートリアルでは、2 つの GKE クラスタに分割された Online Boutique というデモ マイクロサービス アプリを使用します。マイクロサービスの言語については、README ページをご覧ください。
Cloud プロジェクト内に次のアーキテクチャを構築します。
このアーキテクチャでは、1 つの Istio East-West ゲートウェイを使用する 2 つの別々のネットワーク(または VPC)に、1 つの west
クラスタと 1 つの central
クラスタが存在します。クラスタは、ローカル(同じクラスタ)とローカル以外(他のクラスタ)のマイクロサービスと通信を行います。
目標
- リージョンと VPC が異なる 2 つの GKE クラスタ(
west
とcentral
)を作成します。 - マルチプライマリ モードで両方の GKE クラスタに Istio をインストールします。
- Online Boutique アプリを両方のクラスタに分割してインストールします。
- 両方のクラスタでサービス メッシュを検査します。
費用
このドキュメントでは、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 GKE and Cloud Source Repositories APIs.
-
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 GKE and Cloud Source Repositories APIs.
環境設定
このチュートリアルで使用するターミナル コマンドはすべて Cloud Shell から実行します。
Google Cloud Console で Cloud Shell を開きます。
このチュートリアルで必要なファイルをダウンロードするには、次の GitHub リポジトリのクローンを作成します。
cd $HOME git clone https://github.com/GoogleCloudPlatform/istio-multicluster-gke.git
リポジトリ フォルダを
$WORKDIR
フォルダに設定します。このチュートリアルに関連するすべての作業は、このフォルダから行います。cd $HOME/istio-multicluster-gke WORKDIR=$(pwd)
このフォルダは、チュートリアルの最後で削除できます。
kubectx
/kubens
をインストールします。git clone https://github.com/ahmetb/kubectx $WORKDIR/kubectx export PATH=$PATH:$WORKDIR/kubectx
コンテキストや名前空間を切り替えることで、複数の Kubernetes クラスタを簡単に操作できます。
VPC と GKE クラスタを作成する
このセクションでは、2 つの VPC を作成し、それぞれの VPC に GKE クラスタを 1 つずつ作成します。複数のネットワーク上の Istio マルチプライマリ実装に追加のネットワーク要件が不要であることを示すためには、2 つの異なる VPC が必要です。他のクラスタとの Service 間トラフィックは、インターネットを介して安全に送信されます。公共のインターネットでクラスタ間のトラフィックを転送する場合、次のような利点があります。
- クラスタ間で重複する IP アドレスを使用できます。Node、Pod、Service の IP アドレスがクラスタ間で重複していても問題ありません。
- クラスタ間の追加接続は必要ありません。クラスタ ネットワーク間のピアリング、相互接続、VPN は不要です。
- 複数の環境にクラスタを配置できます。たとえば、クラスタを Google Cloud とオンプレミスのデータセンターに配置できます。この状況では、オペレーターがネットワークまたは IP アドレスを制御できない場合でも、Kubernetes クラスタで実行されるマイクロサービスに安全に接続する必要があります。
クラスタ間でも相互 TLS(mTLS)接続を使用すると、別のクラスタと Service 間通信を安全に行うことができます。Citadel から発行された有効な証明書を検証することで、これらの接続に対する中間者攻撃を回避できます。
プライベート IP アドレスを使用して、クラスタ間の通信を行うことができます。ただし、この方法ではネットワーキングの設計をさらに検討する必要があります。たとえば、マルチクラスタ メッシュに参加するすべてのクラスタ間で重複しない IP アドレスを割り当てる必要があります。また、すべての Pod がプライベートな(RFC 1918)アドレス空間で通信を行えるようにする必要があります。つまり、Google Cloud のグローバル VPC に適切なファイアウォール ルールを設定する必要があります。Google Cloud 以外のネットワークに接続する場合には、相互接続または VPN 内に適切なファイアウォール ルールが必要です。このチュートリアルでは、公共のインターネットを介してサービス間で安全に通信を行うアーキテクチャの構成方法について説明します。この構成のほうが、より柔軟にネットワークを構築できます。
Cloud Shell で、次のように VPC を作成します。
gcloud compute networks create vpc-west --subnet-mode=auto gcloud compute networks create vpc-central --subnet-mode=auto
KUBECONFIG
変数を設定し、このチュートリアルに新しいkubeconfig
ファイルを使用します。export KUBECONFIG=${WORKDIR}/istio-kubeconfig
2 つの GKE クラスタを作成します。1 つは、
west
という名前でvpc-west
ネットワークのus-west2-a
ゾーンに作成します。もう 1 つはcentral
という名前で、vpc-central
ネットワークのus-central1-a
ゾーンに作成します。gcloud container clusters create west --zone us-west2-a \ --machine-type "e2-standard-2" --disk-size "100" \ --scopes "https://www.googleapis.com/auth/compute",\ "https://www.googleapis.com/auth/devstorage.read_only",\ "https://www.googleapis.com/auth/logging.write",\ "https://www.googleapis.com/auth/monitoring",\ "https://www.googleapis.com/auth/servicecontrol",\ "https://www.googleapis.com/auth/service.management.readonly",\ "https://www.googleapis.com/auth/trace.append" \ --num-nodes "4" --network "vpc-west" --async gcloud container clusters create central --zone us-central1-a \ --machine-type "e2-standard-2" --disk-size "100" \ --scopes "https://www.googleapis.com/auth/compute",\ "https://www.googleapis.com/auth/devstorage.read_only",\ "https://www.googleapis.com/auth/logging.write",\ "https://www.googleapis.com/auth/monitoring",\ "https://www.googleapis.com/auth/servicecontrol",\ "https://www.googleapis.com/auth/service.management.readonly",\ "https://www.googleapis.com/auth/trace.append" \ --num-nodes "4" --network "vpc-central"
両方のクラスタが作成されるまで数分かかります。各クラスタのステータスが
RUNNING
になっていることを確認します。gcloud container clusters list
出力は次のようになります。
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS central us-central1-a 1.17.14-gke.1600 104.197.127.140 e2-standard-2 1.17.14-gke.1600 4 RUNNING west us-west2-a 1.17.14-gke.1600 34.94.217.4 e2-standard-2 1.17.14-gke.1600 4 RUNNING
両方のクラスタに接続して、
kubeconfig
ファイルにエントリを生成します。export PROJECT_ID=$(gcloud info --format='value(config.project)') gcloud container clusters get-credentials west --zone us-west2-a --project ${PROJECT_ID} gcloud container clusters get-credentials central --zone us-central1-a --project ${PROJECT_ID}
kubeconfig
ファイルを作成して、クラスタごとにユーザーとコンテキストを作成し、クラスタに対する認証を作成します。kubeconfig
ファイルを作成した後、クラスタ間でコンテキストをすばやく切り替えることができます。便宜上、
kubectx
を使用してコンテキスト名を変更します。kubectx west=gke_${PROJECT_ID}_us-west2-a_west kubectx central=gke_${PROJECT_ID}_us-central1-a_central
両方のクラスタに対する
cluster-admin
ロールを自分自身(自社の Google ユーザー)に付与します。kubectl create clusterrolebinding user-admin-binding \ --clusterrole=cluster-admin --user=$(gcloud config get-value account) \ --context west kubectl create clusterrolebinding user-admin-binding \ --clusterrole=cluster-admin --user=$(gcloud config get-value account) \ --context central
このロールを使用すると、クラスタで管理タスクを実行できます。
両方のクラスタで証明書を構成する
Istio では、Citadel が Istio の認証局(CA)として、サービス メッシュ内のすべての Envoy プロキシ(Workload Sidecar プロキシ、East-West および Egress ゲートウェイ プロキシ)に証明書を配布します。デフォルトでは、Citadel は自己署名のルート証明書と鍵を生成し、この証明書と鍵でワークロードの証明書に署名します。Citadel では、オペレーターが指定した証明書と鍵を使用してワークロードの証明書に署名することもできます。このチュートリアルでは、west
クラスタと central
クラスタで別々のサービス メッシュを維持し、それぞれの Citadel サービスでワークロードの署名を行います。
クラスタのマイクロサービス間で信頼関係を確立するには、両方の Citadel 署名(CA)証明書が共通のルート認証局(ルート CA)によって署名されている必要があります。Citadel 署名証明書とルート CA 間にあるすべての中間 CA の信頼チェーンを検証するため、ワークロードには証明書チェーン ファイルも必要です。この構成は、Kubernetes クラスタで Secret を使用して行います。これらの証明書ファイルについては、このチュートリアルの中で説明します。本番環境では、PKI システムまたはセキュリティ チームが生成した証明書を使用できます(たとえば、独自の CA として機能している場合)。作成された Secret には次の特長があります。この Secret は Citadel によって使用されます。
- Secret の名前は
cacert
です。 - Secret は 4 つの証明書ファイルから作成されます(このチュートリアルでは Istio コードから提供される証明書を使用します)。証明書の名前は次のとおりです。
root-cert.pem
にはルート CA が含まれています。このファイルは、west
とcentral
クラスタの両方の Citadel サービスで使用されます。どちらの Citadel 証明書も、このルート CA によって署名されています。ca-cert.pem
とca-key.pem
は、Citadel サービスの署名(CA)証明書と秘密鍵です。どちらの Citadel 証明書もルート CA(root-cert.pem
)によって署名されている必要があります。ca-cert.pem
は、各クラスタのワークロードの署名に使用されます。cert-chain.pem
は、ワークロード証明書とルート CA 間の信頼チェーンです。この例では、cert-chain.pem
にはca-cert.pem
証明書のみが含まれています。したがって、これらのファイルは同一です。このファイルにより、複数のクラスタで実行されているマイクロサービス間の信頼関係が確立されます。
Citadel をデフォルトでインストールした場合、コマンドに使用される事前定義の Secret とファイル名に基づいて証明書と鍵の場所を構成するようにコマンドライン オプションが設定されます。つまり、Secret の名前は cacert
、ルート証明書のファイル名は root-cert.pem
、Citadel キーは ca-key.pem
になります。
Cloud Shell で、Istio をダウンロードします。
cd ${WORKDIR} export ISTIO_VERSION=1.9.0 curl -L https://istio.io/downloadIstio | ISTIO_VERSION=${ISTIO_VERSION} TARGET_ARCH=x86_64 sh - cd istio-${ISTIO_VERSION} export PATH=$PWD/bin:$PATH
Cloud Shell で、適切な証明書ファイルを使用して Secret を作成します。
for cluster in $(kubectx) do kubectl --context $cluster create namespace istio-system kubectl --context $cluster create secret generic cacerts -n istio-system \ --from-file=${WORKDIR}/istio-${ISTIO_VERSION}/samples/certs/ca-cert.pem \ --from-file=${WORKDIR}/istio-${ISTIO_VERSION}/samples/certs/ca-key.pem \ --from-file=${WORKDIR}/istio-${ISTIO_VERSION}/samples/certs/root-cert.pem \ --from-file=${WORKDIR}/istio-${ISTIO_VERSION}/samples/certs/cert-chain.pem; done
Istio のインストール
このセクションでは、west
クラスタと central
クラスタに Istio をインストールします。
Cloud Shell で、
west
クラスタのデフォルト ネットワークを設定します。kubectl --context=west label namespace istio-system topology.istio.io/network=network1
専用の East-West ゲートウェイを使用して、
west
クラスタの Istio 構成を作成します。cd ${WORKDIR} cat <<EOF > istio-west.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: values: global: meshID: mesh1 multiCluster: clusterName: west network: network1 components: ingressGateways: - name: istio-eastwestgateway label: istio: eastwestgateway app: istio-eastwestgateway topology.istio.io/network: network1 enabled: true k8s: env: # sni-dnat adds the clusters required for AUTO_PASSTHROUGH mode - name: ISTIO_META_ROUTER_MODE value: "sni-dnat" # traffic through this gateway should be routed inside the network - name: ISTIO_META_REQUESTED_NETWORK_VIEW value: network1 service: ports: - name: status-port port: 15021 targetPort: 15021 - name: tls port: 15443 targetPort: 15443 - name: tls-istiod port: 15012 targetPort: 15012 - name: tls-webhook port: 15017 targetPort: 15017 EOF
west
クラスタに構成を適用します。istioctl install --context=west -f istio-west.yaml
y
を押して続行します。istio-system
Namespace 内の Deployment を検査します。kubectl --context=west -n istio-system get deployments
出力は次のようになります。
NAME READY UP-TO-DATE AVAILABLE AGE istio-eastwestgateway 1/1 1 1 2m11s istio-ingressgateway 1/1 1 1 8m43s istiod 1/1 1 1 8m56s
East-West ゲートウェイに外部 IP アドレスが割り振られるまで待ちます。
kubectl --context=west get svc istio-eastwestgateway -n istio-system
出力は次のようになります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-eastwestgateway LoadBalancer 10.3.241.43 34.94.214.249 15021:30369/TCP,15443:30988/TCP,15012:31358/TCP,15017:32625/TCP 3m42s
クラスタは別々のネットワーク上にあるため、すべてのサービス(*.local)を両方のクラスタの east-west ゲートウェイ上で公開する必要があります。East-West ゲートウェイはインターネットで公開されているため、その背後にあるサービスには、信頼できる mTLS 証明書とワークロード ID を持つサービスのみがアクセスできます。これらは、同じネットワーク上にあるように見えます。
kubectl --context=west apply -n istio-system -f \ ${WORKDIR}/istio-${ISTIO_VERSION}/samples/multicluster/expose-services.yaml
central
クラスタにデフォルト ネットワークを設定します。kubectl --context=central label namespace istio-system topology.istio.io/network=network2
専用の East-West ゲートウェイを使用して、
central
クラスタの Istio 構成を作成します。cd ${WORKDIR} cat <<EOF > istio-central.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: values: global: meshID: mesh1 multiCluster: clusterName: central network: network2 components: ingressGateways: - name: istio-eastwestgateway label: istio: eastwestgateway app: istio-eastwestgateway topology.istio.io/network: network2 enabled: true k8s: env: # sni-dnat adds the clusters required for AUTO_PASSTHROUGH mode - name: ISTIO_META_ROUTER_MODE value: "sni-dnat" # traffic through this gateway should be routed inside the network - name: ISTIO_META_REQUESTED_NETWORK_VIEW value: network2 service: ports: - name: status-port port: 15021 targetPort: 15021 - name: tls port: 15443 targetPort: 15443 - name: tls-istiod port: 15012 targetPort: 15012 - name: tls-webhook port: 15017 targetPort: 15017 EOF
central
クラスタに構成を適用します。istioctl install --context=central -f istio-central.yaml
y
を押して続行します。istio-system
Namespace 内の Deployment を検査します。kubectl --context=central -n istio-system get deployments
出力は次のようになります。
NAME READY UP-TO-DATE AVAILABLE AGE istio-eastwestgateway 1/1 1 1 2m11s istio-ingressgateway 1/1 1 1 8m43s istiod 1/1 1 1 8m56s
East-West ゲートウェイに外部 IP アドレスが割り振られるまで待ちます。
kubectl --context=central get svc istio-eastwestgateway -n istio-system
出力は次のようになります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-eastwestgateway LoadBalancer 10.3.250.201 35.232.125.62 15021:30810/TCP,15443:31125/TCP,15012:30519/TCP,15017:30743/TCP 37s
中央のクラスタの East-West ゲートウェイにすべてのサービス(*.local)を公開します。
kubectl --context=central apply -n istio-system -f \ ${WORKDIR}/istio-${ISTIO_VERSION}/samples/multicluster/expose-services.yaml
エンドポイント検出の有効化
central
クラスタの API サーバーへのアクセスを提供するリモート シークレットをwest
クラスタにインストールします。istioctl x create-remote-secret \ --context=central \ --name=central | \ kubectl apply -f - --context=west
west
クラスタの API サーバーへのアクセスを提供するリモート シークレットをcentral
クラスタにインストールします。istioctl x create-remote-secret \ --context=west \ --name=west | \ kubectl apply -f - --context=central
Online Boutique アプリのデプロイ
このセクションでは、Online Boutique アプリを両方のクラスタにインストールします。Online Boutique は、さまざまなプログラミング言語で記述された 10 個のマイクロサービスで構成されています。次に示すアーキテクチャのように、これらのマイクロサービスを central
と west
に分割します。
両方のクラスタで Online Boutique アプリの Namespace を作成します。
kubectl --context central create namespace online-boutique kubectl --context west create namespace online-boutique
Istio サイドカー プロキシの挿入を自動的に行うため、Namespace にラベルを付けます。
kubectl --context central label namespace online-boutique istio-injection=enabled kubectl --context west label namespace online-boutique istio-injection=enabled
west
クラスタとcentral
クラスタに Online Boutique アプリをデプロイします。kubectl --context central -n online-boutique apply -f $WORKDIR/istio-multi-primary/central kubectl --context west -n online-boutique apply -f $WORKDIR/istio-multi-primary/west
Online Boutique アプリですべての Deployment が起動して稼働するまでに数分かかります。
両方のクラスタですべての Deployment が使用可能になるまで待ちます。
# In central cluster kubectl --context=central -n online-boutique wait --for=condition=available deployment emailservice --timeout=5m kubectl --context=central -n online-boutique wait --for=condition=available deployment checkoutservice --timeout=5m kubectl --context=central -n online-boutique wait --for=condition=available deployment shippingservice --timeout=5m kubectl --context=central -n online-boutique wait --for=condition=available deployment paymentservice --timeout=5m kubectl --context=central -n online-boutique wait --for=condition=available deployment adservice --timeout=5m kubectl --context=central -n online-boutique wait --for=condition=available deployment currencyservice --timeout=5m # In west cluster kubectl --context=west -n online-boutique wait --for=condition=available deployment frontend --timeout=5m kubectl --context=west -n online-boutique wait --for=condition=available deployment recommendationservice --timeout=5m kubectl --context=west -n online-boutique wait --for=condition=available deployment productcatalogservice --timeout=5m kubectl --context=west -n online-boutique wait --for=condition=available deployment cartservice --timeout=5m kubectl --context=west -n online-boutique wait --for=condition=available deployment redis-cart --timeout=5m kubectl --context=west -n online-boutique wait --for=condition=available deployment loadgenerator --timeout=5m
すべての Deployment の出力は次のようになります。
deployment.apps/frontend condition met
Online Boutique アプリへのアクセス
Online Boutique には、いずれかのクラスタからの istio-ingressgatway
パブリック IP アドレスからアクセスできます。
両方のクラスタから
istio-ingressgateway
サービスのパブリック IP アドレスを取得します。kubectl --context west get -n istio-system service istio-ingressgateway -o json | jq -r '.status.loadBalancer.ingress[0].ip' kubectl --context central get -n istio-system service istio-ingressgateway -o json | jq -r '.status.loadBalancer.ingress[0].ip'
出力に外部 IP アドレスが含まれます。
いずれかのクラスタから Istio Ingress ゲートウェイ IP アドレスをコピーして、ウェブブラウザのタブに貼り付け、ページを更新します。Online Boutique のホームページが表示されます。
ここでは、アプリの操作、商品の検索、注文と会計などを行うことができます。
Online Boutique には必要な機能がすべて揃っています。このアプリは 2 つの環境の 2 つの Kubernetes クラスタで実行されています。
サービス メッシュのモニタリング
Kiali を使用して、サービス メッシュをモニタリングして可視化できます。Kiali は、Istio の一部としてインストールされるサービス メッシュのオブザーバビリティ ツールです。
Prometheus と Kiali を
west
クラスタにデプロイします。kubectl --context west apply -f https://raw.githubusercontent.com/istio/istio/release-${ISTIO_VERSION:0:3}/samples/addons/prometheus.yaml kubectl --context west apply -f https://raw.githubusercontent.com/istio/istio/release-${ISTIO_VERSION:0:3}/samples/addons/kiali.yaml
Kiali のインストールがエラーで失敗した場合は、同じコマンドをもう一度実行してください。このエラーはタイミングの問題で、コマンドの再実行で解決する場合があります。
Prometheus Pod と Kiali Pod が実行されていることを確認します。
kubectl --context west get pods -n istio-system
出力は次のようになります。
kiali-6d5c4bbb64-wpsqx 1/1 Running 0 72s prometheus-6d87d85c88-h2cwl 2/2 Running 0 92s
Cloud Shell で、
west
クラスタに Kiali を公開します。kubectl --context west port-forward svc/kiali 8080:20001 -n istio-system >> /dev/null &
west
クラスタで Kiali ウェブ インターフェースを開きます。Cloud Shell で、[ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。左側のメニューから [グラフ] を選択します。
[名前空間を選択してください] プルダウン リストから online-boutique を選択します。
[グラフ] メニューから [Service graph] を選択します。
必要に応じて、[表示] メニューから [Traffic Animation] を選択して、
loadgenerator
がアプリに生成するトラフィックを確認します。
これで、複数のクラスタにまたがるアプリケーションが正常にインストールされました。マイクロサービスは、mTLS とともに Istio East-West ゲートウェイを使用して、クラスタ間で安全に通信を行います。各クラスタで独自の Istio コントロール プレーンを維持し、管理しているため、単一障害点が回避されます。
クリーンアップ
チュートリアルが終了したら、Google Cloud で作成したリソースをクリーンアップして今後料金が発生しないようにします。以降のセクションでは、このようなリソースを削除する方法を説明します。
プロジェクトの削除
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
kubeconfig のリセット
kubeconfig
ファイルをリセットします。unset KUBECONFIG rm istio-kubeconfig
次のステップ
- Google Cloud での Istio について詳しく学習する。
- サービス メッシュの時代: ハイブリッド クラウドの将来における Istio の役割で、サービス メッシュとハイブリッド クラウドの役割について学習する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center を確認します。