IBM Cloud Docs
ネットワーク・ロード・バランサー (NLB) サービスを介してアプリを接続できないのはなぜですか?

ネットワーク・ロード・バランサー (NLB) サービスを介してアプリを接続できないのはなぜですか?

クラシック・インフラストラクチャー

クラシック・クラスター内に NLB サービスを作成して、アプリを公開しました。

NLB のパブリック IP アドレスを使用してアプリに接続しようとしたところ、接続が失敗したか、タイムアウトになりました。

次のいずれかの理由で、NLB サービスが正しく機能していない可能性があります。

  • クラスターがまだ完全にデプロイされていません。
  • NLB サービスの構成スクリプトにエラーが含まれています。

標準クラスターをセットアップしたこと、クラスターが完全にデプロイされていること、また、NLB サービスの高可用性を確保するためにクラスターに 2 つ以上のワーカー・ノードがあることを確認します。

  1. ワーカー・ノードをリストします。 CLI 出力で、ワーカー・ノードの StatusReady と表示され、Machine Typefree 以外のフレーバーが表示されていることを確認します。

    ibmcloud ks worker ls --cluster <cluster_name_or_ID>
    
  2. バージョン 2.0 NLB の場合: NLB 2.0 の前提条件を満たしていることを確認します。

  3. NLB サービスの構成ファイルが正しいことを確認します。

    • バージョン 2.0 NLB

      apiVersion: v1
      kind: Service
      metadata:
        name: myservice
        annotations:
          service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"
      spec:
        type: LoadBalancer
        selector:
          <selector_key>:<selector_value>
        ports:
         - protocol: TCP
           port: 8080
           targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
        externalTrafficPolicy: Local
      
      1. サービスのタイプとして LoadBalancer を定義したことを確認します。
      2. service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs" アノテーションを指定したことを確認します。
      3. LoadBalancer サービスの spec.selector セクションで、<selector_key> および <selector_value> が、デプロイメント YAML の spec.template.metadata.labels セクションで使用したキー/値のペアと同じであることを確認してください。 ラベルが一致しない場合、LoadBalancer サービスの エンドポイント セクションに <none> と表示され、インターネットからアプリにアクセスできません。
      4. アプリで listen している port を使用していることを確認します。
      5. externalTrafficPolicyLocal に設定していることを確認します。
    • バージョン 1.0 NLB

      apiVersion: v1
      kind: Service
      metadata:
        name: myservice
      spec:
        type: LoadBalancer
        selector:
          <selector_key>:<selector_value>
        ports:
         - protocol: TCP
           port: 8080
           targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      
      1. サービスのタイプとして LoadBalancer を定義したことを確認します。
      2. LoadBalancer サービスの spec.selector セクションで、<selector_key> および <selector_value> が、デプロイメント YAML の spec.template.metadata.labels セクションで使用したキー/値のペアと同じであることを確認してください。 ラベルが一致しない場合、LoadBalancer サービスの**「エンドポイント」セクションに「なし」**と表示され、インターネットからアプリにアクセスできません。
      3. アプリで listen している port を使用していることを確認します。
  4. NLB サービスを確認し、Events セクションを参照して、エラーがないか探します。

    kubectl describe service <myservice>
    

    以下のエラー・メッセージを探してください。

    1 つのノードを持つクラスターは、NodePort タイプのサービスを使用する必要があります。
    NLB サービスを使用するには、少なくとも 2 つのワーカー・ノードを持つ標準クラスターが必要です。
    NLB サービス要求を満たすために使用可能なクラウド・プロバイダー IP がありません。 ポータブル・サブネットをクラスターに追加して、再試行してください。
    このエラー・メッセージは、NLB サービスに割り振るポータブル・パブリック IP アドレスが残っていないことを示しています。 クラスター用にポータブル・パブリック IP アドレスを要求する方法については、クラスターへのサブネットの追加を参照してください。 クラスターにポータブル・パブリック IP アドレスを使用できるようになると、NLB サービスが自動的に作成されます。
    要求されたクラウド・プロバイダー IP <cloud-provider-ip> は使用できません。 以下のクラウド・プロバイダー IP が使用可能です。<available-cloud-provider-ips>
    loadBalancerIP セクションを使用してロード・バランサー YAML のポータブル・パブリック IP アドレスを定義しましたが、このポータブル・パブリック IP アドレスはポータブル・パブリック・サブネットでは使用できません。 構成スクリプトの loadBalancerIP セクションで、既存の IP アドレスを削除し、使用可能なポータブル・パブリック IP アドレスの 1 つを追加します。 また、使用可能なポータブル・パブリック IP アドレスを自動的に割り振ることができるように、スクリプトから loadBalancerIP セクションを削除することもできます。
    NLB サービスに使用可能なノードがありません
    NLB サービスをデプロイするための十分なワーカー・ノードがありません。 複数のワーカー・ノードを持つ標準クラスターをデプロイしましたが、ワーカー・ノードのプロビジョンが失敗した可能性があります。
    1. kubectl get nodes を実行して、使用可能なワーカー・ノードをリストします。
    2. 使用可能なワーカー・ノードが少なくとも 2 つ見つかった場合は、ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID> を実行してワーカー・ノードの詳細をリストします。
    3. kubectl get nodes コマンドと ibmcloud ks worker get コマンドによって返されたワーカー・ノードのパブリック VLAN ID とプライベート VLAN ID が一致していることを確認します。
  5. カスタム・ドメインを使用して NLB サービスに接続している場合は、カスタム・ドメインが NLB サービスのパブリック IP アドレスにマップされていることを確認します。

    1. NLB サービスのパブリック IP アドレスを見つけます。
      kubectl describe service <service_name> | grep "LoadBalancer Ingress"
      
    2. カスタム・ドメインが、ポインター・レコード (PTR) で NLB サービスのポータブル・パブリック IP アドレスにマップされていることを確認します。