インストールの検証
このガイドに従って、マルチクラスタ Istio インストールが正しく動作していることを確認します。
続行する前に、準備 の手順を完了し、マルチクラスタインストールガイドのいずれかを選択して実行してください。
このガイドでは、HelloWorld アプリケーションのV1をcluster1に、V2をcluster2にデプロイします。リクエストを受け取ると、HelloWorldはバージョンをレスポンスに含めます。
また、両方のクラスタにcurlコンテナをデプロイします。これらのPodを、HelloWorldサービスへのリクエストの送信元として使用し、メッシュ内トラフィックをシミュレートします。最後に、トラフィックを生成した後、どのクラスタがリクエストを受け取ったかを観察します。
HelloWorldサービスのデプロイ
HelloWorldサービスをどのクラスタからでも呼び出せるようにするには、各クラスタでDNSルックアップが成功する必要があります(詳細については、デプロイメントモデルを参照)。これは、メッシュ内の各クラスタにHelloWorldサービスをデプロイすることで対応します。
まず、各クラスタでsample名前空間を作成します。
$ kubectl create --context="${CTX_CLUSTER1}" namespace sample
$ kubectl create --context="${CTX_CLUSTER2}" namespace sample
sample名前空間で自動サイドカーインジェクションを有効にします。
$ kubectl label --context="${CTX_CLUSTER1}" namespace sample \
istio-injection=enabled
$ kubectl label --context="${CTX_CLUSTER2}" namespace sample \
istio-injection=enabled
両方のクラスタでHelloWorldサービスを作成します。
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
HelloWorld V1のデプロイ
cluster1にhelloworld-v1アプリケーションをデプロイします。
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v1 -n sample
helloworld-v1 Podの状態を確認します。
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v1-86f77cd7bd-cpxhv 2/2 Running 0 40s
helloworld-v1の状態がRunningになるまで待ちます。
HelloWorld V2のデプロイ
cluster2にhelloworld-v2アプリケーションをデプロイします。
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v2 -n sample
helloworld-v2 Podの状態を確認します。
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v2-758dd55874-6x4t8 2/2 Running 0 40s
helloworld-v2の状態がRunningになるまで待ちます。
curlのデプロイ
両方のクラスタにcurlアプリケーションをデプロイします。
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/curl/curl.yaml@ -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/curl/curl.yaml@ -n sample
cluster1上のcurl Podの状態を確認します。
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-n6bzf 2/2 Running 0 5s
curl Podの状態がRunningになるまで待ちます。
cluster2上のcurl Podの状態を確認します。
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-dzl9j 2/2 Running 0 5s
curl Podの状態がRunningになるまで待ちます。
クラスタ間トラフィックの検証
クラスタ間のロードバランシングが期待通りに動作することを確認するために、curl Podを使用してHelloWorldサービスを複数回呼び出します。ロードバランシングが正しく機能していることを確認するには、デプロイメント内のすべてのクラスタからHelloWorldサービスを呼び出してください。
cluster1上のcurl PodからHelloWorldサービスに1つのリクエストを送信します。
$ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
このリクエストを数回繰り返し、HelloWorldのバージョンがv1とv2の間で切り替わることを確認します。
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
今度は、cluster2上のcurl Podからこのプロセスを繰り返します。
$ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
このリクエストを数回繰り返し、HelloWorldのバージョンがv1とv2の間で切り替わることを確認します。
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
おめでとうございます!複数のクラスタにIstioを正常にインストールして検証しました!
次のステップ
マルチクラスタメッシュ全体のトラフィックを制御する方法については、ローカルロードバランシングタスクを参照してください。