IBM Cloud Docs
プライベートパス「Network Load Balancer for VPC設定

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

Virtual Private Cloud 1.1.29以降

パブリック・インターネット・アクセスのない完全なプライベートVPC環境では、プライベート・パス・ネットワーク・ロード・バランサーを使用して、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
Specify Local or 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ロードバランサーリソースのヘルスチェックプロトコルを設定します。 Available options are http, https, or 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ポートへのアウトバウンドトラフィックを許可する必要があります。 詳細については、セキュリティグループ の管理を参照してください。
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に設定されている外部ポートとも異なる可能性があります。