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

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

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

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

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

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

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

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

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

    ibmcloud oc 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 セクションを参照して、エラーがないか探します。

    oc 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. oc get nodes を実行して、使用可能なワーカー・ノードをリストします。
    2. 使用可能なワーカー・ノードが少なくとも 2 つ見つかった場合は、ibmcloud oc worker get --cluster <cluster_name_or_ID> --worker <worker_ID> を実行してワーカー・ノードの詳細をリストします。
    3. oc get nodes コマンドと ibmcloud oc worker get コマンドによって返されたワーカー・ノードのパブリック VLAN ID とプライベート VLAN ID が一致していることを確認します。
  5. カスタム・ドメインを使用して NLB サービスに接続している場合は、カスタム・ドメインが NLB サービスのパブリック IP アドレスにマップされていることを確認します。

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