インストールの検証
このガイドに従って、マルチクラスタ 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を正常にインストールして検証しました!
次のステップ
マルチクラスタメッシュ全体のトラフィックを制御する方法については、ローカルロードバランシングタスクを参照してください。