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

:南北の交通を管理する

最終更新日:Dec 05, 2024

Distributed Cloud Container Platform for Kubernetes (ACK One) が提供するApplication Load Balancer (ALB) マルチクラスターゲートウェイは、ALB Ingressのマルチクラスターモードです。 ゲートウェイでは、アクティブゾーン冗長性、トラフィック負荷分散、ヘッダーベースのトラフィックルーティングなどの機能を使用できます。 このトピックでは、ALBマルチクラスタゲートウェイを使用して南北トラフィックを管理する方法について説明します。

前提条件

  • ALBが活性化される。

  • フリート管理機能が有効になっています。 詳細については、「マルチクラスター管理の有効化」をご参照ください。

  • ACK Oneフリートインスタンスは、ACK Oneフリートインスタンスと同じ仮想プライベートクラウド (VPC) にデプロイされている2つのACKクラスターに関連付けられています。 詳細については、「関連クラスターの管理」をご参照ください。

手順1: ACK One Fleetインスタンスでkubectlを使用してALBマルチクラスタゲートウェイを作成する

ACK One FleetインスタンスにAlbConfigオブジェクトを作成してALBマルチクラスタゲートウェイを作成し、関連するクラスタにALBマルチクラスタゲートウェイを追加します。

  1. ACK One Fleetインスタンスが存在するVPCから2つのvSwitchのIDを取得します。

  2. gateway.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

    説明
    • ${vsw-id1}${vsw-id2} を前の手順で取得したvSwitch IDに置き換え、${cluster1}${cluster2} を追加する関連クラスターのIDに置き換えます。

    • 関連付けられているクラスター ${cluster1} および ${cluster2} の場合、vSwitch CIDRブロックのすべてのIPアドレスとポートからのアクセスを許可するように、セキュリティグループのインバウンドルールを設定する必要があります。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: ackone-gateway-demo
      annotations:
        # Add associated clusters that are used to handle traffic to the ALB multi-cluster instance. 
        alb.ingress.kubernetes.io/remote-clusters: ${cluster1},${cluster2}
    spec:
      config:
        name: one-alb-demo
        addressType: Internet
        addressAllocatedMode: Fixed
        zoneMappings:
        - vSwitchId: ${vsw-id1}
        - vSwitchId: ${vsw-id2}
      listeners:
      - port: 8001
        protocol: HTTP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: ackone-gateway-demo

    下表に、各パラメーターを説明します。

    パラメーター

    必須 / 任意

    説明

    metadata.name

    AlbConfigの名前。

    metadata.annotations:

    alb.ingress.kubernetes.io/remote-clusters

    ALBマルチクラスタゲートウェイに追加される関連クラスタのリスト。 ここにリストされているクラスターIDはフリートインスタンスに関連付けられています。

    spec.config.name

    不可

    ALBインスタンスの名前。

    spec.config.addressType

    不可

    ALBインスタンスのネットワークタイプ。 有効な値:

    • インターネット (デフォルト): パブリックネットワーク。 ALBインスタンスはインターネットにサービスを提供し、インターネット経由でアクセスできます。

      説明

      ALBインスタンスがインターネット接続サービスを提供できるようにするには、ALBインスタンスをelastic IPアドレス (EIP) に関連付ける必要があります。 インターネット接続のALBインスタンスを使用している場合、関連するEIPのインスタンス料金と帯域幅またはデータ転送料金が課金されます。 詳細については、「従量課金」をご参照ください。

      イントラネット: プライベートネットワーク。 ALBインスタンスはVPC内でサービスを提供し、インターネット経由でアクセスすることはできません。

    spec.config.zoneMappings

    ALBインスタンスに関連付けられているvSwitchのID。 vSwitchの作成方法の詳細については、「vSwitchの作成と管理」をご参照ください。

    説明
    • 指定されたvSwitchは、ALBインスタンスでサポートされているゾーンにデプロイし、クラスターと同じVPCにデプロイする必要があります。 ALBでサポートされているリージョンとゾーンの詳細については、「ALBが利用可能なリージョンとゾーン」をご参照ください。

    • ALBはマルチゾーン展開をサポートしています。 現在のリージョンで2つ以上のゾーンがサポートされている場合は、高可用性を確保するために2つ以上のゾーンのvSwitchを選択します。

    spec.listeners

    不可

    ALBインスタンスのリスナーポートとプロトコル。 このトピックの例では、ポート8001でHTTPリスナーを構成します。

    リスナーは、ALBがトラフィックを受信する方法を定義します。 リスナーの構成を保持することを推奨します。 それ以外の場合は、ALB Ingressを使用する前にリスナーを作成する必要があります。

  3. 次のコマンドを実行してgateway.yamlファイルをデプロイし、ALBマルチクラスタゲートウェイとIngressClassを作成します。

    kubectl apply -f gateway.yaml
  4. 次のコマンドを実行して、ALBマルチクラスタゲートウェイが1〜3分以内に作成されるかどうかを確認します。

    kubectl get albconfig ackone-gateway-demo

    期待される出力:

    NAME      		      ALBID      DNSNAME                               PORT&PROTOCOL   CERTID   AGE
    ackone-gateway-demo           alb-xxxx   alb-xxxx.<regionid>.alb.aliyuncs.com                           4d9h
  5. 次のコマンドを実行して、関連付けられているクラスターがゲートウェイに接続されているかどうかを確認します。

    kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

    期待される出力は、クラスターIDのリストです。

ステップ2: Ingressを使用してさまざまなシナリオでトラフィックをスケジュールする

IngressのIngressClassをALB Ingressに設定してALB Ingressを作成し、異なるアノテーションを持つトラフィック管理機能を使用できます。 ALB Ingressは、一般的に使用されるNginx-Ingressのアノテーションをサポートし、ALBインスタンスに拡張機能を提供します。 ALB Ingressの設定の詳細については、「ALB Ingress GlobalConfigurationディクショナリ」をご参照ください。 次の例では、マルチクラスタトラフィック管理の使用シナリオについて説明します。

例1: 負荷分散を使用して、デフォルトですべてのバックエンドポッドにトラフィックを分散する

レプリカの数に基づいてトラフィックを異なるクラスターに分配します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

例2: 指定されたクラスターのみにトラフィックを分配する

alb.ingress.kubernetes.io/cluster-weight.{clusterID} アノテーションを使用してクラスターを指定します。 指定されたクラスターが存在しない場合、システムはクラスターをスキップします。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/cluster-weight.c63a55242bdb342ed9cbd3ab3b1a9904c: "100"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

例3: ヘッダーに一致するトラフィックを指定されたクラスターに分配する

  • aalb.ingress.kubernetes.io/cluster-weight.{clusterID} アノテーションを使用してクラスターを指定します。 指定されたクラスターが存在しない場合、システムはクラスターをスキップします。

  • alb.ingress.kubernetes.io/condition.{backend.service.name} アノテーションを使用して、リクエストヘッダーパラメーターを設定します。 リクエストヘッダーに基づいてトラフィックルーティングを制御できます。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/conditions.service1: |
     [{
       "type": "Header",
       "headerConfig": {
          "key":"stage",
           "values": [
              "gray"
           ]
       }
      }]
    alb.ingress.kubernetes.io/cluster-weight.c63a55242bdb342ed9cbd3ab3b1a9904c: "100"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

例4: 重みに基づいてトラフィックを分配する

alb.ingress.kubernetes.io/cluster-weightアノテーションを使用して、トラフィックを複数のバックエンドサービスに分散します。 重みの合計は100に等しくなければなりません。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/cluster-weight.c63a55242bdb342ed9cbd3ab3b1a9904c: "60"
    alb.ingress.kubernetes.io/cluster-weight.cd174e5d9394b4b4a8728f08d16203793: "40"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80