Service Mesh ASM は、アプリケーションサービスのリージョン間トラフィック分散機能とリージョン間フェールオーバー機能を提供します。リージョン間トラフィック分散機能は、指定された重みに従って複数のクラスタにトラフィックをルーティングし、マルチリージョンロードバランシングを実現します。リージョン間フェールオーバー機能は、あるリージョンのサービスに障害が発生した場合、トラフィックを別のリージョンに転送し、リージョン間ディザスタリカバリを実現します。このトピックでは、Bookinfo アプリケーションを使用して、リージョン間フェールオーバー機能とトラフィック分散機能を使用してリージョン間ディザスタリカバリとトラフィックロードバランシングを実装する方法を示します。
ネットワーク構成
vSwitch、VPC、およびクラスタの CIDR ブロック、名前、その他の情報を構成します。詳細については、「データプレーン上の複数のクラスタの CIDR ブロックを計画する」をご参照ください。ネットワーク構成の例を以下に示します。
vSwitch と VPC のネットワーク構成
VPC
オブジェクト
VPC 名
リージョン
IPv4 CIDR ブロック
クラスタ
vpc-hangzhou
cn-hangzhou
20.0.0.0/8
vpc-shanghai
cn-shanghai
21.0.0.0/8
Service Mesh
vpc-hangzhou2
cn-hangzhou
192.168.0.0/16
vSwitch
重要CEN を使用して VPC ネットワークを接続する際にルートの競合を避けるため、2 つの vSwitch で同じ CIDR ブロックを使用することはできません。
オブジェクト
vSwitch 名
VPC
IPv4 CIDR ブロック
クラスタ
vpc-hangzhou-switch-1
vpc-hangzhou
20.0.0.0/16
vpc-shanghai-switch-1
vpc-shanghai
21.0.0.0/16
Service Mesh
vpc-hangzhou-switch-2
vpc-hangzhou2
192.168.0.0/24
クラスタの Pod と Service のネットワーク構成
クラスタ名
リージョン
VPC
Pod CIDR
Service CIDR
ack-hangzhou
cn-hangzhou
vpc-hangzhou
10.0.0.0/16
172.16.0.0/16
ack-shanghai
cn-shanghai
vpc-shanghai
10.1.0.0/16
172.17.0.0/16
ステップ 1: 異なるリージョンにクラスタを作成する
上記の構成に従って、杭州リージョンと上海リージョンに VPC と vSwitch を作成します。詳細については、「vSwitch を作成する」および「VPC と vSwitch を作成する」をご参照ください。
作成した VPC を使用して、杭州リージョンと上海リージョンにクラスターを作成します。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。
上記の構成に従って、杭州リージョンに ASM インスタンスを作成します。詳細については、「ASM インスタンスを作成する」をご参照ください。
ステップ 2: CEN を使用してリージョン間 VPC ネットワーク接続を実装する
CEN を使用して、クラスタ間の VPC ネットワークと、クラスタと Service Mesh 間の VPC ネットワークを接続します。
クラウドエンタープライズネットワーク (CEN) コンソール にログインし、CEN インスタンスを作成します。詳細については、「CEN インスタンスを作成する」をご参照ください。
トランジットルーターを作成します。
[CEN インスタンス] ページで、ステップ 1 で作成した CEN インスタンスの名前をクリックし、[基本情報] タブの下にある [トランジットルーターの作成] をクリックします。
[リージョン] を選択し、[名前] を入力して、[OK] をクリックします。
この例では、2 つのトランジットルーターが構成されています。
[リージョン]: [中国 (上海)]、[名前]: [shanghai-router]。
[リージョン]: [中国 (杭州)]、[名前]: [hangzhou-router]。
次の手順を繰り返して、両方のトランジットルーターに VPC を追加します。
トランジットルーターの ID をクリックします。
[リージョン内接続] タブを選択し、[接続の作成] をクリックします。
[インスタンスタイプ] で [仮想プライベートクラウド (VPC)] を選択し、[ネットワークインスタンス] でリージョンに対応する VPC インスタンスを選択します。
その他のオプションはデフォルトのままにして、[OK] をクリックします。
リージョン間通信の帯域幅を構成します。
セキュリティグループルールを追加します。
次の例では、Flannel ネットワークプラグインを使用して、ピアクラスタの Pod ネットワーク CIDR を各クラスタのセキュリティグループに追加します。
説明Terway ネットワークプラグインの場合は、クラスタ vSwitch の CIDR を使用します。VPC コンソール にログインし、[vSwitch] ページの [IPv4 CIDR ブロック] 列から vSwitch の CIDR を取得できます。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
Pod ネットワーク CIDR を取得します。
[クラスタ] ページで、上海リージョンを選択し、ack-shanghai クラスタ名をクリックし、[クラスタ情報] ページで [基本情報] タブをクリックして、ack-shanghai クラスタの Pod CIDR ブロックを表示します。
[クラスタ] ページに戻り、杭州リージョンを選択し、ack-hangzhou クラスタ名をクリックし、[クラスタ情報] ページで [基本情報] タブをクリックして、ack-hangzhou クラスタの Pod CIDR ブロックを取得します。
セキュリティグループを構成します。
各クラスタの [クラスタ情報] ページで、[基本情報] タブをクリックし、[コントロールプレーンセキュリティグループ] の右側にあるセキュリティグループ ID をクリックします。
[受信] タブの下にある [ルールの追加] をクリックします。
[プロトコルタイプ] を [すべて] に設定し、[ソース] をピアクラスタの Pod CIDR ブロックに設定し、その他のデフォルト値を保持し、[アクション] 列の [保存] をクリックします。
両方のクラスタのノードにログインし、ping コマンドを使用して、ネットワークが他のクラスタに接続されているかどうかをテストします。詳細については、「ノードにログインする」をご参照ください。
ステップ 3: ASM インスタンスにクラスタを追加し、ホスト型イングレスゲートウェイを作成する
杭州リージョンと上海リージョンのクラスタを ASM インスタンスに追加します。詳細については、「ASM インスタンスにクラスタを追加する」をご参照ください。
イングレスゲートウェイを作成します。
apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: annotations: asm.alibabacloud.com/managed-by-asm: 'true' // ASM によって管理されている name: ingressgateway namespace: istio-system spec: gatewayType: ingress dnsPolicy: ClusterFirst externalTrafficPolicy: Local hostNetwork: false ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi rollingMaxSurge: 100% rollingMaxUnavailable: 25% runAsRoot: true serviceType: LoadBalancer
ステップ 4: Bookinfo デモアプリケーションをデプロイする
ack-hangzhou クラスタと ack-shanghai クラスタの両方に Bookinfo アプリケーションをデプロイします。
kubectl apply -f bookinfo.yaml
kubectl を使用して ASM インスタンスに接続し、ルーティングルールを作成します。
以下の内容で asm.yaml を作成します。
ルーティングルールを作成します。
kubectl apply -f asm.yaml
Bookinfo アプリケーションが正常にデプロイされていることを確認します。
ブラウザのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力し、ページを 10 回更新して Bookinfo アプリケーションにアクセスします。
Bookinfo アプリケーションは、reviews サービスの v1、v2、v3 バージョンにアクセスします。reviews サービスの 3 つのバージョンへのリクエストの比率が 1:1:1 に近いことがわかります。
ステップ 5: リージョン間フェールオーバーとリージョン間トラフィック分散を使用する
リージョン間フェールオーバーを構成する
ack-hangzhou クラスタの review サービスを無効にします。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[デプロイメント] ページで、[名前空間] を default に設定し、[アクション] 列の [スケール] をクリックします。
[必要な Pod 数] を 0 に設定し、[OK] をクリックします。
宛先ルールを構成します。
1 秒以内に review サービスにアクセスできない場合、1 分間排出されるように宛先ルールを構成します。
ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウの を選択します。
reviews の [アクション] 列の [YAML の編集] をクリックします。
次のコンテンツを追加し、[OK] をクリックします。
spec: ...... trafficPolicy: // トラフィックポリシー connectionPool: // 接続プール http: maxRequestsPerConnection: 1 // 接続あたりの最大リクエスト数 outlierDetection: // 外れ値検出 baseEjectionTime: 1m // 最小排出時間 consecutive5xxErrors: 1 // 連続エラー数 interval: 1s // 排出検出の時間間隔
maxRequestsPerConnection: 接続の最大数。
baseEjectionTime: 最小排出期間。
consecutive5xxErrors: 連続エラーの数。
interval: 排出検出の時間間隔。
リージョン間フェールオーバーを有効にします。
ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウの を選択します。
ASM インスタンスバージョン 1.22.6.66 未満の場合
[基本情報] ページで、[地理位置情報に基づくロードバランシング] の右側にある [設定] をクリックします。
[地理位置情報に基づくフェイルオーバー] ダイアログボックスで、[ポリシー] が cn-shanghai の場合は [フェイルオーバー先] を cn-hangzhou に設定し、[ポリシー] が cn-hangzhou の場合は [フェイルオーバー先] を cn-shanghai に設定してから、[確認] をクリックします。
ASM インスタンスバージョン 1.22.6.66 以降の場合
[基本情報] ページで、[Geolocation-based Load Balancing] の右側にある [Geolocation-based Load Balancing を構成する] をクリックします。
[リージョンの優先ルールを指定する] をクリックします。[障害が発生したリージョン] を
cn-shanghai
に設定し、[トラフィックが優先的にルーティングされるリージョン] をcn-hangzhou
に設定します。[追加] をクリックし、[障害が発生したリージョン] を
cn-hangzhou
に、[トラフィックが優先的にルーティングされるリージョン] をcn-shanghai
に設定し、[構成の保存] をクリックします。
次のコマンドを実行して、Bookinfo アプリケーションに 10 回リクエストし、reviews サービスの v2 バージョンにルーティングされた結果の数をカウントします。
for ((i=1;i<=10;i++));do curl http://<ack-hangzhou クラスタのイングレスゲートウェイの IP アドレスのポート 80>/productpage 2>&1|grep full.stars;done|wc -l
期待される出力:
20
出力は、10 件のアクセスリクエストが行われ、20 行の結果が返されたことを示しています (リクエストが reviews サービスの v2 バージョンにルーティングされるたびに、
full stars
を含む 2 行が返されます)。これは、10 件のリクエストすべてが ack-shanghai クラスタの reviews サービスの v2 バージョンにルーティングされ、リージョン間フェールオーバーが成功したことを示しています。
リージョン間トラフィック分散を構成する
リージョン間トラフィック分散機能は、バージョン 1.22.6.66 以上 のインスタンスでのみサポートされています。
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[基本情報] ページで、[Geolocation-based Load Balancing] の右側にある [Geolocation-based Load Balancing を構成する] をクリックします。
[トラフィック分散ルールを設定] をクリックし、[送信元] を
cn-hangzhou
に、[宛先] をcn-shanghai
に、[トラフィックの割合] を 10% に設定し、[設定を保存] をクリックします。説明地理的な場所に基づく負荷分散は、デフォルトでフェールオーバーモードで有効になっています。トラフィック分散モードを再選択して有効にするには、ページの右上隅にある [無効化] をクリックする必要があります。
次のコマンドを実行して、Bookinfo アプリケーションに 10 回リクエストし、リージョン間トラフィック分散が成功したかどうかを確認します。
for ((i=1;i<=10;i++));do curl http://<ack-hangzhou クラスタのイングレスゲートウェイの IP アドレスのポート 80>/productpage 2>&1|grep full.stars;done
期待される出力:
<!-- full stars: --> <!-- full stars: -->
出力には、10 回のアクセス後に 2 行の
full stars
が表示されています。これは、10 件のリクエストのうち 9 件が ack-hangzhou クラスタの reviews サービスの v1 バージョンにルーティングされ、1 件が ack-shanghai クラスタの reviews サービスの v2 バージョンにルーティングされたことを示しています。これにより、構成された重みに従ってトラフィックが複数のクラスタに正常にルーティングされていることが確認されます。
よくある質問
CEN 経由でクラスタ VPC ネットワークを接続したにもかかわらず、ASM への Kubernetes クラスタの追加が失敗するのはなぜですか?
クラスタが異なるリージョンにある場合、リージョン間データ転送プランを購入していないか、クラスタ VPC ネットワークの接続時にリージョン間トラフィックを正しく構成していないと、ASM コントロールプレーンはデータプレーンクラスタに接続できず、ASM にクラスタを追加できません。
この問題を解決するには、クラウドエンタープライズネットワーク (CEN) でリージョン間トラフィック設定を再構成して、クラスタ VPC ネットワークを接続する必要があります。詳細については、「ステップ 2: CEN を使用してリージョン間 VPC 通信を実装する」をご参照ください。