ネットワーク・ロード・バランサー (NLB) サービスを介してアプリを接続できないのはなぜですか?
クラシック・インフラストラクチャー
クラシック・クラスター内に NLB サービスを作成して、アプリを公開しました。
NLB のパブリック IP アドレスを使用してアプリに接続しようとしたところ、接続が失敗したか、タイムアウトになりました。
次のいずれかの理由で、NLB サービスが正しく機能していない可能性があります。
- クラスターがまだ完全にデプロイされていません。
- NLB サービスの構成スクリプトにエラーが含まれています。
標準クラスターをセットアップしたこと、クラスターが完全にデプロイされていること、また、NLB サービスの高可用性を確保するためにクラスターに 2 つ以上のワーカー・ノードがあることを確認します。
-
ワーカー・ノードをリストします。 CLI 出力で、ワーカー・ノードの Status に Ready と表示され、Machine Type に free 以外のフレーバーが表示されていることを確認します。
ibmcloud oc worker ls --cluster <cluster_name_or_ID>
-
バージョン 2.0 NLB の場合: NLB 2.0 の前提条件を満たしていることを確認します。
-
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
- サービスのタイプとして LoadBalancer を定義したことを確認します。
service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"
アノテーションを指定したことを確認します。- LoadBalancer サービスの
spec.selector
セクションで、<selector_key>
および<selector_value>
が、デプロイメント YAML のspec.template.metadata.labels
セクションで使用したキー/値のペアと同じであることを確認してください。 ラベルが一致しない場合、LoadBalancer サービスの エンドポイント セクションに<none>
と表示され、インターネットからアプリにアクセスできません。 - アプリで listen している port を使用していることを確認します。
externalTrafficPolicy
をLocal
に設定していることを確認します。
-
バージョン 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.
- サービスのタイプとして LoadBalancer を定義したことを確認します。
- LoadBalancer サービスの
spec.selector
セクションで、<selector_key>
および<selector_value>
が、デプロイメント YAML のspec.template.metadata.labels
セクションで使用したキー/値のペアと同じであることを確認してください。 ラベルが一致しない場合、LoadBalancer サービスの**「エンドポイント」セクションに「なし」**と表示され、インターネットからアプリにアクセスできません。 - アプリで listen している port を使用していることを確認します。
-
-
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 サービスをデプロイするための十分なワーカー・ノードがありません。 複数のワーカー・ノードを持つ標準クラスターをデプロイしましたが、ワーカー・ノードのプロビジョンが失敗した可能性があります。
oc get nodes
を実行して、使用可能なワーカー・ノードをリストします。- 使用可能なワーカー・ノードが少なくとも 2 つ見つかった場合は、
ibmcloud oc worker get --cluster <cluster_name_or_ID> --worker <worker_ID>
を実行してワーカー・ノードの詳細をリストします。 oc get nodes
コマンドとibmcloud oc worker get
コマンドによって返されたワーカー・ノードのパブリック VLAN ID とプライベート VLAN ID が一致していることを確認します。
-
カスタム・ドメインを使用して NLB サービスに接続している場合は、カスタム・ドメインが NLB サービスのパブリック IP アドレスにマップされていることを確認します。
- NLB サービスのパブリック IP アドレスを見つけます。
oc describe service <service_name> | grep "LoadBalancer Ingress"
- カスタム・ドメインが、ポインター・レコード (PTR) で NLB サービスのポータブル・パブリック IP アドレスにマップされていることを確認します。
- NLB サービスのパブリック IP アドレスを見つけます。