インストールの検証

このガイドに従って、マルチクラスタ Istio インストールが正しく動作していることを確認します。

続行する前に、準備 の手順を完了し、マルチクラスタインストールガイドのいずれかを選択して実行してください。

このガイドでは、HelloWorld アプリケーションのV1cluster1に、V2cluster2にデプロイします。リクエストを受け取ると、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サービスを作成します。

ZipZip
$ 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のデプロイ

cluster1helloworld-v1アプリケーションをデプロイします。

Zip
$ 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のデプロイ

cluster2helloworld-v2アプリケーションをデプロイします。

Zip
$ 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アプリケーションをデプロイします。

ZipZip
$ 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のバージョンがv1v2の間で切り替わることを確認します。

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のバージョンがv1v2の間で切り替わることを確認します。

Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...

おめでとうございます!複数のクラスタにIstioを正常にインストールして検証しました!

次のステップ

マルチクラスタメッシュ全体のトラフィックを制御する方法については、ローカルロードバランシングタスクを参照してください。

この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございました!