プライベートパスの設定 Network Load Balancer for VPC

仮想プライベートクラウド 1.29 そして後で

パブリック・インターネット・アクセスのない完全なプライベートVPC環境では、プライベート・パス・ネットワーク・ロード・バランサーを使用して、VPCクラスタで実行されているアプリケーションに流れるネットワーク・トラフィックのバランスを取ることができます。 詳しくは、プライベート・パス・サービスの使用 例をご覧ください。

前提条件

  1. アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  2. まだ実行中のアプリがない場合は、クラスタにアプリをデプロイする。 デプロイメント構成ファイルの metadata セクションに、ラベルを追加しておく必要があります。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。

サービスの LoadBalancer 設定

  1. 以下の LoadBalancer コンフィギュレーションをコピーし、lb.yaml.

    apiVersion: v1
    kind: Service
    metadata:
      name: <app_name>-vpc-nlb-<VPC_zone>
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "private-path" # Required
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private" # Required
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet_ID>"
    spec:
      type: LoadBalancer
      selector:
        <selector_key>: <selector_value>
      ports:
       - name: http
         protocol: TCP
         port: 8080
         targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
       - name: https
         protocol: TCP
         port: 443
         targetPort: 443 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      externalTrafficPolicy: Local # Specify Local or Cluster.
    
  2. ユースケースに合わせてフィールドをカスタマイズしてください。 注釈の完全なリストについては、注釈と仕様 を参照のこと。

  3. 変更内容を保存します。

  4. ロードバランササービスをクラスタにデプロイします。

    kubectl apply -f lb.yaml
    

プライベートパスサービスの作成

プライベートパスサービスを作成 する手順に従ってください。

仮想プライベート・エンドポイント・ゲートウェイの設定

ロードバランサーサービスを設定したので、クラスタ内のアプリケーションにアクセスするための Virtual Private Endpoint (VPE) Gateway を設定する必要があります。

詳細については、UIでエンドポイント・ゲートウェイを作成する を参照してください。

VPEを介したアプリへの接続

VPEを介してアプリに接続する方法については、エンドポイント・ゲートウェイの設定後に仮想プライベート・エンドポイントにアクセスする を参照してください。

注釈と仕様

必須およびオプションの VPC NLB 注釈と仕様を確認してください。

必要な注釈と仕様

externalTrafficPolicy
Local または Cluster を指定してください。
Local に設定すると、クライアント要求のソース IP アドレスがアプリに保存されます。 この設定により、受信トラフィックが別のノードに転送されるのを防ぐことができる。 このオプションは、HTTP ヘルス・チェックも構成します。
Cluster に設定すると、VPC NLB が最初に着信要求を転送するワーカー・ノードからのみ DSR が実装されます。 着信リクエストが到着すると、リクエストはアプリポッドを含むワーカーノードに転送される。 アプリ・ポッドからの応答が元のワーカー・ノードに送信されると、そのワーカー・ノードが DSR を使用し、VPC NLB をバイパスして応答を直接クライアントに送信します。 このオプションは、TCP ヘルス・チェックも構成します。

オプションの注釈と仕様

service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name
VPCロードバランサーを永続化するために一意な名前を付けましょう。 永続的なVPCロードバランサーは、所属するクラスタが削除されても削除されません。 詳細については、「永続的なVPCロードバランサー」を参照してください。 このアノテーションはロードバランサーの作成時にのみ設定できます。 更新作業では使用できない。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
このアノテーションは、Kubernetesロードバランサーサービスに関連付けられたVPCロードバランサーリソースのヘルスチェックプロトコルを設定します。 利用可能なオプションは httphttps、または tcp。 通常、VPC LBのヘルスチェックプロトコルは、Kubernetesロードバランサーサービス仕様の externalTrafficPolicy 設定の値によって決定されます。 しかし、このアノテーションはそのロジックを上書きする。 このアノテーションは、Kubernetes、特にkube-proxyが externalTrafficPolicy の様々な設定に関してどのように振る舞うかを変更するものではない
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
ヘルスチェックに使用されるTCPポート。 この注釈は、ibm-load-balancer-cloud-provider-vpc-health-check-protocol も指定されている場合にのみ適用される。 指定されたTCPポートが Kubernetes ノードのポート範囲(30,000~32,767)外の場合は、クラスタワーカーノードに適用されるVPCセキュリティグループを変更して、そのポートのインバウンドトラフィックを許可する必要があります。 この注釈がVPC ALBに関連付けられた Kubernetes ロードバランサーサービスに適用される場合、VPC ALBに割り当てられたセキュリティグループの送信ルールは、指定されたTCPポートへの送信トラフィックを許可するように変更する必要があります。 詳細については、 「デフォルトでセキュアなクラスタVPCネットワークについて 」および「 VPCセキュリティグループの作成と管理 」を参照してください。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets
ppNLBのIPアドレスを割り当てるために使用するサブネットを指定する注釈。 これらのIPアドレスは内部でのみ使用される。 値は、VPCサブネットID、VPCサブネット名、またはVPCサブネットCIDRのいずれかです。 サブネットは 1 つだけ指定してください。 すべての受信トラフィックはこれらのIPアドレスから来ているようだ。 すべてのアドレスが1つのゾーンにあるが、ppNLBはすべてのゾーンからの着信トラフィックを処理する。 この特定のゾーンが停止しても、他のゾーンからの受信トラフィックは機能する。 この注釈を指定しない場合、サブネットは自動的に選択され、利用可能な空きIPアドレスが最も多いクラスタワーカーノードのサブネットが使用されます。 すべてのリソース・グループのサブネットを確認するには、ibmcloud ks subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone> を実行します。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector
ワーカーノードラベルセレクタを指定するための注釈。 ラベルセレクタキーを指定することで、クラスタ内の特定のワーカーノードがトラフィックを受信するように設定できます。 アノテーションにはラベルセレクタを1つだけ含めることができ、そのセレクタは形式 "key=value" で指定されなければなりません。 このアノテーションが指定されていない場合、クラスタ内のすべてのワーカーノードはVPC NLBからのトラフィックを受信するように設定されます。 このアノテーションは service.kubernetes.io/ibm-load-balancer-cloud-provider-zone アノテーションよりも優先され、ワーカーノード上の ラベル dedicated: edge はすべて無視されます。 特定のゾーンへのトラフィックを制限するには、このアノテーションを使用して、そのゾーン内のワーカーノードを指定します。 クラスタ ワーカー ノードに新しいラベルを設定しても、ワーカー ノードが自動的にトラフィックを受信するように構成されるわけではないことに注意してください。新しくラベルを設定したワーカー ノードがトラフィックを受信するには、VPC NLB を再作成または更新する必要があります。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
HTTP、HTTPsヘルスチェック用のヘルスチェック URL パス。 この注釈は、ibm-load-balancer-cloud-provider-vpc-health-check-protocolhttp または https に設定されている場合にのみ適用される。 URL パスは、 オリジンフォームリクエストターゲットの形式でなければならない。 このアノテーションが指定されず、ibm-load-balancer-cloud-provider-vpc-health-check-protocol アノテーションが http または https に設定されている場合、デフォルト値 / 適用される。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
オプション。 ヘルスチェックを試行するまでの待機秒数。 デフォルトでは、この値は 5 に設定され、最小値は 2 最大値は 60 である。 この値は、デフォルトで 2 に設定されている ibm-load-balancer-cloud-provider-vpc-health-check-timeout 値より大きくなければならない。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
オプション。 ヘルスチェックの応答を待つ秒数。 デフォルトでは、この値は 2 に設定され、最小値は 1 最大値は 59 である。 この値は、デフォルトで 5 に設定されている ibm-load-balancer-cloud-provider-vpc-health-check-delay より小さくなければならない。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
VPC ロードバランサーのヘルスチェックの最大再試行回数。 デフォルトでは、この値は 2 に設定され、最小値は 1 最大値は 10 である。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota
オプション。 ロードバランサがルーティングする、ゾーンごとのワーカーノードの数。 デフォルト値は 8 です。 3つのゾーンにワーカーノードがあるクラスタの場合、ロードバランサは合計24のワーカーノードにルーティングすることになります。 ロードバランサーがルーティングする全ゾーンのワーカーノードの合計数は50を超えることはできません。 クラスタの全ゾーンのワーカーノード数が50未満の場合は、0を指定してゾーン内の全ワーカーノードにルーティングします。
selector
アプリ・デプロイメント YAML の <selector_key> セクションで使用したラベル・キー (<selector_value>) と値 (spec.template.metadata.labels)。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。
port
サービスが listen するポート。
targetPort
オプション: サービスがトラフィックを転送する宛先ポート。 ポッド内で実行されているアプリケーションは、このターゲット・ポートで着信TCPトラフィックをリッスンしていなければならない。 ターゲット・ポートは、多くの場合、アプリケーション・ポッドで実行されているイメージで静的に定義されている。 ポッドに設定されているターゲットポートは、サービスのノードポートとは異なり、VPC LBに設定されている外部ポートとも異なる可能性があります。