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

Container Service for Kubernetes:Service の問題のトラブルシューティング

最終更新日:Nov 09, 2025

このトピックでは、LoadBalancer Service の問題を診断およびトラブルシューティングする方法について説明します。

背景情報

Service タイプをType=LoadBalancer に設定すると、ACK Cloud Controller Manager (CCM) コンポーネントは、Service 用に Alibaba Cloud Classic Load Balancer (CLB) インスタンスを自動的に作成または設定します。これには、CLB インスタンス、リスナー、バックエンドサーバーグループなどのリソースが含まれます。CLB の自動更新ポリシーの詳細については、「Service の Server Load Balancer 設定に関する注意事項」をご参照ください。

診断プロセス

CCM コンポーネントのバージョンが V1.9.3.276-g372aa98-aliyun 以降であることを確認してください。CCM コンポーネントのアップグレード方法の詳細については、「CCM コンポーネントのアップグレード」をご参照ください。CCM のリリースノートについては、「Cloud Controller Manager」をご参照ください。

  1. 次のコマンドを実行して、CLB インスタンスに関連付けられている Service を特定します。

    kubectl get svc -A |grep -i LoadBalancer|grep {XXX.XXX.XXX.XXX}  # XXX.XXX.XXX.XXX はロードバランサーの IP アドレスです。
  2. 次のコマンドを実行して、Service にエラーイベントがあるかどうかを確認します。

    kubectl -n {your-namespace} describe svc {your-svc-name}

Service のエラーイベントと解決策

次の表に、さまざまなエラーメッセージの解決策を示します。

エラーメッセージ

説明と解決策

The backend server number has reached the quota limit of this load balancer

CLB インスタンスのバックエンドサーバー数がクォータ制限に達しました。

解決策: 次のいずれかの方法でクォータの使用量を最適化します。

  • デフォルトでは、CLB インスタンスには最大 200 のバックエンドサーバーをアタッチできます。クォータの増加をリクエストできます。クォータをクエリして増加させるには、SLB クォータ管理ページにログインします。

  • externalTrafficPolicy: Local を設定して、CLB インスタンスの外部トラフィックポリシーを Local モードに設定します。Cluster モードはクォータを急速に消費します。Cluster モードを使用する場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label ラベルを使用して、使用する仮想サーバーを指定します。これにより、クォータの消費が削減されます。アノテーションを使用してバックエンド仮想サーバーをラベルに関連付ける方法の詳細については、「アノテーションを使用した Classic Load Balancer (CLB) インスタンスの設定」をご参照ください。

  • 複数の Service が CLB インスタンスを再利用する場合、バックエンドサーバーの数は累積されます。Service を作成するときに、新しい CLB インスタンスを作成します。

The load balancer does not support backend servers of the ENI type

共有 CLB インスタンスは ENI をサポートしていません。

解決策: CLB バックエンドが ENI を使用する場合は、パフォーマンス専有型 CLB インスタンスを選択する必要があります。Service に annotation: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small" アノテーションを追加できます。

重要

アノテーションが CCM バージョンと互換性があることを確認してください。アノテーションと CCM バージョンのマッピングの詳細については、「アノテーションを使用した Classic Load Balancer (CLB) インスタンスの設定」をご参照ください。

There are no available nodes for the LoadBalancer

CLB インスタンスにバックエンドサーバーがありません。Service が Pod に関連付けられているか、Pod が期待どおりに実行されているかを確認してください。

解決策:

  • Pod が関連付けられていない場合は、Service をアプリケーション Pod に関連付けます。

  • 関連付けられた Pod が異常な場合は、Pod の問題を特定して解決します。詳細については、「Pod の問題のトラブルシューティング」をご参照ください。

  • CLB インスタンスにバックエンドサーバーがなく、Pod が期待どおりに実行されている場合は、Pod がマスターノード上にあるかどうかを確認します。もしそうなら、アプリケーション Pod をワーカーノードに退避させます。

  • alicloud: unable to find the load balancer named [%s] in OpenAPI, but it is defined in service.loadbalancer.ingress. This may happen when you remove the loadbalancerid annotation.

  • alicloud: cannot find the load balancer, but it is defined in service

CLB インスタンスは Service に基づいて関連付けることができません。

解決策: Server Load Balancer コンソールにログインします。Service が存在するリージョンで、Service の EXTERNAL-IP に基づいて CLB インスタンスを検索します。

  1. CLB インスタンスが見つからず、Service が不要になった場合は、Service を削除します。

  2. CLB インスタンスが存在する場合は、次の手順を実行します。

    1. CLB インスタンスが CLB コンソールで手動で作成された場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションを Service に追加します。詳細については、「アノテーションを使用した Classic Load Balancer (CLB) インスタンスの設定」をご参照ください。

    2. CLB インスタンスが CCM によって自動的に作成された場合は、CLB インスタンスに [kubernetes.do.not.delete] ラベルがあるかどうかを確認します。ない場合は、ラベルを追加します。詳細については、「以前のバージョンの CCM を使用している場合、SLB インスタンスの名前を変更するにはどうすればよいですか?」をご参照ください。

ORDER.ARREARAGE Message: The account is in arrears.

アカウントに支払い遅延があります。

PAY.INSUFFICIENT_BALANCE Message: Your account does not have a sufficient balance.

アカウントの残高が不足しています。

Status Code: 400 Code: Throttlingxxx

CLB OpenAPI がスロットリングされています。

解決策:

  1. SLB クォータ管理ページにログインして、CLB クォータが十分であることを確認します。

  2. 次のコマンドを実行して、クラスター Service にエラーがあるかどうかを確認します。エラーが存在する場合は、この表の説明に従ってイベントを解決します。

    kubectl -n {your-namespace} describe svc {your-svc-name}

Status Code: 400 Code: RspoolVipExist Message: There are VIPs associated with this vServer group.

vServer グループに関連付けられているリスナーは削除できません。

解決策:

  1. Service のアノテーションに CLB インスタンスの ID が含まれているかどうかを確認します (例: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-clb-id})。

    アノテーションに CLB インスタンス ID が含まれている場合、CLB インスタンスは再利用されます。

  2. CLB コンソールで、Service の port に対応するリスナーを削除します。CLB リスナーの削除方法の詳細については、「リスナー転送ルールの設定」をご参照ください。

Status Code: 400 Code: NetworkConflict

このエラーは、クラスターと同じ VPC にない内部向け CLB インスタンスを再利用した場合に発生します。

解決策: CLB インスタンスとクラスターが同じ VPC にあることを確認してください。

Status Code: 400 Code: VSwitchAvailableIpNotExist Message: The specified VSwitch has no available IP addresses.

vSwitch の利用可能な IP アドレスの数が不足しています。

解決策: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}" を使用して、同じ VPC 内の別の vSwitch を指定します。

The specified Port must be between 1 and 65535.

ENI モードは targetPort の文字列値をサポートしていません。

解決策: Service YAML ファイルの targetPort フィールドの値を整数に変更するか、CCM をアップグレードします。CCM のアップグレード方法の詳細については、「CCM コンポーネントのアップグレード」をご参照ください。

Status Code: 400 Code: ShareSlbHaltSales Message: The shared instance has been discontinued.

以前のバージョンの CCM は、デフォルトで共有 CLB インスタンスを作成します。ただし、共有 CLB インスタンスは廃止されました。

解決策: CCM コンポーネントをアップグレードします

cannot change ResourceGroupId once created

CLB インスタンスのリソースグループは、インスタンスの作成後に変更することはできません。

解決策: Service から service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id:"rg-xxxx" アノテーションを削除します。

cannot find the ENI ID for IP x.x.x.x in VPC vpc-xxxx

VPC で指定された ENI IP アドレスが見つかりません。

解決策: Service で service.beta.kubernetes.io/backend-type: eni アノテーションが設定されているかどうかを確認します。設定されている場合は、クラスターネットワークプラグインが Flannel であるかどうかを確認します。Flannel ネットワークモードは ENI モードをサポートしていません。この場合は、Service からアノテーションを削除します。

  • The operation is not allowed because the instanceChargeType of the load balancer is PayByCLCU.

  • The user does not have permission to modify InstanceChargeType to spec.

CLB インスタンスの課金方法を従量課金からスペック保証型に変更することはできません。

解決策:

  • Service から service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec アノテーションを削除します。

  • Service に service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type アノテーションが含まれている場合は、その値を PayByCLCU に設定します。

SyncLoadBalancerFailed: The load balancer xxx cannot be reused. Cannot reuse a load balancer created by Kubernetes.

このエラーは、CCM によって作成された CLB インスタンスが再利用されるときに発生します。

解決策:

  1. Service YAML ファイルの service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションに対応する CLB ID を表示します。

  2. Service のステータスに基づいてエラーを解決します。

    • Service が保留中の状態である場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの CLB ID を、Classic Load Balancer (CLB) コンソールで手動で作成した CLB インスタンスの ID に置き換えます。

    • Service が保留中の状態でない場合は、次の手順を実行します。

      • CLB インスタンスの IP アドレスが Service の外部 IP アドレスと同じである場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションを削除します。

      • CLB インスタンスの IP アドレスが Service の外部 IP アドレスと一致しない場合は、Classic Load Balancer (CLB) コンソールにログインします。クラスターのリージョンで、Service の外部 IP アドレスに基づいて対応する CLB インスタンスを見つけ、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの CLB ID を変更します。対応する CLB インスタンスが見つからない場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの CLB ID を CLB コンソールで手動で作成した CLB インスタンスの ID に変更し、Service を再作成します。

alicloud: cannot change LoadBalancer AddressType once created. Delete and retry.

CLB インスタンスのタイプは、インスタンスの作成後に変更することはできません。このエラーは、Service の作成後に CLB タイプを変更した場合に発生します。

解決策: Service を削除して再作成します。

The load balancer lb-xxxxx cannot be reused. The service has been associated with the IP address [xxx.xxx.xxx.xxx] and cannot be bound to the IP address [xxx.xxx.xxx.xxx].

Service はすでに CLB インスタンスにアタッチされており、別のインスタンスにアタッチすることはできません。

解決策: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの CLB ID を変更して既存の CLB インスタンスを再利用することはできません。アタッチされている CLB インスタンスを変更するには、Service を削除して再作成する必要があります。

トラブルシューティング方法

Service エラーではない問題については、次の表の説明に従ってトラブルシューティングを行ってください。

問題のカテゴリ

症状

ソリューション

CLB アクセスの問題

CLB バックエンド間の負荷分散が不均一

CLB バックエンド間の負荷分散が不均一

アプリケーションの更新中に CLB インスタンスにアクセスすると 503 エラーが発生する

アプリケーションの更新中に CLB インスタンスにアクセスすると 503 エラーが発生する

クラスター内から CLB インスタンスにアクセスできない

クラスター内から CLB インスタンスにアクセスできない

クラスター外から CLB インスタンスにアクセスできない

クラスター外から CLB インスタンスにアクセスできない

HTTPS ポートにアクセスすると「The plain HTTP request was sent to HTTPS port」というエラーが発生する

バックエンド HTTPS Service に接続できない

CLB の設定クラス

Service アノテーションが有効にならない

Service アノテーションが有効にならない場合はどうすればよいですか?

CLB 設定が変更される

CLB インスタンスの設定が変更されるのはなぜですか?

既存の CLB インスタンスの再利用が有効にならない

Service のよくある質問

既存の CLB インスタンスを再利用する際にリスナーが設定されない

既存の CLB インスタンスを再利用する際にリスナーが設定されないのはなぜですか?

CLB バックエンドの不整合

SLB vServer グループが更新されない場合はどうすればよいですか?

CLB 削除の問題

CLB インスタンスが削除される

SLB インスタンスはいつ自動的に削除されますか?

Service の削除後に CLB インスタンスが削除されない

SLB インスタンスはいつ自動的に削除されますか?

CLB バックエンド間の負荷分散が不均一

原因

CLB インスタンスのスケジューリングアルゴリズムが正しく設定されていません。

症状

CLB インスタンスのバックエンドサーバー間で負荷が不均一に分散されます。

解決策

  • Local モード (externalTrafficPolicy: Local) の Service の場合、CLB スケジューリングアルゴリズムを重み付きラウンドロビンに設定します。これを行うには、Service に service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wrr" アノテーションを追加します。

  • アプリケーションが持続的接続を使用している場合、各接続で複数のリクエストが送信されるため、負荷が不均衡になる可能性があります。この場合、Service に service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wlc" アノテーションを追加して、CLB スケジューリングアルゴリズムを重み付き最小接続に設定します。

アプリケーションの更新中に CLB インスタンスにアクセスすると 503 エラーが発生する

原因

CLB リスナーに接続ドレインが設定されていないか、Pod に正常な終了が設定されていません。

症状

アプリケーションの更新中に CLB インスタンスにアクセスすると、503 エラーが返されます。

解決策

  1. service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain などのアノテーションを使用して、CLB リスナーの接続ドレインを設定します。アノテーションの詳細については、「一般的なリスナー操作」をご参照ください。

  2. コンテナーネットワークモードに基づいて、Pod の preStopreadinessProbe を設定します。

    • readinessProbe は readiness プローブです。Pod は、readiness プローブに合格した後にのみ Endpoint に追加されます。ACK は Endpoint の変更を検出した後、ノードを CLB インスタンスのバックエンドにアタッチします。readinessProbe のプローブ周波数、遅延、および異常しきい値を適切に設定する必要があります。一部のアプリケーションは起動に時間がかかります。タイムアウト期間が短すぎると、Pod が繰り返し再起動する可能性があります。

    • preStop 期間を、アプリケーションが残りのすべてのリクエストを処理するのに必要な時間に設定します。terminationGracePeriodSeconds 期間を、preStop 期間より少なくとも 30 秒長い値に設定します。

    Pod 設定例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: default
    spec:
      containers:
      - name: nginx
        image: nginx
        # Liveness プローブ
        livenessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 30
          successThreshold: 1
          tcpSocket:
            port: 5084
          timeoutSeconds: 1
        # Readiness プローブ
        readinessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 30
          successThreshold: 1
          tcpSocket:
            port: 5084
          timeoutSeconds: 1
        # 正常な終了
        lifecycle:
          preStop:
            exec:
              command:
              - sleep
              - 30
      terminationGracePeriodSeconds: 60

クラスター内から CLB インスタンスにアクセスできない

原因

Service に externalTrafficPolicy: Local 設定が構成されています。この設定を使用すると、kube-proxy はローカルエンドポイントにのみトラフィックを転送します。Service のバックエンド Pod がないノードからリクエストが送信された場合、リクエストは失敗します。CLB アドレスはクラスター外からのアクセスを目的としていますが、クラスター内からのリクエストは、このポリシーに基づいて kube-proxy によってルーティングされます。

リクエストを受信したノードに Service のバックエンド Service Pod が存在しない場合、ネットワーク接続障害が発生します。ノードにバックエンド Service Pod が存在する場合、アクセスは成功します。この問題の詳細については、「kube-proxy adds external-lb address to node-local iptables rule」をご参照ください。

症状

クラスター内から CLB インスタンスにアクセスできません。

解決策

  • Kubernetes クラスター内から、ClusterIP または Service 名を使用して Service にアクセスします。

    Ingress の Service 名は nginx-ingress-lb.kube-system です。

  • LoadBalancer Service の externalTrafficPolicy の値を Cluster に変更します。ただし、これによりアプリケーションでソース IP アドレスが失われます。次のコマンドは、Ingress Service を変更する方法を示しています。

    説明

    Ingress CLB インスタンスを使用する場合、Pod は Ingress Pod が存在するノード上でのみ、Ingress または CLB インスタンスを介して公開されている Service にアクセスできます。

    kubectl edit svc nginx-ingress-lb -n kube-system
  • クラスターが ENI または ENI ごとに複数の IP アドレスを持つ Terway を使用している場合は、LoadBalancer Service の externalTrafficPolicy の値を Cluster に変更し、ENI パススルーのアノテーション (例: annotation: service.beta.kubernetes.io/backend-type: "eni") を追加できます。次のコードに例を示します。このメソッドはソース IP アドレスを保持し、問題なくクラスター内から Service にアクセスできるようにします。詳細については、「アノテーションを使用した Classic Load Balancer (CLB) インスタンスの設定」をご参照ください。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/backend-type: eni
      labels:
        app: nginx-ingress-lb
      name: nginx-ingress-lb
      namespace: kube-system
    spec:
      externalTrafficPolicy: Cluster

クラスター外から CLB インスタンスにアクセスできない

原因

CLB インスタンスにアクセス制御リスト (ACL) が設定されているか、CLB インスタンスが期待どおりに実行されていません。

症状

クラスター外から CLB インスタンスにアクセスできません。

解決策

  1. 次のコマンドを実行して Service イベント情報を表示し、エラーイベントを解決します。詳細については、「Service のエラーイベントと解決策」をご参照ください。

    kubectl -n {your-namespace} describe svc {your-svc-name}
  2. CLB インスタンスに ACL が設定されているかどうかを確認します。

    ACL が設定されている場合は、ACL がクライアント IP アドレスからのアクセスを許可しているかどうかを確認します。CLB ACL 設定の詳細については、「Resource Access Management」をご参照ください。

  3. CLB vServer グループが空かどうかを確認します。

    vServer グループが空の場合は、アプリケーション Pod が Service に関連付けられているか、アプリケーション Pod が期待どおりに実行されているかを確認します。関連付けられた Pod が異常な場合は、Pod の問題を特定して解決します。詳細については、「Pod の問題のトラブルシューティング」をご参照ください。

  4. CLB リスナーのヘルスチェックが正常かどうかを確認します。

    CLB ヘルスチェックが異常な場合は、アプリケーション Pod が期待どおりに実行されているかどうかを確認します。CLB ヘルスチェックの問題の詳細については、「CLB ヘルスチェックのよくある質問」をご参照ください。

バックエンド HTTPS Service に接続できない

原因

CLB インスタンスで証明書を設定すると、CLB インスタンスで復号が実行されます。その結果、バックエンド Pod に送信されるリクエストは HTTP リクエストになります。

症状

バックエンド HTTPS Service に接続できません。

解決策

Service の HTTPS ポートに対応する targetPort を HTTP ポートに設定します。たとえば、Nginx が HTTPS ポート 443 を使用する場合、対応する targetPort80 に変更する必要があります。

設定例:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  - port: 443
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer