ASM (Service Mesh) は、アプリケーションのリージョン間トラフィック分散およびフェイルオーバー機能を提供します。 クロスリージョントラフィック分散機能は、重みに基づいてトラフィックを複数のクラスターにルーティングすることにより、クロスリージョンロード分散を実装します。 クロスリージョンフェイルオーバー機能は、障害のあるリージョンから別のリージョンにトラフィックを転送することにより、クロスリージョンディザスタリカバリを実装します。 このトピックでは、クロスリージョンフェイルオーバーとトラフィック分散機能を使用して、クロスリージョンディザスタリカバリと負荷分散を実装する方法について説明します。 このトピックの例では、Bookinfoアプリケーションが使用されています。
ネットワークを計画する
ASMを使用する前に、ASMのネットワーク設定を完了する必要があります。これには、CIDRブロックとvSwitch、仮想プライベートクラウド (VPC) 、およびクラスターの名前が含まれます。 この例では、次の計画に基づいてネットワークが作成されます。
データプレーン上の複数のクラスターのCIDRブロックを計画する方法の詳細については、「データプレーン上の複数のクラスターのCIDRブロックを計画する」をご参照ください。
vSwitchとVPCのネットワークプラン
vSwitch
重要Cloud Enterprise Network (CEN) を使用してVPCを接続するときにルートの競合を防ぐには、vSwitchごとに一意のCIDRブロックを指定します。
カテゴリ
vSwitch
[VPC]
IPv4 CIDRブロック
クラスター
vpc-hangzhou-switch-1
vpc-hangzhou
20.0.0.0/16
vpc-shanghai-switch-1
vpc-上海
21.0.0.0/16
ASMインスタンス
vpc-hangzhou-switch-2
vpc-hangzhou2
192.168.0.0/24
VPC
カテゴリ
[VPC]
リージョン
IPv4 CIDRブロック
クラスター
vpc-hangzhou
cn-hangzhou
20.0.0.0/8
vpc-上海
cn-shanghai
21.0.0.0/8
ASMインスタンス
vpc-hangzhou2
cn-hangzhou
192.168.0.0/16
クラスター内のポッドとサービスのネットワーク計画
クラスター
リージョン
[VPC]
ポッドCIDR
サービスCIDR
ack-hangzhou
cn-hangzhou
vpc-hangzhou
10.0.0.0/16
172.16.0.0/16
ack-上海
cn-shanghai
vpc-上海
10.1.0.0/16
172.17.0.0/16
ステップ1: 異なるリージョンでクラスターを作成する
上記の計画に基づいて、中国 (杭州) および中国 (上海) リージョンに2つのvSwitchを作成し、vSwitchに関連付けられたVPCを作成します。 詳細については、「vSwitchの作成」および「VPCとvSwitchの作成」をご参照ください。
作成したVPCと前述のネットワーク計画を使用して、中国 (杭州) および中国 (上海) リージョンにクラスターを作成します。 詳細については、「ACK管理クラスターの作成」をご参照ください。
上記のネットワークプランに基づいて、中国 (杭州) リージョンにASMインスタンスを作成します。 詳細については、「ASMインスタンスの作成」をご参照ください。
ステップ2: CENを使用したクロスリージョンVPC通信の実装
CENを使用して、クラスター間およびクラスターとASMインスタンス間のVPCを接続できます。
CENコンソールにログインし、CENインスタンスを作成します。 詳細については、「CENインスタンスの作成」をご参照ください。
トランジットルーターを作成します。
[インスタンス] ページで、サブステップ1で作成したCENインスタンスの名前をクリックします。 [基本設定] タブで、[中継ルーターの作成] をクリックします。
[トランジットルーターの作成] ダイアログボックスで、[リージョン] ドロップダウンリストからリージョンを選択し、[名前] を指定して、[OK] をクリックします。
この例では、2つのトランジットルーターが設定されています。
1つのトランジットルーターの場合、リージョンを中国 (上海) に設定し、名前を上海ルーターに設定します。
他のトランジットルーターの場合は、リージョンを中国 (杭州) に、名前をHangzhou-routerに設定します。
中国 (上海) および中国 (杭州) リージョンの2つのトランジットルーターに対して、次の手順を繰り返して、VPCをトランジットルーターに接続します。
[インスタンス] ページで、サブステップ1で作成したCENインスタンスの名前をクリックします。 [基本設定] タブで、作成したトランジットルーターのIDをクリックして、トランジットルーターの詳細ページに移動します。
[イントラリージョン接続] タブで、[接続の作成] をクリックします。 [ネットワークタイプ] に [VPC] を選択し、[ネットワークインスタンス] のリージョンに対応するVPCを選択します。
他のパラメーターにデフォルト値を使用し、[OK] をクリックします。
クロスリージョンネットワーク帯域幅を設定します。
サブステップ2で作成したトランジットルーターの名前をクリックします。 ページの右上隅にある [接続の作成] をクリックします。
[ピアネットワークインスタンスとの接続] ページで、関連するパラメーターを設定し、[OK] をクリックします。
次の図は、杭州から上海への接続例を示しています。 Regionは現在のリージョンを示し、Peer regionは宛先リージョンを示します。 設定項目の詳細については、「リージョン間接続の管理」をご参照ください。
インスタンスの作成後、[クロスリージョン接続] タブでインスタンスを表示できます。
セキュリティグループルールを追加します。
この例では、Flannelネットワークプラグインが使用されています。 ack-shanghaiクラスターのポッドCIDRブロックをack-hangzhouクラスターのセキュリティグループに追加します。 これにより、ピアクラスターのポッドCIDRブロック内のIPアドレスからのインバウンド通信が可能になります。
説明Terwayネットワークプラグインを使用する場合は、一方のクラスターのvSwitch CIDRブロックをもう一方のクラスターのセキュリティグループに追加します。 VPCコンソールにログインし、vSwitchページのIPv4 CIDRブロック列からvSwitchのCIDRブロックを取得できます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、ack-shanghaiクラスターの名前をクリックします。 [クラスター情報] ページの [基本情報] タブで、ack-shanghaiクラスターのポッドCIDRブロックを表示します。
On theクラスターページで、ack-hangzhouクラスターを見つけて、詳細で、アクション列を作成します。
[クラスター情報] ページで、[基本情報] タブをクリックします。 次に、[セキュリティグループ] の横にあるセキュリティグループIDをクリックします。
On theセキュリティグループの詳細タブをクリックします。ルールの追加上のインバウンドタブをクリックします。
[プロトコルタイプ] を [すべて] に設定し、[ソース] をack-shanghaiクラスターのポッドCIDRブロックに設定します。 他のデフォルト値を保持します。 次に、[操作] 列の [保存] をクリックします。
上記のサブステップを繰り返して、ack-hangzhouクラスターのポッドCIDRブロックを表示します。 次に、ack-hangzhouクラスターのポッドCIDRブロックをack-shanghaiクラスターのセキュリティグループに追加します。
ack-hangzhouクラスターのECSインスタンスにログインし、pingコマンドを実行して、ack-hangzhouクラスターのECSインスタンスがack-shanghaiクラスターの任意のECSインスタンスと通信できるかどうかを確認します。
手順3: ASMインスタンスにクラスターを追加し、マネージドingressゲートウェイを作成する
作成したack-hangzhouクラスターとack-shanghaiクラスターをASMインスタンスに追加します。 詳細については、「ASMインスタンスへのクラスターの追加」をご参照ください。
次のYAMLファイルを使用して、管理されたingressゲートウェイを作成します。 詳細については、「ingressゲートウェイの作成」をご参照ください。
ステップ4: Bookinfoアプリケーションのデプロイ
ack-hangzhouクラスターにBookinfoアプリケーションをデプロイします。
kubectlを使用してack-hangzhouクラスターに接続します。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
次のコンテンツを含むack-hangzhou-k8s.yamlファイルを作成します。
次のコマンドを実行して、Bookinfoアプリケーションをack-hangzhouクラスターにデプロイします。
kubectl apply -f ack-hangzhou-k8s.yaml
ack-shanghaiクラスターにBookinfoアプリケーションをデプロイします。
kubectlを使用してack-shanghaiクラスターに接続します。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
説明kubectlを使用してack-shanghaiクラスターに接続する場合、ack-hangzhouクラスターのkubeconfigファイルをack-shanghaiクラスターのkubeconfigファイルに切り替える必要があります。
次のコンテンツを含むack-shanghai.yamlファイルを作成します。
次のコマンドを実行して、Bookinfoアプリケーションをack-shanghaiクラスターにデプロイします。
kubectl apply -f ack-shanghai.yaml
kubectlを使用してASMインスタンスに接続します。 詳細については、「コントロールプレーンでkubectlを使用したIstioリソースへのアクセス」をご参照ください。
説明kubectlを使用してASMインスタンスに接続する場合、ack-shanghaiクラスターのkubeconfigファイルをASMインスタンスのkubeconfigファイルに切り替える必要があります。
ASMでルーティングルールを作成します。
次のコンテンツを含むasm.yamlファイルを作成します。
次のコマンドを実行して、ルーティングルールを作成します。
kubectl apply -f asm.yaml
Bookinfoアプリケーションがデプロイされているかどうかを確認します。
ACKコンソールにログインします。
ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
On theクラスターページで、ack-hangzhouクラスターを見つけて、詳細で、アクション列を作成します。
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[サービス] ページの上部にある、[名前空間] ドロップダウンリストからistio-systemを選択します。 istio-ingressgatewayという名前のingressゲートウェイを見つけ、ポートが80のIPアドレスを [外部IP] 列に表示します。
入力ingress gateway/productpageのIPアドレスブラウザのアドレスバーに
ページを複数回更新します。 次の画像が画面に交互に表示されます。
ステップ5: クロスリージョントラフィック分散およびフェールオーバー機能の使用
クロスリージョントラフィック分散の設定
ASMコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[基本情報] ページで、locality-Failoverの右側にある [地域トラフィック分散の有効化] をクリックします。
説明クロスリージョンフェールオーバーを有効にした場合、クロスリージョントラフィック分散を有効にする前に、クロスリージョンフェールオーバーを無効にする必要があります。
では、地域-トラフィック分布ダイアログボックスで、ポリシーパラメーターをcn-hangzhouに移動し、新しいポリシー.
アイコンをクリックし、アイコンをクリックします。 [To] をcn-hangzhouに、[Weight] を90% に設定します。
をクリックし、アイコン, setToにcn-shanghaiと重量を10% し、OK.
次のコマンドを実行して、Bookinfoアプリケーションに10回要求し、クロスリージョントラフィックの配信が成功したかどうかを確認します。
for ((i=1;i<=10;i++));do curl http://<Port 80 of the IP address of the ingress gateway in the ack-hangzhou cluster>/productpage 2>&1|grep full.stars;done
期待される出力:
<!-- full stars: --> <!-- full stars: -->
出力は、10回のアクセス要求が行われ、2行の
フルスター
出力が返されたことを示します。 これは、10件のリクエストのうち9件がack-hangzhouクラスターのv1バージョンのレビューサービスにルーティングされ、1件のリクエストがack-shanghaiクラスターのv2バージョンのレビューサービスにルーティングされることを示しています。 トラフィックは、クラスタの重みに基づいて異なるクラスタにルーティングされます。
クロスリージョンフェイルオーバーの設定
ack-hangzhouクラスターのレビューサービスを無効にします。
ACKコンソールにログインします。
ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
On theデプロイメントページからデフォルトを選択します。名前空間ドロップダウンリストをクリックし、スケールで、アクションreviews-v1の列。
では、スケールダイアログボックスで、目的のポッド数パラメータを0にし、OK.
宛先ルールを設定します。
次の宛先ルールを設定します。レビューサービスに1秒以内にアクセスできない場合、レビューサービスは1分間イジェクトされます。
にログインします。ASMコンソール.
左側のナビゲーションウィンドウで、 .
[メッシュ管理] ページで、設定するASMインスタンスを見つけます。 ASMインスタンスの名前をクリックするか、[操作] 列の [管理] をクリックします。
ASMインスタンスの詳細ページで、 左側のナビゲーションウィンドウに表示されます。
On theDestinationRuleページ、レビューサービスを見つけてクリックYAMLで、アクション列を作成します。
では、編集ダイアログボックスで、次の内容をコードエディターにコピーし、OK.
spec: ...... trafficPolicy: connectionPool: http: maxRequestsPerConnection: 1 outlierDetection: baseEjectionTime: 1m consecutive5xxErrors: 1 interval: 1s
maxRequestsPerConnection: 接続ごとの最大リクエスト数を指定します。
baseEjectionTime: 最小排出時間を指定します。
successive5xxErrors: 連続エラーの数を指定します。
interval: 排出分析の時間間隔を指定します。
クロスリージョンフェイルオーバーを有効にします。
ASMインスタンスの詳細ページで、 左側のナビゲーションウィンドウに表示されます。
On theベース情報ページをクリックします。Locality-Failoverの有効化の右側に地域-フェイルオーバー.
説明クロスリージョントラフィック分散を有効にした場合、クロスリージョンフェールオーバーを有効にする前に、クロスリージョントラフィック分散を無効にする必要があります。
[ローカルロード-バランス] ダイアログボックスで、[差出人] パラメーターがcn-shanghaiに設定されている場合は、[フェールオーバー] パラメーターをcn-hangzhouに設定します。 Fromパラメーターがcn-hangzhouに設定されている場合、Failover toパラメーターをcn-shanghaiに設定します。 次に、[送信] をクリックします。
次のコマンドを実行して、Bookinfoアプリケーションを10回リクエストし、v2バージョンのレビューサービスにルーティングされたリクエストの数を記録します。
for ((i=1;i<=10;i++));do curl http://<Port 80 of the IP address of the ingress gateway in the ack-hangzhou cluster>/productpage 2>&1|grep full.stars;done | wc -l
期待される出力:
20
出力は、10回のアクセス要求が行われ、20行の結果が返されたことを示します。 これは、リクエストがv2バージョンのレビューサービスにルーティングされるたびに、
完全な星
を含む2行の結果が返されるためです。 これは、10個のリクエストすべてがack-shanghaiクラスターのv2バージョンのレビューサービスにルーティングされ、クロスリージョンフェイルオーバーが成功したことを示しています。
よくある質問
CENを使用してKubernetesクラスターのVPCを接続します。 ただし、クラスターをASMインスタンスに追加すると、エラーメッセージが表示されます。 どうすればよいですか。
クラスターが異なるリージョンに存在する場合、CENを使用してクラスターのVPCを接続するときに、クロスリージョンデータ転送プランを購入し、クロスリージョンデータ転送の有効な設定を構成する必要があります。 そうしないと、ASMインスタンスはデータプレーン上のクラスターへの接続に失敗します。 この場合、クラスターをASMインスタンスに追加できません。
この問題を解決するには、CENコンソールでクロスリージョンデータ転送の有効な設定を再構成して、CENを使用してクラスターのVPCを接続する必要があります。 詳細については、「手順2: CENを使用してクロスリージョンVPC通信を実装する」をご参照ください。