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

Container Compute Service:サービスのトラブルシューティング

最終更新日:Dec 27, 2024

このトピックでは、LoadBalancerサービスの診断手順とエラーのトラブルシューティング方法について説明します。

背景情報

Type=LoadBalancer タイプのサービスを作成すると、Alibaba Cloud Container Compute Service (ACS) のクラウドコントローラーマネージャー (CCM) は、SLBインスタンス、リスナー、バックエンドサーバーグループを含む、サービスのサーバーロードバランサー (SLB) リソースを自動的に作成または構成します。SLBリソースの自動更新に使用されるポリシーの詳細については、LoadBalancerサービスを構成する際の考慮事項 を参照してください。

手順

トラブルシューティングを行う前に、CCMバージョンが1.9.3.276-g372aa98-aliyun以降であることを確認してください。CCMの更新方法の詳細については、CCMの更新 を参照してください。CCMのリリースノートの詳細については、クラウドコントローラーマネージャー を参照してください。

Service troubleshooting process

  1. 次のコマンドを実行して、SLBインスタンスに関連付けられているサービスをクエリします。

    kubectl get svc -A |grep -i LoadBalancer|grep ${XXX.XXX.XXX.XXX}  #XXX.XXX.XXX.XXX はSLBインスタンスのIPアドレスです。
  2. 次のコマンドを実行して、サービスエラーのイベントが生成されているかどうかを確認します。

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

    サービスエラーのイベントが生成されていない場合は、CMMバージョンが1.9.3.276-g372aa98-aliyun以降であることを確認してください。CCMの更新方法の詳細については、CCMの更新 を参照してください。

  3. エラーが解決しない場合は、ACS DingTalkグループに参加してテクニカルサポートを受けてください。

サービスエラーと解決策

次の表に、サービスで発生するエラーの修正方法を示します。

エラーメッセージ

説明と解決策

The loadbalancer does not support backend servers of eni type

共有リソースSLBインスタンスは、Elastic Network Interface (ENI) をサポートしていません。

解決策:ENIをバックエンドサーバーとして指定する場合は、高性能SLBインスタンスを作成します。annotation: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small" アノテーションをサービスに追加します。

重要

追加するアノテーションがCCMバージョンの要件を満たしていることを確認してください。アノテーションとCCMバージョンの相関関係については、サービスのYAMLファイルにアノテーションを追加してCLBインスタンスを構成する を参照してください。

There are no available nodes for LoadBalancer

SLBインスタンスにバックエンドサーバーが関連付けられていません。Podがサービスに関連付けられているかどうか、およびPodが正常に実行されているかどうかを確認してください。

解決策:

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

  • 関連付けられたPodが予期どおりに実行されていない場合は、異常なPodのトラブルシューティングを行います。詳細については、Podのトラブルシューティング を参照してください。

  • SLBインスタンスにバックエンドサーバーが関連付けられていないが、Podが正常に実行されている場合は、Podがマスターノードにデプロイされているかどうかを確認します。Podがマスターノードにデプロイされている場合は、Podをワーカーノードにエビクトします。Podがマスターノードにデプロイされていない場合は、ACS DingTalkグループに参加してテクニカルサポートを受けてください。

  • alicloud: not able to find loadbalancer named [%s] in openapi, but it's defined in service.loaderbalancer.ingress. this may happen when you removed loadbalancerid annotation

  • alicloud: can not find loadbalancer, but it's defined in service

システムがサービスをSLBインスタンスに関連付けることができません。

解決策:SLBコンソール にログインし、EXTERNAL-IP に基づいてサービスのリージョンにあるSLBインスタンスを検索します。

  1. SLBインスタンスが存在せず、サービスが使用されなくなった場合は、サービスを削除します。

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

    1. SLBインスタンスがSLBコンソールで作成されている場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションをサービスに追加します。詳細については、サービスのYAMLファイルにアノテーションを追加してCLBインスタンスを構成する を参照してください。

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

ORDER.ARREARAGE Message: The account is arrearage.

アカウントに延滞料金があります。

PAY.INSUFFICIENT_BALANCE Message: Your account does not have enough balance.

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

Status Code: 400 Code: Throttlingxxx

SLBのAPIスロットリングがトリガーされています。

解決策:

  1. SLBコンソールのクォータ管理ページ にアクセスし、SLBリソースクォータが十分であるかどうかを確認します。

  2. 次のコマンドを実行して、サービスでエラーが発生しているかどうかを確認します。サービスでエラーが発生している場合は、この表に記載されている情報に基づいてエラーをトラブルシューティングします。

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

Status Code: 400 Code: RspoolVipExist Message: there are vips associating with this vServer group.

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

解決策:

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

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

  2. SLBコンソールにログインし、サービスのポート を使用するリスナーを削除します。SLBリスナーの削除方法の詳細については、リスナーの転送ルールを管理する を参照してください。

Status Code: 400 Code: NetworkConflict

再利用された内部向けSLBインスタンスとクラスターが同じVirtual Private Cloud (VPC) にデプロイされていません。

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

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

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.

targetPort フィールドは、ENIモードではSTRINGタイプの値をサポートしていません。

解決策:サービスYAMLファイルの targetPort フィールドをINTEGERタイプの値に設定するか、CCMを更新します。CCMの更新方法の詳細については、CCMの更新 を参照してください。

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

デフォルトでは、以前のバージョンのCCMは、購入できなくなった共有リソースSLBインスタンスを自動的に作成します。

解決策:CCMを更新 します。

can not change ResourceGroupId once created

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

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

can not find eniid for ip x.x.x.x in vpc vpc-xxxx

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

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

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

  • User does not have permission modify InstanceChargeType to spec.

サービスで使用されているSLBインスタンスの課金方法を従量課金制から定額制に変更することはできません。

解決策:

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

  • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type がサービスに追加されている場合は、値を PayByCLCU に設定します。

SyncLoadBalancerFailed the loadbalancer xxx can not be reused, can not reuse loadbalancer created by kubernetes.

CCMによって作成されたSLBインスタンスが再利用されます。

解決策:

  1. 関連するサービスのYAMLファイルを確認し、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションにSLBインスタンスIDを記録します。

  2. サービスのステータスに基づいて問題をトラブルシューティングします。

    • サービスがPending状態の場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの値を、CLBコンソール で手動で作成されたSLBインスタンスのIDに変更します。

    • サービスがPending状態ではない場合は、次の操作を実行します。

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

      • SLBインスタンスのIPアドレスがサービスの外部IPアドレスと異なる場合は、CLBコンソール にログインし、クラスターが存在するリージョンを選択し、サービスの外部IPに基づいてSLBインスタンスを見つけ、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの値を手動で作成されたSLBインスタンスのIDに変更します。対応するSLBインスタンスが見つからない場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの値を、SLBコンソールで手動で作成されたSLBインスタンスのIDに変更します。次に、サービスを再作成します。

alicloud: can not change LoadBalancer AddressType once created. delete and retry

SLBインスタンスの作成後、そのタイプを変更することはできません。

解決策:関連するサービスを再作成します。

the loadbalancer lb-xxxxx can not be reused, service has been associated with ip [xxx.xxx.xxx.xxx], cannot be bound to ip [xxx.xxx.xxx.xxx]

既に別のSLBインスタンスに関連付けられているサービスにSLBインスタンスを関連付けることはできません。

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

トラブルシューティング

次の表に記載されている情報に基づいて、サービスエラー以外のエラーをトラブルシューティングできます。

カテゴリ

問題

解決策

SLBインスタンスへのアクセス時に発生する問題

SLBインスタンスがトラフィックを均等に分散しません。

SLBインスタンスがトラフィックを均等に分散しません

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

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

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

LoadBalancerサービスに関連付けられているSLBインスタンスのIPアドレスにクラスター内からアクセスできません

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

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

HTTPSポートにリクエストを送信すると、The plain HTTP request was sent to HTTPS port エラーが発生します

HTTPSポートにリクエストを送信するとエラーが発生します

SLB構成に関連する問題

サービスのアノテーションが有効になりません。

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

SLBインスタンスの構成が変更されています。

SLBインスタンスの構成が変更されるのはなぜですか?

システムが既存のSLBインスタンスを再利用できません。

システムが複数のサービスで既存のSLBインスタンスを使用できないのはなぜですか?

既存のSLBインスタンスを再利用すると、リスナーが作成されません。

既存のSLBインスタンスを再利用すると、リスナーが作成されないのはなぜですか?

サービスのエンドポイントが、SLBインスタンスのバックエンドサーバーに指定されたエンドポイントと異なります。

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

SLBの削除に関連する問題

SLBインスタンスが削除されます。

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

SLBインスタンスはサービスと一緒に削除されません。

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

SLBインスタンスがトラフィックを均等に分散しません

原因

SLBインスタンスに指定されたスケジューリングアルゴリズムが不適切です。

問題

トラフィックがSLBインスタンスのバックエンドサーバーに均等に分散されません。

解決策

  • サービスへの長期間接続が確立されている場合は、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wlc" アノテーションを追加することで、SLBインスタンスのスケジューリングアルゴリズムをWeighted Least Connections (WLC) に設定します。

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

原因

SLBリスナーの接続ドレイニングが構成されていないか、Podのグレースフルシャットダウンが構成されていません。

問題

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

解決策

  1. service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain アノテーションを追加して、SLBリスナーの接続トレーニングを構成します。アノテーションの詳細については、リスナーを管理するための一般的な操作 を参照してください。

  2. Podのネットワークモードに基づいて、Podの preStop パラメーターと readinessProbe パラメーターを設定します。

    • readinessProbe は、コンテナがネットワークトラフィックを受け入れる準備ができているかどうかを確認します。Podは、準備プローブに合格した場合にのみエンドポイントに追加されます。Podは、ACSがエンドポイントが更新されたことを識別した場合にのみ、SLBインスタンスに接続されます。アプリケーションによっては起動に時間がかかる場合があるため、readinessProbe に適切なプローブ間隔、遅延期間、および異常なしきい値を設定する必要があります。短い期間を指定すると、アプリケーションPodが繰り返し再起動します。

    • preStop の値は、アプリケーションPodが残りのリクエストを処理するために必要な期間に設定することをお勧めします。terminationGracePeriodSeconds の値は、preStop より30秒長い期間に設定することをお勧めします。

    Pod構成の例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: default
    spec:
      containers:
      - name: nginx
        image: nginx
        # Liveness probing
        livenessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 30
          successThreshold: 1
          tcpSocket:
            port: 5084
          timeoutSeconds: 1
        # Readiness probing
        readinessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 30
          successThreshold: 1
          tcpSocket:
            port: 5084
          timeoutSeconds: 1
        # Graceful shutdown
        lifecycle:
          preStop:
            exec:
              command:
              - sleep
              - 30
      terminationGracePeriodSeconds: 60

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

原因

SLBインスタンスのアクセス制御リスト (ACL) ルールを構成したか、SLBインスタンスが予期どおりに実行されていません。

問題

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

解決策

  1. 次のコマンドを実行して、サービスイベントをクエリし、エラーをトラブルシューティングします。詳細については、サービスエラーと解決策 を参照してください。

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

    SLBインスタンスにACLルールが構成されている場合は、クライアントIPアドレスがSLBインスタンスにアクセスできるかどうかを確認します。SLBインスタンスのACLルールの構成方法の詳細については、アクセス制御 を参照してください。

  3. SLBインスタンスがvServerグループに関連付けられているかどうかを確認します。

    vServerグループが関連付けられていない場合は、アプリケーションPodがサービスに関連付けられているかどうか、およびアプリケーションPodが正常に実行されているかどうかを確認します。アプリケーションPodが正常に実行されていない場合は、原因を特定し、エラーをトラブルシューティングします。詳細については、Podのトラブルシューティング を参照してください。

  4. 異常なバックエンドサーバーがSLBリスナーによって検出されているかどうかを確認します。

    異常なバックエンドサーバーが検出された場合は、アプリケーションPodが正常に実行されているかどうかを確認します。SLBのヘルスチェックの詳細については、ヘルスチェックスクリプトを実行する を参照してください。

  5. エラーが解決しない場合は、ACS DingTalkグループに参加してテクニカルサポートを受けてください。

バックエンドHTTPSサービスにアクセスできません

原因

SLBインスタンスで証明書情報を指定した後、SLBインスタンスはHTTPSリクエストを復号化し、HTTPリクエストをバックエンドPodに送信します。

問題

バックエンドHTTPSサービスにアクセスできません。

解決策

サービスでtargetPortをHTTPポートに設定します。たとえば、次のNGINXサービスでは、HTTPSポートは443です。この場合、targetPort の値を 80 に変更する必要があります。

例:

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