プライベートパスの設定 Network Load Balancer for VPC
仮想プライベートクラウド 1.29 そして後で
パブリック・インターネット・アクセスのない完全なプライベートVPC環境では、プライベート・パス・ネットワーク・ロード・バランサーを使用して、VPCクラスタで実行されているアプリケーションに流れるネットワーク・トラフィックのバランスを取ることができます。 詳しくは、プライベート・パス・サービスの使用 例をご覧ください。
前提条件
-
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
まだ実行中のアプリがない場合は、クラスタにアプリをデプロイする。 デプロイメント構成ファイルの metadata セクションに、ラベルを追加しておく必要があります。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。
サービスの LoadBalancer 設定
-
以下の
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. -
ユースケースに合わせてフィールドをカスタマイズしてください。 注釈の完全なリストについては、注釈と仕様 を参照のこと。
-
変更内容を保存します。
-
ロードバランササービスをクラスタにデプロイします。
kubectl apply -f lb.yaml
プライベートパスサービスの作成
プライベートパスサービスを作成 する手順に従ってください。
仮想プライベート・エンドポイント・ゲートウェイの設定
ロードバランサーサービスを設定したので、クラスタ内のアプリケーションにアクセスするための Virtual Private Endpoint (VPE) Gateway を設定する必要があります。
詳細については、UIでエンドポイント・ゲートウェイを作成する を参照してください。
VPEを介したアプリへの接続
VPEを介してアプリに接続する方法については、エンドポイント・ゲートウェイの設定後に仮想プライベート・エンドポイントにアクセスする を参照してください。
注釈と仕様
必須およびオプションの VPC NLB 注釈と仕様を確認してください。
必要な注釈と仕様
externalTrafficPolicyLocalまたは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ロードバランサーリソースのヘルスチェックプロトコルを設定します。 利用可能なオプションは
http、https、または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-protocolがhttpまたは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に設定されている外部ポートとも異なる可能性があります。