すべてのプロダクト
Search
ドキュメントセンター

Server Load Balancer:ACK OneのALBマルチクラスタゲートウェイに基づくハイブリッドディザスタリカバリの実装

最終更新日:Mar 03, 2025

データセンターまたはサードパーティのプラットフォームで実行されるKubernetesクラスターにデプロイされたビジネスの可用性を向上させるアクティブゾーン冗長システムを構築するには、Distributed Cloud Container Platform for Kubernetes (ACK One) を使用してトラフィック、アプリケーション、およびクラスターを一元管理します。 ACK Oneを使用して、クラスター間でトラフィックをルーティングし、フェイルオーバーをシームレスに実行できます。 このトピックでは、ACK Oneを使用してハイブリッドクラウド環境でアクティブゾーン冗長システムを迅速に構築する方法について説明します。

アーキテクチャ

上の図は、ハイブリッドクラウド環境でのアクティブゾーン冗長システムのアーキテクチャを示しています。 このシステムは、登録済みクラスター、フリートインスタンス (GitOpsはオプション) 、およびApplication Load Balancer (ALB) マルチクラスターゲートウェイで構成されています。

image
  1. Alibaba Cloud上のリソースは、同じ仮想プライベートクラウド (VPC) にデプロイされます。 Container Service for Kubernetes (ACK) クラスターがAZ 1に作成され、登録済みクラスターがAZ 2に作成されます。

  2. データセンターまたはサードパーティプラットフォームにデプロイされたKubernetesクラスターを登録済みクラスターに接続します。 専用回線を使用して、データセンターをVPCに接続します。

  3. ACKクラスターと登録済みクラスターを同じVPC内のフリートインスタンスに関連付けます。 ACK One GitOpsを使用して、アプリケーションをACKクラスターおよび登録済みクラスターに配布します。

  4. フリートインスタンスで、ALBマルチクラスターゲートウェイを作成し、クラスターをゲートウェイに追加するようにAlbConfigを設定します。 次に、Ingressを作成し、Fleetインスタンスでトラフィックルーティングルールを設定して、南北トラフィックを管理し、ゾーンディザスタリカバリを実装します。

手順

ステップ1: ネットワークの設計とクラスターの作成

  1. 同じVPCにフリートインスタンスACKクラスター登録済みクラスターを作成します。 ACKクラスターと登録済みクラスターが異なるゾーンにあることを確認してください。

  2. ACKクラスターのノードCIDRブロックとポッドCIDRブロックがKubernetesクラスターのブロックと重複しないようにします。 フリート管理のネットワーク設計の詳細については、「フリート管理のネットワーク設計」をご参照ください。

手順2: Alibaba Cloudへの接続

  1. Kubernetesクラスターを登録済みクラスターに接続します。 詳細については、「登録済みクラスターの作成」をご参照ください。

    説明
  2. オンプレミスネットワークをVPCに接続します。 詳細については、「ネットワーク接続」をご参照ください。

  3. 専用回線を使用してAlibaba Cloudに接続します。 詳細については、「ハイブリッドネットワークの概要」をご参照ください。

  4. 登録済みクラスターとACKクラスターをフリートインスタンスに関連付ける方法の詳細については、「関連クラスターの管理」をご参照ください。

ステップ3: GitOps ApplicationSetを使用してアプリケーションを複数のクラスターに配布する

ハイブリッドクラウド環境では、Kubernetesクラスターで使用されているコンテナネットワーク (アンダーレイまたはオーバーレイ) を確認する必要があります。 2つのコンテナーネットワークの違いは、オーバーレイネットワークのポッドにアクセスする場合は、オンプレミスネットワークをVPCに接続する必要があることです。 さらに、各ノードがオンプレミスネットワークのポッドCIDRブロックにトラフィックをルーティングできるようにする必要があります。 ALBマルチクラスタゲートウェイは、両方のコンテナネットワークをサポートします。 アンダーレイネットワークでClusterIPサービスを使用できますが、オーバーレイネットワークでNodePortサービスを使用する必要があります。

次の例は、アンダーレイおよびオーバーレイネットワーク用のweb-demoという名前のGitOps ApplicationSetのYAMLテンプレートを示しています。 ApplicationSetsの詳細については、「マルチクラスタアプリケーションの作成」をご参照ください。

下敷きコンテナネットワーク

次のYAMLテンプレートを使用して、webデモApplicationSetをデプロイします。 ClusterIPサービスは、関連するすべてのクラスターで使用されます。

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: appset-web-demo-undelay
  namespace: argocd
spec:
  template:
    metadata:
      name: '{{.metadata.annotations.cluster_id}}-web-demo'
      namespace: argocd
    spec:
      destination:
        name: '{{.name}}'
        namespace: gateway-demo
      project: default
      source:
        repoURL: https://github.com/AliyunContainerService/gitops-demo.git
        path: manifests/helm/web-demo
        targetRevision: main
        helm:
          valueFiles:
            - values.yaml
          parameters:
            - name: envCluster
              value: '{{.metadata.annotations.cluster_name}}'
      syncPolicy:
        automated: {}
        syncOptions:
          - CreateNamespace=true
  generators:
    - clusters:
        selector:
          matchExpressions:
            - values:
                - cluster
              key: argocd.argoproj.io/secret-type
              operator: In
            - values:
                - in-cluster
              key: name
              operator: NotIn
  goTemplateOptions:
    - missingkey=error
  syncPolicy:
    preserveResourcesOnDeletion: false
  goTemplate: true

オーバーレイコンテナーネットワーク

  1. ArgoCD UIにアクセスし、[設定] > [クラスター] を選択し、cluster: ackおよびcluster: idcラベルを2つのクラスターに追加します。

  2. 次のYAMLテンプレートを使用して、webデモApplicationSetを2つのクラスターにデプロイします。 データセンターでNodePortサービスを使用し、ACKクラスターでClusterIPサービスを使用します。

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: appset-web-demo-overlay
  namespace: argocd
spec:
  template:
    metadata:
      name: '{{.metadata.annotations.cluster_id}}-web-demo-overlay'
      namespace: argocd
    spec:
      destination:
        name: '{{.name}}'
        namespace: gateway-demo
      project: default
      source:
        repoURL: https://github.com/AliyunContainerService/gitops-demo.git
        path: manifests/helm/web-demo
        targetRevision: main
        helm:
          valueFiles:
            - values.yaml
          parameters:
            - name: isNodePort
              value: "{{.values.isNodePort}}"
            - name: envCluster
              value: '{{.metadata.annotations.cluster_name}}'
      syncPolicy:
        automated: {}
        syncOptions:
          - CreateNamespace=true
  generators:
    - clusters:
        selector:
          matchLabels:
            cluster: 'idc'
        # A key-value map for arbitrary parameters
        values:
          isNodePort: "true"
    - clusters:
        selector:
          matchLabels:
            cluster: 'ack'
        values:
          isNodePort: "false"
  goTemplateOptions:
    - missingkey=error
  syncPolicy:
    preserveResourcesOnDeletion: false
  goTemplate: true

ステップ4: ALBマルチクラスタゲートウェイを使用してアクティブゾーン冗長性を実装する

  • フリートインスタンスでAlbConfigを設定してALBマルチクラスターゲートウェイを作成し、ACKクラスターと登録済みクラスターをゲートウェイに追加します。

  • フリートインスタンスにルーティングルールとIngressを作成して、アクティブなゾーン冗長性を実装します。

詳細については、「ゾーンディザスタリカバリシステムの構築」をご参照ください。