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

Container Service for Kubernetes:異なる ACK クラスタのサービスを公開するために既存の SLB インスタンスを再利用する

最終更新日:Mar 25, 2025

ディザスタリカバリ機能、信頼性、またはセキュリティ分離を強化するために、複数のクラスタにサービスをデプロイできます。このシナリオでは、すべてのバックエンド サービスが LoadBalancer タイプの場合、複数の Server Load Balancer (SLB) インスタンスが使用され、リソースの浪費につながります。 cloud-controller-manager コンポーネントを使用して、既存の SLB インスタンスをクラスタ内およびクラスタ外のエンドポイントにマウントできます。これにより、単一の SLB インスタンスで異なるクラスタのサービスを公開し、サービスの重みを設定できます。

前提条件

シナリオ 1: クラスタ内のサービスとクラスタ外のエンドポイントへのトラフィックを分散する

これを行うには、クラスタ内のサービスと、Elastic Compute Service (ECS) インスタンスなどのクラスタ外のエンドポイントを、同じ SLB インスタンスにマウントします。

  1. CLB コンソール または NLB コンソール にログインし、既存の SLB インスタンスの ID を確認します。

  2. サービスを作成するときに、SLB インスタンスを選択します。

    コンソールの使用

    ACK コンソール でサービスを作成する際に、[サービスの種類][SLB] に設定し、[既存のリソースを使用] を選択します。次に、ドロップダウン リストから SLB インスタンスを選択し、既存リスナーの上書き を選択します。

    kubectl の使用

    kubectl を使用してサービスを作成する場合は、アノテーションを追加して SLB インスタンスの ID を指定します。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${LB_ID} # SLB インスタンスの ID で ${LB_ID} を置き換えます。
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"  # 値を true に設定して、リスナーと vServer グループを自動的に作成します。
      labels:
        #...
      name: #...
    spec:
      #...
    重要

    サービスが作成されると、cloud-controller-manager は vServer グループと、vServer グループに関連付けられ、サービス ポートでリッスンするリスナーを SLB インスタンスに作成します。

  3. [CLB コンソール] または [NLB コンソール] にログオンします。クラスター外のエンドポイントを vServer グループに追加します。詳細については、「CLB vServer グループを作成および管理する」および「vServer グループを作成および管理する」をご参照ください。

    構成が完了すると、vServer グループでポッドと外部エンドポイントを見つけ、重みを設定できます。スケーリングアクティビティがトリガーされると、ポッドは vServer グループに自動的に追加または削除されます。スケーリングアクティビティは、外部エンドポイントには影響しません。

シナリオ 2: 異なる ACK クラスタのサービスにトラフィックを分散する

異なる ACK クラスタのサービスを同じ SLB インスタンスにマウントできます。 SLB インスタンスは、統合イングレスとして機能します。

サービスのバックエンド ポッドが変更されたときに SLB インスタンスのエンドポイントを自動的に更新するには、サービスが SLB インスタンスの同じリスナーと vServer グループを使用するように構成する必要があります。これを行うには、SLB インスタンスのリスナーと vServer グループを手動で作成し、vServer グループとサービス ポートでリッスンするリスナーを再利用するようにサービスを構成する必要があります。

重要
  • 異なる ACK クラスタのサービスは、同じポートを使用する必要があります。

  • 同じ名前空間にデプロイされている場合、サービスは異なる名前を持つ必要があります。

  1. [CLB コンソール] または [NLB コンソール] にログインし、SLB インスタンスのリスナーと vServer グループを作成します。詳細については、「CLB リスナー」、「CLB vServer グループの作成と管理」、「NLB リスナー」、および「サーバーグループの作成と管理」をご参照ください。

  2. サービスを作成するときに、手動で作成した vServer グループを再利用します。

    これを行うには、サービスにアノテーションを追加して、SLB インスタンスと vServer グループの ID を指定します。サービスの重みを設定することもできます。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LB_ID}" # ${YOUR_LB_ID} を SLB インスタンスの ID に置き換えます。
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "${YOUR_VGROUP_ID}:{PORT}" # ${YOUR_VGROUP_ID} を vServer グループの ID に、{PORT} をサービスのポートに置き換えます。
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100" # このアノテーションはオプションです。このアノテーションは、サービスのバックエンド ポッドの重みを指定します。有効な値: 1 ~ 1000。デフォルト値: 100。
      labels:
        #...
      name: #...
    spec:
      #...
    説明

    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port を複数のポートと vServer グループのマッピングに設定する場合は、マッピングをコンマ (,) で区切ります。例: "${YOUR_VGROUP_ID_1}:80, ${YOUR_VGROUP_ID_2}:443"。

    構成が完了すると、SLB コンソール の vServer グループでサービスのポッドを見つけることができます。アプリケーションがスケーリングされると、ポッドはアプリケーションの vServer グループに自動的に追加または削除されます。他のアプリケーションに属するポッドは影響を受けません。

    重要

    対応するアノテーションを追加してサービスの重みを設定した場合は、コンソールで重みを変更しないでください。変更はサービスに同期されないためです。

参照