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

Container Service for Kubernetes:Service の負荷分散設定に関する考慮事項と CCM のリソース更新ポリシー

最終更新日:Apr 21, 2026

Type=LoadBalancer を指定して Service タイプを LoadBalancer に設定すると、Container Service for Kubernetes (ACK) の Cloud Controller Manager (CCM) コンポーネントが、その Service 用に Server Load Balancer (SLB) インスタンスを作成または設定します。このインスタンスには、クラシックロードバランサー (CLB) または Network Load Balancer (NLB) を使用できます。設定には、インスタンス、リスナー、バックエンドサーバーグループなどのリソースが含まれます。このトピックでは、Service の負荷分散設定に関する考慮事項と、CCM のリソース更新ポリシーについて説明します。

考慮事項

再利用可能な SLB インスタンス

  • 再利用できるのは、Server Load Balancer コンソールで作成されたインスタンスのみです。cloud-controller-manager によって自動的に作成された SLB インスタンスや、API サーバーで使用されるインスタンスなど、ACK が管理する他の SLB インスタンスは再利用できません。

  • ACK クラスターで非公開 SLB インスタンスを再利用するには、そのインスタンスが ACK クラスターと同じ VPC 内にある必要があります。VPC をまたいだ再利用は、NLB インスタンスにのみ適用されます。

  • 再利用する SLB インスタンスのアドレスタイプは、Service のアクセスタイプと一致している必要があります。Service が パブリックアクセス (アノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet" を使用) に設定されている場合、SLB インスタンスの IP バージョンインターネット である必要があります。Service が内部アクセス (アノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" を使用) に設定されている場合、SLB インスタンスの IP バージョンプライベートネットワーク である必要があります。

  • 複数の Service で、同じ SLB インスタンスの同じリスナーポートを使用することはできません。

  • クラスター間で既存の SLB インスタンスを再利用する場合、各クラスターで名前空間と Service 名の組み合わせが一意であることを確認してください。

CCM が管理する SLB インスタンスに関する考慮事項

  • CCM は、Type=LoadBalancer の Service に対してのみ負荷分散を設定します。他のタイプの Service に対しては負荷分散を設定しません。

  • 重要

    Type=LoadBalancer の Service が LoadBalancer 以外のタイプに変更された場合、CCM は SLB インスタンスに追加された設定を削除します。その結果、Service は SLB インスタンス経由でアクセスできなくなります。

  • CCM は宣言的な API を使用し、特定の条件下で Service の設定に基づいて SLB の設定を自動的に更新します。Server Load Balancer コンソールで変更した設定は、上書きされるリスクがあります。

  • 重要

    Server Load Balancer コンソールで、ACK によって作成およびメンテナンスされる SLB インスタンスの設定を手動で変更しないでください。変更した場合、設定が失われ、Service にアクセスできなくなる可能性があります。

  • Service の service.k8s.alibaba/resources または service.k8s.alibaba/nlb ファイナライザーを手動で削除または変更しないでください。ファイナライザーを手動で変更すると、CLB または NLB のリソースが正しく回収されなくなる可能性があります。

  • Cloud Controller Manager のバージョンが v2.5.0 以降の場合、コンソールで Service を作成する際に CLB インスタンスを指定するオプションはホワイトリスト機能です。この機能を使用するには、クォータセンタープラットフォームでリクエストを送信する必要があります。

クラスター内から LoadBalancer Service の外部 IP にアクセスする場合の考慮事項

ネットワークプラグインのタイプ、ネットワークプラグインのバージョン、およびクラスターのバージョンによっては、クラスター内から LoadBalancer Service に関連付けられた SLB の IP アドレスにアクセスすると、クラスターネットワークがノード上のトラフィックをインターセプトし、バックエンドのサービスエンドポイントに直接転送する場合があります。

このプロセスは、外部の SLB インスタンスをバイパスします。これにより、SLB インスタンスに依存する特定の設定が失敗し、アクセスに関する問題が発生する可能性があります。影響を受ける主なシナリオは次のとおりです。

  • externalTrafficPolicyLocal に設定されている場合:トラフィックがバックエンド Pod のないノードに転送されるため、アクセスに失敗する可能性があります。

  • Proxy Protocol が有効になっている場合:バックエンドサービスは SLB インスタンスによって追加された Proxy Protocol ヘッダーを取得できず、プロトコルのハンドシェイクに失敗します。

  • HTTP/HTTPS リスナーを使用している場合:TLS 終端や X-Forwarded-For などの特定のヘッダーの追加など、SLB インスタンスに依存する操作は効果がありません。

したがって、クラスター内から LoadBalancer Service にアクセスするには、次の方法があります。

  • Service のクラスター内アドレスを使用します。これは、より標準的で安定した方法です。クラスター内のサービス間通信には、Service の ClusterIP またはその DNS 名 (例:<service-name>.<namespace>.svc.cluster.local) を使用します。

  • SLB のエントリーポイントを使用するには、ホスト名経由でアクセスします。Service に service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname アノテーションを追加し、IP アドレスの代わりに設定されたドメイン名を使用してアクセスします。これにより、トラフィックが正しく処理されるようになります。アノテーションの詳細については、「Service のホスト名を設定する」をご参照ください。

    重要

    この機能を使用して SLB インスタンスをバイパスしてアクセスする場合、クライアント Pod とサーバー側の Pod を同じノードにスケジュールしないでください。そうしないと、非対称ルーティングの問題によりアクセスに失敗する可能性があります。

単一クラスター内で CCM を使用した大規模な負荷分散を管理する場合の考慮事項

クラスターが大規模な場合、CCM が Service イベントを処理する能力には制限があります。次のシナリオでは、SLB インスタンスの作成や削除、サーバーグループ内のエンドポイントの更新などの操作が遅延する可能性があります。

  • 多数の LoadBalancer Service が同時に作成または削除される場合。

  • 多くのサービスエンドポイントが同時に更新されます。

  • 多数の LoadBalancer Service が存在する状態で、ノードがバッチで追加または削除される場合。

次の点にご注意ください。

  • 容量評価の実施:大規模な変更を行う前に、容量評価とストレステストを実施してください。遅延によるビジネスの中断を防ぐために、十分な処理マージンを確保してください。

  • 変更中のトラフィックの安定性の確保:readinessGatespreStop フックなどの設定を使用して、ビジネスの変更中にトラフィックが中断されないようにします。詳細については、「ゼロダウンタイムのローリングデプロイを実装する」をご参照ください。

  • クォータ制限の遵守:多数の LoadBalancer Service を使用する場合は、CLB または NLB のクォータ制限に特に注意してください。詳細については、「クォータ制限」をご参照ください。

  • コンポーネントの最新化:クラスターと CCM を最新バージョンにアップグレードして、大規模クラスターシナリオ向けの継続的な最適化の恩恵を受けてください。

Service の SLB インスタンスの置き換え方法

既存の LoadBalancer Service の SLB インスタンスを再利用または置き換えることはできません。SLB インスタンスを置き換えるには、Service を削除してから再作成する必要があります。

クォータ制限

VPC

Server Load Balancer

  • CCM は、Type=LoadBalancer の Service ごとに SLB インスタンスを作成します。デフォルトでは、最大 60 個の CLB インスタンスと 60 個の NLB インスタンスを持つことができます。このクォータを増やすには、Quota Centerコンソールにログインしてアプリケーションを送信

  • CCM は、Service の設定に基づいて、ECS インスタンスまたは Elastic Network Interface (ENI) を SLB インスタンスのバックエンドサーバーグループにアタッチします。また、Service 内の異なる targetPort ごとに個別のサーバーグループを作成します。次のクォータ制限にご注意ください。

    • バックエンドサーバーの数:デフォルトでは、CLB インスタンスには最大 200 台のバックエンドサーバーを、NLB インスタンスには最大 400 台の ECS、ENI、または IP ベースのバックエンドサーバーをアタッチできます。必要なクォータは次のように計算されます:バックエンドサーバーの数 × targetPort の数。クォータを増やすには、事前にQuota Centerコンソールにログインしてアプリケーションを送信

    • インスタンスがサーバーグループにアタッチできる回数:デフォルトでは、同じ ECS インスタンスまたは ENI は、CLB インスタンスの最大 50 の異なるバックエンドサーバーグループ、および NLB インスタンスの最大 200 の異なるバックエンドサーバーグループにアタッチできます。より多くのサーバーグループにアタッチするには、Quota Centerコンソールにログインしてアプリケーションを送信

    • ローリングアップデート中の追加クォータ使用量:ローリングアップデート中、古い Pod が削除される前に新しい Pod が作成されます。これにより、追加のクォータが消費されます。実際の消費量は予想を超える可能性があります。事前に十分なクォータを確保してください。

  • CCM は、Service で定義されたポートに基づいてリスナーを作成します。デフォルトでは、CLB または NLB インスタンスに最大 50 個のリスナーを追加できます。リスナーをさらに追加するには、Quota Centerコンソールにログインしてアプリケーションを送信

  • SLB の制限の詳細については、「CLB の制限」および「NLB の制限」をご参照ください。

    SLB のクォータをクエリするには、「Server Load Balancer クォータ管理」をご参照ください。

SLB インスタンスの更新ポリシー

ACK では、Service に既存の SLB インスタンスを指定するか、CCM に新しいインスタンスを自動的に作成させることができます。これら 2 つの方法のリソース更新ポリシーは、次の表に示すように異なります。

リソースオブジェクト

既存の SLB インスタンスを指定

CCM が管理する SLB インスタンス

Server Load Balancer

アノテーションを設定:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

  • CCM はこのインスタンスを Service のロードバランサーとして使用します。他のアノテーションに基づいて SLB インスタンスを設定し、複数の vServer グループを自動的に作成します。

  • Service が削除されても、CCM は ID で指定した既存の SLB インスタンスを削除しません。

  • CCM は、Service の設定に基づいて、SLB インスタンス、リスナー、vServer グループなどのリソースを自動的に作成および設定します。これらのリソースはすべて CCM によって管理されます。

  • Service が削除されると、CCM は自動的に作成された SLB インスタンスを削除します。

リスナー

アノテーションを設定:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners

  • "false" に設定した場合、CCM は SLB インスタンスのリスナー設定を一切管理しません。

  • "true" に設定した場合、CCM は Service の設定に基づいてリスナーを管理します。リスナーが既に存在する場合、CCM はそれを上書きします。

CCM は、Service の設定に基づいてリスナーポリシーを自動的に作成および設定します。

バックエンドサーバーグループ

Service に対応するバックエンドのエンドポイントまたはクラスターノードが変更されると、CCM は SLB インスタンスのバックエンド vServer グループを自動的に更新します。

  • Terway ネットワークプラグインの場合、CCM はデフォルトで ECS ノードをアタッチする代わりに、Pod の IP を SLB インスタンスのバックエンドにアタッチします。

  • Flannel ネットワークプラグインの場合、バックエンドサーバーグループの更新ポリシーは Service モードによって異なります。

    • クラスターモード (spec.externalTrafficPolicy = Cluster):デフォルトでは、BackendLabel タグを使用してバックエンドを設定しない限り、CCM はすべてのノードを SLB インスタンスのバックエンドにアタッチします。

      重要

      SLB インスタンスには、各 ECS インスタンスが使用できる SLB インスタンスの数にクォータ制限があります。この方法ではクォータを急速に消費します。クォータが枯渇すると、Service の調整に失敗します。この問題を解決するには、ローカルモードの Service を使用してください。

    • ローカルモード (spec.externalTrafficPolicy = Local):デフォルトでは、CCM は Service の Pod が配置されているノードのみを SLB インスタンスのバックエンドに追加します。これにより、SLB クォータの消費が削減され、レイヤー 4 のソース IP 保持がサポートされます。

  • Flannel ネットワークプラグインの場合、CCM はマスターノードを SLB インスタンスのバックエンドとして追加しません。

  • Flannel ネットワークプラグインの場合、CCM はデフォルトでドレイン済み (kubectl drain) またはスケジュール不可 (kubectl cordon) のノードを SLB インスタンスのバックエンドから削除しません。これらのノードを削除するには、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-remove-unscheduled-backendon に設定します。

Service の削除保護の有効化

重大なビジネス運用や機密データに関わる Service に対して削除保護を有効にすることで、誤った削除やそれに伴うメンテナンスコストを防ぐことができます。この機能を有効にすると、対応するリソースは、手動で削除保護を無効にした後にのみ削除できます。Service の削除保護を有効にする方法の詳細については、「Service の削除保護の有効化」をご参照ください。