プライベートパス「Network Load Balancer for VPC設定
Virtual Private Cloud 1.1.29以降
パブリック・インターネット・アクセスのない完全なプライベートVPC環境では、プライベート・パス・ネットワーク・ロード・バランサーを使用して、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 注釈と仕様を確認してください。
必要な注釈と仕様
externalTrafficPolicy
- Specify
Local
orCluster
. 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
, ortcp
. 通常、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-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に設定されている外部ポートとも異なる可能性があります。