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

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

最終更新日:Oct 31, 2024

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

前提条件

シナリオ1: クラスター内のサービスとクラスター外のエンドポイントへのトラフィックの配布

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

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

  2. サービスの作成時にSLBインスタンスを選択します。

    コンソールの使用

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

    kubectlを使う

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

    apiVersion: v1
    種類: サービス
    メタデータ:
      アノテーション:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${LB_ID} # ${LB_ID} をSLBインスタンスのIDに置き換えます。 
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"# 値をtrueに設定して、リスナーとvServerグループを自動的に作成します。 
      ラベル:
        #...
      name: #...
    spec:
      #...
    重要

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

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

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

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

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

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

image
重要
  • 異なる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}" # Replace ${YOUR_LB_ID} with the ID of the SLB instance. 
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "${YOUR_VGROUP_ID}:{PORT}" # Replace ${YOUR_VGROUP_ID} with the ID of the vServer group and {PORT} with the port of the Service. 
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100" # This annotation is optional. This annotation specifies the weights of the backend pods of the Service. Valid values: 1 to 1000. Default value: 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グループに自動的に追加または削除されます。 他のアプリケーションに属するポッドは影響を受けません。

    重要

    対応する注釈を追加してサービスの重みを設定した場合、変更をサービスに同期できないため、コンソールで重みを変更しないでください。

関連ドキュメント