VPC用のロードバランサーを介してアプリを公開する
Virtual Private Cloud
アプリをパブリック・ネットワークまたはプライベート・ネットワークに公開するように、VPC ロード・バランサーをセットアップします。
VPC クラスターでアプリを公開するために、レイヤー 7 の VPC アプリケーション・ロード・バランサーを作成できます。 オプションで、レイヤー 4 Network Load Balancer for VPCを作成できます。
ロード・バランサーのタイプ
各ロード・バランシング・オプションの基本的な特性を以下の表にまとめます。
| 特性 | Application Load Balancer for VPC | Network Load Balancer for VPC |
|---|---|---|
| サポートされる Red Hat OpenShift のバージョン | すべてのバージョン | すべてのバージョン |
| トランスポート層 | レイヤー 7 | レイヤー 4 |
| ロード・バランサーの種類 | パブリックおよびプライベート | パブリックおよびプライベート |
| サポートされているプロトコル | TCP | TCP, UDP |
| アプリケーション・アクセス | ホスト名 | ホスト名と静的 IP アドレス |
| ソース IP の保持 | 構成可能* | ある |
| 直接サーバー・リターンによるパフォーマンスの向上 | いいえ | ある |
| マルチゾーン・ルーティング | ある | ある |
| ポート範囲 | いいえ | パブリックのみ |
| セキュリティー・グループ | ある | ある |
Network Load Balancer for VPC
VPC クラスターでは、クラスターの各ゾーンに layer-4 Network Load Balancer for VPC (VPC NLB)をクラスターの各ゾーンに設定し、アプリへの着信リクエストの外部エントリポイントとして機能させます。
VPC NLB にはいくつかの利点があります。例えば、直接サーバー・リターン (DSR) によってスループットが高くなり、パフォーマンスが向上します。 DSR を使用すると、ワーカー・ノードは NLB をスキップして、アプリケーション応答パケットをクライアント IP アドレスに直接送信できるので、NLB が処理するトラフィックの量が減ります。 また、VPC NLB を使用すると、デフォルトですべてのクライアント要求のソース IP アドレスが保存されます。
-
標準 VPC NLB 名の形式は
kube-<cluster_ID>-<kubernetes_lb_service_UID>です。 クラスター ID を確認するには、ibmcloud oc cluster get --cluster <cluster_name>を実行します。 KubernetesLoadBalancerサービスの UID を調べるには、oc get svc myloadbalancer -o yamlを実行して出力中の metadata.uid フィールドを確認します。 VPC NLB 名に含まれる「 Kubernetes 」LoadBalancerサービスの UID から、ハイフン (-) が削除されます。 -
永続 VPC NLB 名の形式は
kube-<cluster_ID>-<kubernetes_lb_service_UID>です。 クラスター ID を確認するには、ibmcloud oc cluster get --cluster <cluster_name>を実行します。 KubernetesLoadBalancerサービスの UID を調べるには、oc get svc myloadbalancer -o yamlを実行して出力中の metadata.uid フィールドを確認します。 VPC NLB 名に含まれる「 Kubernetes 」LoadBalancerサービスの UID から、ハイフン (-) が削除されます。 -
クラスターでアプリの Kubernetes
LoadBalancerサービスを作成し、service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb"アノテーションを指定すると、VPC NLB が VPC のクラスター外部に作成されます。 この VPC NLB は、ワーカー・ノードで自動的に開かれるプライベート NodePort を介して、アプリに対する要求を転送します。 -
パブリックの Kubernetes
LoadBalancerサービスを作成する場合は、VPC NLB によって KubernetesLoadBalancerサービスに割り当てられる外部パブリック IP アドレスを使用して、インターネットからアプリにアクセスできます。 ワーカー・ノードがプライベート VPC サブネットにしか接続されていなくても、VPC NLB が、パブリック要求を受け取って、アプリを公開しているサービスに転送することができます。 VPC NLB へのパブリック要求を許可するために VPC サブネットにパブリック・ゲートウェイを置く必要はないことに注意してください。 一方、アプリからパブリック URL にアクセスする必要がある場合は、ワーカー・ノードが接続される VPC サブネットにパブリック・ゲートウェイを接続する必要があります。 -
プライベートの Kubernetes
LoadBalancerサービスを作成する場合は、同じリージョンおよび同じ VPC のプライベート・サブネットに接続されているシステムしかアプリにアクセスできません。 プライベート VPC ネットワークに接続されている場合、VPC NLB によって KubernetesLoadBalancerサービスに割り当てられる外部プライベート IP アドレスを使用してアプリにアクセスできます。
以下の図は、ユーザーが VPC NLB を介してインターネットからアプリにアクセスする方法を示しています。
- アプリへの要求には、VPC NLB によって Kubernetes
LoadBalancerサービスに割り当てられた外部 IP アドレスを使用します。 - 要求は自動的に VPC NLB によってワーカー・ノードのノード・ポートの 1 つに転送され、さらにアプリ・ポッドのプライベート IP アドレスに転送されます。
- アプリのインスタンスがクラスター内の複数のワーカーノードにデプロイされている場合、VPC NLB は、クラスターのすべてのゾーンにまたがるさまざまなワーカーノード上のアプリポッド間でリクエストをルーティングします。
Application Load Balancer for VPC
レイヤー 7 のマルチゾーン対応の VPC 用アプリケーション・ロード・バランサー (VPC ALB) を、クラスター内のアプリに対する着信要求のための外部エントリー・ポイントとして動作するようにセットアップします。
VPC 用アプリケーション・ロード・バランサーを Red Hat OpenShift on IBM Cloud Ingress のアプリケーション・ロード・バランサーと混同しないでください。 VPC アプリケーション・ロード・バランサー (VPC ALB) は、VPC 内のクラスターの外で実行され、ユーザーが作成する Kubernetes LoadBalancer サービスによって構成されます。 Ingress アプリケーション・ロード・バランサー (ALB) は、クラスター内部のワーカー・ノードで実行される Ingress コントローラーです。
-
VPC ALB の名前は、
kube-<cluster_ID>-<kubernetes_lb_service_UID>という形式になっています。 クラスター ID を確認するには、ibmcloud oc cluster get --cluster <cluster_name>を実行します。 KubernetesLoadBalancerサービスの UID を調べるには、oc get svc myloadbalancer -o yamlを実行して出力中の metadata.uid フィールドを確認します。 VPC ALB 名に含まれる KubernetesLoadBalancerサービスの UID から、ハイフン (-) が削除されます。 -
デフォルトでは、クラスター内のアプリ用に Kubernetes の
LoadBalancerサービスを作成すると、VPC 用アプリケーション・ロード・バランサーが VPC のクラスター外部に作成されます。 この VPC ALB が、ワーカー・ノードで自動的に開かれるプライベート NodePort を介して、アプリに要求を転送します。 -
パブリック Kubernetes
LoadBalancerサービスを作成する場合は、VPC ALB によって KubernetesLoadBalancerサービスに割り当てられたホスト名 (1234abcd-<region>.lb.appdomain.cloudの形式) を使用して、インターネットからアプリにアクセスできます。 ワーカー・ノードがプライベート VPC サブネットにしか接続されていなくても、VPC ALB が、パブリック要求を受け取って、アプリを公開しているサービスに転送することができます。 VPC ALB へのパブリック要求を許可するために VPC サブネットにパブリック・ゲートウェイを置く必要はないことに注意してください。 一方、アプリからパブリック URL にアクセスする必要がある場合は、ワーカー・ノードが接続される VPC サブネットにパブリック・ゲートウェイを接続する必要があります。 -
プライベートの Kubernetes
LoadBalancerサービスを作成する場合は、同じリージョンおよび同じ VPC のプライベート・サブネットに接続されているシステムしかアプリにアクセスできません。 プライベート VPC ネットワークに接続している場合は、VPC ALB によって KubernetesLoadBalancerサービスに割り当てられたホスト名 (1234abcd-<region>.lb.appdomain.cloudの形式) を使用してアプリにアクセスできます。
以下の図は、ユーザーが VPC ALB を介してインターネットからアプリにアクセスする方法を示しています。
- アプリへの要求には、VPC ALB によって Kubernetes
LoadBalancerサービスに割り当てられたホスト名 (1234abcd-<region>.lb.appdomain.cloudなど) を使用します。 - 要求は自動的に VPC ALB によってワーカー・ノードのノード・ポートの 1 つに転送され、さらにアプリ・ポッドのプライベート IP アドレスに転送されます。
- 複数のアプリ・インスタンスがクラスター内の複数のワーカー・ノードにデプロイされている場合、ロード・バランサーはさまざまなワーカー・ノード上のアプリ・ポッド間で要求を転送します。 また、マルチゾーン・クラスターの場合は、VPC ALB は、クラスター内のすべてのサブネットおよびゾーンのワーカー・ノードに要求を転送します。
VPC ネットワーク・ロード・バランサーのセットアップ
VPC クラスターの各ゾーンにパブリックまたはプライベート の Kubernetes LoadBalancer サービスをセットアップして、パブリックまたはプライベートのネットワークにアプリを公開します。 その後、オプションで、VPC NLB を DNS レコードおよび TLS 証明書に登録します。
VPC NLBは、「 TCP 」および「 UDP 」の両方のプロトコルタイプをサポートしています。
パブリック VPC NLB のセットアップ
クラスターの各ゾーンで Kubernetes LoadBalancer サービスをセットアップして、アプリをパブリック・ネットワーク・トラフィックに公開します。 Kubernetes LoadBalancer サービスを作成すると、要求をアプリに転送するパブリック VPC ネットワーク・ロード・バランサー (VPC NLB) が VPC 内のクラスターの外に自動的に作成されます。
- VPC NLB用の Kubernetes
LoadBalancerサービスをデプロイする名前空間に対して、 作家 または、 マネージャー IBM Cloud IAM サービスのアクセスロール が割り当てられていることを確認してください。 - Red Hat OpenShift クラスターにアクセスします。
- VPC NLB を表示するには、
infrastructure-serviceプラグインをインストールします。 コマンドを実行するための接頭部は、ibmcloud isです。ibmcloud plugin install infrastructure-service
-
アプリをクラスターにデプロイします。 デプロイメント構成ファイルの metadata セクションに、ラベルを追加しておく必要があります。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。
-
Kubernetes
LoadBalancerサービスの構成 YAML ファイルを作成します。 サービス名を<app_name>-vpc-nlb-<VPC_zone>の形式にすることを検討してください。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: "nlb" service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "public" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector: "<key>=<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet1_ID,subnet2_ID>" service.kubernetes.io/ibm-load-balancer-cloud-provider-zone: "<zone>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp: "<tcp_port>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol: "<protocol>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port: "<port>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path: "<url_path>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group: "<security-group>" 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.service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"- オプション。 VPC ロード・バランサーを永続的にするには、固有の名前を指定します。 永続 VPC ロード・バランサーは、属しているクラスターが削除されても削除されません。 詳しくは、 永続 VPC ロード・バランサー を参照してください。 このアノテーションは、ロード・バランサーの作成時にのみ設定できます。 更新操作では使用できません。
service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb"- 必須: VPC NLB を作成するためのアノテーション。 このアノテーションは、ロード・バランサーの作成時にのみ設定できます。 更新操作では使用できません。
service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type- オプション: パブリック要求を受け入れるサービスを指定するためのアノテーション。 このアノテーションを指定しない場合も、パブリック VPC NLB が作成されます。 このアノテーションは、ロード・バランサーの作成時にのみ設定できます。 更新操作では使用できません。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector-
- オプション: ワーカー・ノードのラベル・セレクターを指定するためのアノテーション。 トラフィックを受信するワーカー・ノードを指定するために、サポートされているラベル・セレクター・キーのいずれかを選択できます。 このアノテーションにはラベル・セレクターを 1 つだけ指定できること、また、セレクターは
"key=value"という形式で指定する必要があることに注意してください。 このアノテーションを指定しない場合、VPC NLB と同じゾーンにあるすべてのワーカー・ノードは、VPC NLB からのトラフィックを受信するように構成されます。 指定した場合は、このアノテーションが、service.kubernetes.io/ibm-load-balancer-cloud-provider-zoneアノテーションよりも優先されるので、ワーカー・ノードのdedicated: edgeラベルは無視されます。 トラフィックを特定のゾーンに制限するには、このアノテーションを使用して、そのゾーン内のワーカー・ノードを指定できます。 -
以下のキーを使用できます。
ibm-cloud.kubernetes.io/internal-ipibm-cloud.kubernetes.io/machine-typeibm-cloud.kubernetes.io/osibm-cloud.kubernetes.io/regionibm-cloud.kubernetes.io/subnet-idibm-cloud.kubernetes.io/worker-pool-idibm-cloud.kubernetes.io/worker-pool-nameibm-cloud.kubernetes.io/zonekubernetes.io/archkubernetes.io/hostnamekubernetes.io/osnode.kubernetes.io/instance-typetopology.kubernetes.io/regiontopology.kubernetes.io/zone
- オプション: ワーカー・ノードのラベル・セレクターを指定するためのアノテーション。 トラフィックを受信するワーカー・ノードを指定するために、サポートされているラベル・セレクター・キーのいずれかを選択できます。 このアノテーションにはラベル・セレクターを 1 つだけ指定できること、また、セレクターは
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets- オプション :VPC NLB がデプロイされる 1 つのゾーン内の 1 つ以上のサブネットを指定するための注釈。 VPC サブネット ID、VPC サブネット名、VPC サブネット CIDR のいずれかの値を指定できます。 指定した場合、このアノテーションは
service.kubernetes.io/ibm-load-balancer-cloud-provider-zoneアノテーションよりも優先されます。 同じ VPC にあるサブネットで、クラスターが接続されているものとは別のサブネットを指定できることに留意してください。 その場合、VPC NLB は同じ VPC 内の別のサブネットにデプロイされますが、それでも同じゾーン内のクラスター・サブネット上のワーカー・ノードにトラフィックを転送できます。 すべてのリソースグループ内のサブネットを確認するには、ibmcloud oc subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone>を実行してください。 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone-
- オプション :クラスターが接続されている VPC ゾーンを指定するための注釈。 VPC NLB が、そのゾーンのワーカー・ノードが接続されているのと同じサブネットにデプロイされます。 NLB の対応範囲は 1 つのゾーンだけなので、そのゾーン内のクラスターのワーカー・ノードだけがトラフィックを受信するように構成されます。
- ゾーンを表示するには、
ibmcloud oc zone ls --provider vpc-gen2を実行してください。 後でこのアノテーションを別のゾーンに変更しても、VPC NLB は新しいゾーンに移動しません。 - なお、このアノテーションまたは
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnetsアノテーションを指定しない場合、VPC NLBは最適なゾーンにデプロイされます。 例えば、ワーカー・ノードが存在するReady状態のゾーンだけに VPC NLB がデプロイされます。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp-
- UDP プロトコルを指定し、
externalTrafficPolicyをClusterに設定する場合、この設定は必須となります。 それ以外の場合、この注釈はオプションです。 -
UDP ロードバランサーにおいて、 のヘルスチェックに使用する ポートを指定します。 TCP TCP 「 `externalTrafficPolicy` 」が「 `Cluster` 」に設定されている UDP ロードバランサーでは、これが必須となります。 ポート値の設定に関する詳細については、「 [UDP ロードバランサー向けの TCP ヘルスチェックの設定」を](#vpc_lb_health_udp) 参照してください。
- UDP プロトコルを指定し、
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol- オプション: このアノテーションは、 Kubernetes ロード・バランサー・サービスに関連付けられた VPC ロード・バランサー・リソースのヘルス・チェック・プロトコルを設定します。 通常、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も指定されている場合にのみ適用されます。 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 のパスは、 origin-form リクエストターゲットの形式で指定する必要があります。
- このアノテーションが指定されず、
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です。 selector- オプション。 アプリデプロイメントのYAMLファイルの「
spec.template.metadata.labels」セクションで使用したラベルのキー(<selector_key>)と値(<selector_value>)です。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。 port- オプション。 サービスが listen するポート。
targetPort- オプション。 サービスがトラフィックを転送する宛先ポート。 ポッド内で実行されているアプリケーションは、このターゲットポートで TCP からのトラフィックをリッスンしている必要があります。 多くの場合、ターゲット・ポートは、アプリケーション・ポッドで実行されているイメージで静的に定義されます。 ポッドで構成されているターゲット・ポートは、サービスのノード・ポートとは異なり、VPC LB で構成されている外部ポートとも異なる場合があります。
externalTrafficPolicy-
- 必須。 特定
LocalまたはCluster。 - アプリへのクライアントリクエストの送信元IPアドレスを保持するには、
Localに設定してください。 この設定により、着信トラフィックが別のノードに転送されなくなります。 このオプションは、HTTP ヘルス・チェックも構成します。 Clusterが設定されている場合、DSRは、VPC NLBが着信リクエストを最初に転送したワーカーノードからのみ実装されます。 着信要求が到着すると、その要求は、別のゾーンにある可能性があるアプリ・ポッドを含むワーカー・ノードに転送されます。 アプリ・ポッドからの応答が元のワーカー・ノードに送信されると、そのワーカー・ノードが DSR を使用し、VPC NLB をバイパスして応答を直接クライアントに送信します。 このオプションは、TCP ヘルス・チェックも構成します。 UDP ロードバランサーの場合、「Cluster」オプションを選択するには、「service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp」が必要です。 詳細については、「 UDP ロードバランサー向けの TCP ヘルスチェックの設定 」を参照してください。
- 必須。 特定
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota- オプション。 ロード バランサーがルーティングするゾーンごとのワーカー ノードの数。 デフォルト値は 8 です。 3 つのゾーンにワーカー ノードがあるクラスターの場合、ロード バランサーは合計 24 個のワーカー ノードにルーティングされます。 ロード バランサーがルーティングするすべてのゾーンのワーカー ノードの合計数は 50 を超えることはできません。 クラスターのすべてのゾーンにわたるワーカー ノードが 50 未満の場合、ゾーン内のすべてのワーカー ノードにルーティングするには 0 を指定します。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group- オプション。 VPC ロードバランサーに追加する顧客管理のセキュリティ グループ。 使用したくない場合は IBM-管理されたセキュリティグループ 所有および管理するセキュリティ グループを指定します。 このオプションは、IBM管理対象のセキュリティ グループを削除し、指定したセキュリティ グループに置き換えます。 既存のロードバランサーから注釈を削除すると、追加したセキュリティグループがIBM管理されたセキュリティ グループ。 この注釈はいつでも追加または削除できます。 セキュリティ グループを管理し、最新の状態に保つ責任はあなたにあります。
-
クラスターに Kubernetes
LoadBalancerサービスを作成します。oc apply -f <filename>.yaml -n <namespace> -
クラスターに Kubernetes
LoadBalancerサービスが正常に作成されたことを確認します。 サービスが作成されると、VPC NLB によって割り当てられた外部 IP アドレスが **「LoadBalancer Ingress」**フィールドに取り込まれます。
VPC NLB が VPC にプロビジョンされるまでに数分かかります。 VPC NLB のプロビジョンが完了するまで、Kubernetes LoadBalancer サービスの外部 IP アドレスが pending になることがあります。
```sh {: pre}
oc describe svc myloadbalancer -n <namespace>
```
パブリックの `LoadBalancer` サービスの CLI 出力例:
```sh {: screen}
NAME: myvpcnlb
Namespace: default
Labels: <none>
Annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb
Selector: app=echo-server
Type: LoadBalancer
IP: 172.21.204.12
LoadBalancer Ingress: 169.XXX.XXX.XXX
Port: tcp-80 80/TCP
TargetPort: 8080/TCP
NodePort: tcp-80 32022/TCP
Endpoints: 172.17.17.133:8080,172.17.22.68:8080,172.17.34.18:8080 + 3 more...
Session Affinity: None
External Traffic Policy: Local
HealthCheck NodePort: 30882
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SyncLoadBalancerFailed 13m (x5 over 15m) service-controller Error syncing load balancer: failed to ensure load balancer: kube-bqcssbbd0bsui62odcdg-2d93b07decf641d2ad3f9c2985122ec1 for service default/myvpcnlb is busy: offline/create_pending
Normal EnsuringLoadBalancer 9m27s (x7 over 15m) service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 9m20s service-controller Ensured load balancer
Normal CloudVPCLoadBalancerNormalEvent 8m17s ibm-cloud-provider Event on cloud load balancer myvpcnlb for service default/myvpcnlb with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
```
-
VPC NLB が VPC に正常に作成されたことを確認します。 出力で、VPC NLB の**「Operating Status」が
online、「Provision Status」**がactiveであることを確認します。LoadBalancerサービス用に自動的に作成される VPC NLB の名前は変更しないでください。 VPC NLB の名前を変更すると、Red Hat OpenShift on IBM Cloud はLoadBalancerサービス用の別の VPC NLB を自動的に作成します。ibmcloud is load-balancers以下の CLI 出力例では、
kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96eという名前の VPC NLB が KubernetesLoadBalancerサービス用に作成されています。ID Name Created Host Name Is Public Listeners Operating Status Pools Private IPs Provision Status Public IPs Subnets Resource Group 06496f64-a689-4693-ba23-320959b7b677 kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96e 8 minutes ago 1234abcd-us-south.lb.appdomain.cloud yes 95482dcf-6b9b-4c6a-be54-04d3c46cf017 online 717f2122-5431-403c-b21d-630a12fc3a5a 10.241.0.7 active 169.63.99.184 c6540331-1c1c-40f4-9c35-aa42a98fe0d9 00809211b934565df546a95f86160f62 -
手順 4 でわかった Kubernetes
LoadBalancerサービスの IP アドレスとアプリのポートに<external_IP>:<app_port>の形式でアクセスします。 -
オプション: これらのステップを繰り返して、アプリを公開する各ゾーンにパブリック VPC NLB をデプロイします。 その後、各ゾーン内の VPC NLB の外部 IP アドレスを 1 つの DNS サブドメインに登録できます。
クラスターを作成するときやワーカー・ノードをゾーンに追加するときに、クラスターに接続しているサブネットを削除しないでください。 クラスターで使用していた VPC サブネットを削除すると、そのサブネットの IP アドレスを使用する VPC NLB に問題が発生し、新しいロード・バランサーも作成できなくなる可能性があります。
ポート範囲を使用した NLB のセットアップ
複数のバックエンド・アプリケーションがあり、それぞれが別個のポート番号で listen する単一のホスト名からサービスをホストする必要がある場合、パブリック NLB でポート範囲を使用できます。 Kubernetes クラスターでポート範囲を使用するには、いくつかの手動構成を行う必要があります。 最初に、 ibm-load-balancer-cloud-provider-vpc-port-range オプションを設定する必要があります。 それぞれをコンマで区切って、1
つまたは複数の範囲を含めることができます。 spec.ports.port 値も、ポート範囲内の最小値に設定する必要があります。
以下の例では、ポート範囲 30000-30010 が使用されています。
NLB サービスが要求を転送するデプロイメントごとに、ノード・ポート・サービスを手動で作成する必要があります。 これらの各 Nodeport サービスのポート番号は、NLB サービスで構成されているポート範囲内でなければなりません。
以下の図の例では、ポート 30000 を持つ Nodeport サービスがデプロイメント 1 用に作成され、ポート 30001 を持つ Nodeport サービスがデプロイメント 2 用に作成されます。
ユーザーは、ポート範囲を含む NLB のポート 30001 に対して要求を行います。 この要求は VPC NLB サービスに送信されます。VPC NLB サービスは、同じくポート 30001 で listen しているクラスター内の Nodeport サービス (この場合はデプロイメント 2 用) に要求を送信します。 その後、Nodeport サービスは、デプロイメント 2 の選択されたポッドのターゲット・ポートに要求を送信します。
以下の例を使用して、ポート範囲を使用する NLB を作成します。 ヘルス・チェックが成功を返し、ポート範囲内のポートにデータが配信されるように、セレクター・ポッドとバックエンド・ポッドをポート範囲ロード・バランサー・サービスに関連付ける必要があります。 ポート範囲を使用するには、ロード・バランサー・サービスによって定義された範囲内のポート値を持つ追加の NodePort サービスを作成する必要があります。
-
以下の
LoadBalancer構成の例を、loadbalancer.yamlという名前のファイルとして保存します。apiVersion: v1 kind: Service metadata: annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-port-range: 30000-30010 name: nlb-port-range spec: externalTrafficPolicy: Cluster ports: - port: 30000 # Must match min from the port range protocol: TCP nodePort: 30011 # Can be port in range or not targetPort: 8080 selector: app: echo-server # Must be valid for health checks to work type: LoadBalancer -
サービスを作成します。
oc apply -f loadbalancer.yaml -
先ほど作成した
LoadBalancerで指定したポート範囲内のポート値を使用して、NodePortサービスを作成します。apiVersion: v1 kind: Service metadata: name: echo-server-node-port spec: ports: - port: 80 protocol: TCP # The protocol of the port range nodePort: 30003 # Node port in the port range targetPort: 8080 selector: app: echo-server type: NodePort -
NodePort サービスを作成します。
oc apply -f nodeport.yaml -
NLB によって提供される範囲内のポートにアクセスします。
curl https://<public ip assigned to NLB>:3000330003= 要求に応答する範囲内のノード・ポートです。- 範囲内の他のポートは、追加のノード・ポート・サービスが作成されない限り、応答しません。
プライベート VPC NLB のセットアップ
クラスターの各ゾーンで Kubernetes LoadBalancer サービスをセットアップして、アプリをプライベート・ネットワーク・トラフィックに公開します。 Kubernetes LoadBalancer サービスを作成すると、要求をアプリに転送するプライベート VPC ネットワーク・ロード・バランサー (VPC NLB) が VPC 内のクラスターの外に自動的に作成されます。
開始前に
- VPC NLB用の Kubernetes
LoadBalancerサービスをデプロイする名前空間に対して、 作家 または、 マネージャー IBM Cloud IAM サービスのアクセスロール が割り当てられていることを確認してください。 - VPC VPN 接続などを使用して、VPC プライベート・ネットワークに接続します。
- Red Hat OpenShift クラスターにアクセスします。
- VPC NLB を表示するには、
infrastructure-serviceプラグインをインストールします。 コマンドを実行するための接頭部は、ibmcloud isです。ibmcloud plugin install infrastructure-service
アプリがプライベート要求を受信できるようにするには、以下のようにします。
-
VPC NLB 専用の VPC サブネットを作成します。 このサブネットはクラスターと同じ VPC の同じロケーションに存在する必要がありますが、このサブネットをクラスターやワーカー・ノードに接続することはできません。
- VPC サブネット ダッシュボード から、「 新しいサブネット 」をクリックしてください。
- サブネットの名前を入力します。
- クラスターが存在するロケーションおよび VPC NLB を作成するゾーンを選択します。
- クラスターが存在する VPC の名前を選択します。
- 作成する IP アドレスの数を指定します。 このサブネットは VPC NLB 専用であるため、16 などの小さいサイズを選択できます。 後で VPC サブネットの IP の数を変更することはできません。 具体的な IP 範囲を入力する場合は、予約済みの範囲で
172.16.0.0/16、172.18.0.0/16、172.19.0.0/16、172.20.0.0/16は使用しないでください。 - **「サブネットの作成 (Create subnet)」**をクリックします。 サブネットがプロビジョンされたら、その ID をメモします。
-
VPC NLB 経由でアプリに接続する必要があるクライアントが、この専用 VPC サブネットを作成した VPC とゾーンの外部に存在する場合は、カスタム Ingress ルーティング・テーブルを作成する必要があります。 そのカスタム・ルーティング・テーブルには、一部の障害状況の発生時にサービスの可用性を確保するために、プライベート VPC NLB がルールを追加する場合があります。 詳しくは、既知の制限の表および ルーティング・テーブルおよびルートについてを参照してください。
- VPC ルーティングテーブルのダッシュボードで、[ 作成 ] をクリックします。
- ルーティング・テーブルの名前を入力します。
- 専用サブネットを作成したロケーションおよびゾーンを選択します。
- サブネットが存在する VPC の名前を選択します。
- **「トラフィック・タイプ」で、「Ingress」**を選択します。
- クライアントがどこからアプリにアクセスするかに応じて、**「トラフィック・ソース (Traffic source)」**を選択します。 VPC プライベート・ネットワークへの接続のセットアップ方法については、VPC 接続に IBM Cloud VPC VPN、Transit Gateway、または Direct Link を選択する方法について記載した資料を参照してください。
- オンプレミス・ネットワーク: Direct Link
- 別の VPC またはクラシック・インフラストラクチャー: Transit Gateway
- 同じ VPC 内の別のゾーン: VPC ゾーン
-
アプリをクラスターにデプロイします。 デプロイメント構成ファイルの metadata セクションに、ラベルを追加しておく必要があります。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。
-
Kubernetes
LoadBalancerサービスの構成 YAML ファイルを作成します。 サービス名を<app_name>-vpc-nlb-<VPC_zone>の形式にすることを検討してください。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: "nlb" service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet_ID>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector: "<key>=<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp: "<tcp_port" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol: "<protocol>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port: "<port>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path: "<url_path>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group: "<security-group>" spec: type: LoadBalancer selector: <selector_key>: <selector_value> ports: - name: http protocol: TCP port: 8080 targetPort: 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.service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"- オプション。 VPC ロード・バランサーを永続的にするには、固有の名前を指定します。 永続 VPC ロード・バランサーは、属しているクラスターが削除されても削除されません。 詳しくは、 永続 VPC ロード・バランサー を参照してください。
service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb"- 必須: VPC NLB を作成するためのアノテーション。
service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private"- 必須: プライベート要求を受け入れるサービスを指定するためのアノテーション。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets- 必須: VPC NLB のデプロイ先の専用サブネットを指定するためのアノテーション。 値には、VPC サブネット ID、VPC サブネット名、または VPC サブネット CIDR を指定できます。 サブネットは 1 つだけ指定してください。 このサブネットは、クラスターと同じ VPC 内になければならず、クラスターのワーカー・ノードが配置されたゾーンに存在する必要があります。ただし、このサブネットにワーカー・ノードを接続することはできません。 このサブネットと同じゾーンに存在するワーカー・ノードは、VPC
NLB からトラフィックを受信するように構成されます。 すべてのリソース・グループのサブネットを確認するには、
ibmcloud oc subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone>を実行します。 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector-
- オプション: ワーカー・ノードのラベル・セレクターを指定するためのアノテーション。 サポートされるラベル・セレクターのキーのいずれかを選択することで、VPC NLB の専用サブネットと同じゾーン内に存在する特定のワーカー・ノードを、トラフィックを受信するように構成できます。 このアノテーションにはラベル・セレクターを 1 つだけ指定できること、また、セレクターは
"key=value"という形式で指定する必要があることに注意してください。 このアノテーションを指定しない場合は、service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnetsアノテーションで指定した VPC サブネットと同じゾーンに存在するすべてのワーカー・ノードが、VPC NLB からトラフィックを受信するように構成されます。 指定すると、ワーカー・ノードのdedicated: edgeラベルは無視されます。 - 以下のキーを使用できます。 -
ibm-cloud.kubernetes.io/internal-ip-ibm-cloud.kubernetes.io/machine-type-ibm-cloud.kubernetes.io/os-ibm-cloud.kubernetes.io/region-ibm-cloud.kubernetes.io/subnet-id-ibm-cloud.kubernetes.io/worker-pool-id-ibm-cloud.kubernetes.io/worker-pool-name-ibm-cloud.kubernetes.io/zone-kubernetes.io/arch-kubernetes.io/hostname-kubernetes.io/os-node.kubernetes.io/instance-type-topology.kubernetes.io/region-topology.kubernetes.io/zone
- オプション: ワーカー・ノードのラベル・セレクターを指定するためのアノテーション。 サポートされるラベル・セレクターのキーのいずれかを選択することで、VPC NLB の専用サブネットと同じゾーン内に存在する特定のワーカー・ノードを、トラフィックを受信するように構成できます。 このアノテーションにはラベル・セレクターを 1 つだけ指定できること、また、セレクターは
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp- オプション: UDP ロード・バランサーでの TCP ヘルス・チェックに使用する TCP ノード・ポートを指定します。
externalTrafficPolicyがClusterに設定されている UDP ロード・バランサーの場合は必須。 ポート値を設定する前のその他の考慮事項については、UDP ロード・バランサーの TCP ヘルス・チェックの構成を参照してください。 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol- オプション: このアノテーションは、 Kubernetes ロード・バランサー・サービスに関連付けられた VPC ロード・バランサー・リソースのヘルス・チェック・プロトコルを設定します。 通常、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も指定されている場合にのみ適用されます。 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 のパスは、 origin-form リクエストターゲットの形式で指定する必要があります。
- このアノテーションが指定されず、
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です。 selector- アプリ・デプロイメント YAML の
<selector_key>セクションで使用したラベル・キー (<selector_value>) と値 (spec.template.metadata.labels)。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。 port- サービスが listen するポート。
targetPort- オプション: サービスがトラフィックを転送する宛先ポート。 ポッド内で実行されているアプリケーションは、このターゲットポートで TCP からのトラフィックをリッスンしている必要があります。 多くの場合、ターゲット・ポートは、アプリケーション・ポッドで実行されているイメージで静的に定義されます。 ポッドで構成されているターゲット・ポートは、サービスのノード・ポートとは異なり、VPC LB で構成されている外部ポートとも異なる場合があります。
externalTrafficPolicy-
- 必須。 特定
LocalまたはCluster。 - アプリへのクライアントリクエストの送信元IPアドレスを保持するには、
Localに設定してください。 この設定により、着信トラフィックが別のノードに転送されなくなります。 このオプションは、HTTP ヘルス・チェックも構成します。 Clusterが設定されている場合、DSRは、VPC NLBが着信リクエストを最初に転送したワーカーノードからのみ実装されます。 着信要求が到着すると、その要求は、別のゾーンにある可能性があるアプリ・ポッドを含むワーカー・ノードに転送されます。 アプリ・ポッドからの応答が元のワーカー・ノードに送信されると、そのワーカー・ノードが DSR を使用し、VPC NLB をバイパスして応答を直接クライアントに送信します。 このオプションは、TCP ヘルス・チェックも構成します。 UDP ロードバランサーの場合、「Cluster」オプションを選択するには、「service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp」が必要です。 詳細については、「 UDP ロードバランサー向けの TCP ヘルスチェックの設定 」を参照してください。
- 必須。 特定
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota- オプション。 ロード バランサーがルーティングするゾーンごとのワーカー ノードの数。 デフォルト値は 8 です。 3 つのゾーンにワーカー ノードがあるクラスターの場合、ロード バランサーは合計 24 個のワーカー ノードにルーティングされます。 ロード バランサーがルーティングするすべてのゾーンのワーカー ノードの合計数は 50 を超えることはできません。 クラスターのすべてのゾーンにわたるワーカー ノードが 50 未満の場合、ゾーン内のすべてのワーカー ノードにルーティングするには 0 を指定します。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group- オプション。 VPC ロードバランサーに追加する顧客管理のセキュリティ グループ。 使用したくない場合は IBM-管理されたセキュリティグループ 所有および管理するセキュリティ グループを指定します。 このオプションは、IBM管理対象のセキュリティ グループを削除し、指定したセキュリティ グループに置き換えます。 既存のロードバランサーから注釈を削除すると、追加したセキュリティグループがIBM管理されたセキュリティ グループ。 この注釈はいつでも追加または削除できます。 セキュリティ グループを管理し、最新の状態に保つ責任はあなたにあります。
-
クラスターに Kubernetes
LoadBalancerサービスを作成します。oc apply -f <filename>.yaml -n <namespace> -
クラスターに Kubernetes
LoadBalancerサービスが正常に作成されたことを確認します。 サービスが作成されると、VPC NLB によって割り当てられた外部 IP アドレスが **「LoadBalancer Ingress」**フィールドに取り込まれます。
VPC NLB が VPC にプロビジョンされるまでに数分かかります。 VPC NLB のプロビジョンが完了するまで、Kubernetes LoadBalancer サービスの外部 IP アドレスが pending になることがあります。
```sh {: pre}
oc describe svc myloadbalancer -n <namespace>
```
プライベートの `LoadBalancer` サービスの CLI 出力例:
```sh {: screen}
NAME: myvpcnlb
Namespace: default
Labels: <none>
Annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb
service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private"
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet1_ID,subnet2_ID>"
Selector: app=echo-server
Type: LoadBalancer
IP: 172.21.204.12
LoadBalancer Ingress: 10.XXX.XXX.XXX
Port: tcp-80 80/TCP
TargetPort: 8080/TCP
NodePort: tcp-80 32022/TCP
Endpoints: 172.17.17.133:8080,172.17.22.68:8080,172.17.34.18:8080 + 3 more...
Session Affinity: None
External Traffic Policy: Local
HealthCheck NodePort: 30882
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SyncLoadBalancerFailed 13m (x5 over 15m) service-controller Error syncing load balancer: failed to ensure load balancer: kube-bqcssbbd0bsui62odcdg-2d93b07decf641d2ad3f9c2985122ec1 for service default/myvpcnlb is busy: offline/create_pending
Normal EnsuringLoadBalancer 9m27s (x7 over 15m) service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 9m20s service-controller Ensured load balancer
Normal CloudVPCLoadBalancerNormalEvent 8m17s ibm-cloud-provider Event on cloud load balancer myvpcnlb for service default/myvpcnlb with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
```
-
VPC NLB が VPC に正常に作成されたことを確認します。 出力で、VPC NLB の**「Operating Status」が
online、「Provision Status」**がactiveであることを確認します。ibmcloud is load-balancers以下の CLI 出力例では、
kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96eという名前の VPC NLB が KubernetesLoadBalancerサービス用に作成されています。ID Name Created Host Name Is Public Listeners Operating Status Pools Private IPs Provision Status Public IPs Subnets Resource Group 06496f64-a689-4693-ba23-320959b7b677 kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96e 8 minutes ago 1234abcd-us-south.lb.appdomain.cloud no 95482dcf-6b9b-4c6a-be54-04d3c46cf017 online 717f2122-5431-403c-b21d-630a12fc3a5a 10.XXX.XXX.XXX active - c6540331-1c1c-40f4-9c35-aa42a98fe0d9 00809211b934565df546a95f86160f62 -
VPC プライベート・ネットワークへの接続から、手順 6 で確認した Kubernetes
LoadBalancerサービスの IP アドレスとアプリ・ポート (<external_IP>:<app_port>の形式) にアクセスします。 -
オプション: これらのステップを繰り返して、アプリを公開する各ゾーンにプライベート VPC NLB をデプロイします。 その後、各ゾーン内の VPC NLB の外部 IP アドレスを 1 つの DNS サブドメインに登録できます。
DNS レコードおよび TLS 証明書の登録
VPC NLB は、アプリへのアクセスに使用できる静的外部 IP アドレスを提供します。 HTTPS に対応するためにアプリ・ドメインの SSL 証明書を登録するには、IBM 提供のサブドメインを作成するか、カスタム・ドメインを持ち込みます。
例えば、マルチゾーン・クラスターがあり、そのクラスターの各ゾーンでワーカー・ノード上のアプリのレプリカを実行するとします。 ゾーンごとに 1 つの VPC NLB を作成して、アプリのレプリカを公開します。 その後、各 VPC NLB によって提供される外部 IP アドレスを 1 つの DNS エントリーに登録できます。
VPC NLB の DNS サブドメインを作成した後に、nlb-dns health-monitor コマンドでカスタム・ヘルス・チェックを作成することはできません。 代わりに、デフォルトの VPC ヘルス・チェックが使用されます。 詳しくは、VPC の資料を参照してください。
- アプリのゾーンごとに VPC NLB を 1 つ作成します。 VPC NLB を構成する Kubernetes
LoadBalancerサービスに HTTPS ポートを定義するようにしてください。 - HTTPS 経由でアプリケーションにアクセスするために SSL 証明書を使用するには、アプリケーションが TLS 接続を終了できる必要があります。
VPC NLB の IP アドレスを DNS サブドメインに登録するには、次のようにします。
-
ロード・バランサーの外部 IP アドレスを取得します。
oc get svc -o wide出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR ... myapp-vpc-nlb-jp-tok-3 LoadBalancer 172.21.xxx.xxx 169.xx.xxx.xx 8080:30532/TCP 1d run=webserver -
IP アドレスの、カスタム DNS サブドメインまたは IBM 提供の DNS サブドメインを作成します。
-
カスタム・ドメイン:
- ドメイン・ネーム・サービス (DNS) プロバイダーを利用するか、または IBM Cloud DNS を使用して、カスタム・ドメインを登録します。
- ロード・バランサーの IP アドレスを A レコードとして指定して、カスタム・ドメインの別名を定義します。
-
IBM 提供のサブドメイン:
nlb-dnsコマンドを使用して、IP アドレスのサブドメインおよび SSL 証明書を生成します。IBM Cloud によって、サブドメインのワイルドカード SSL 証明書の生成と保守が行われます。- DNS サブドメインと SSL 証明書を作成します。
ibmcloud oc nlb-dns create vpc-gen2 --type public --cluster <cluster_name_or_id> --ip <vpc_nlb1_ip> --ip <vpc_nlb2_ip> --ip <vpc_nlb3_ip> - サブドメインが作成されたことを確認します。 詳しくは、サブドメインのフォーマットについてを参照してください。
出力例ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>Subdomain IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud 169.46.xx.x,169.48.xxx.xx,169.48.xxx.xx None created <certificate>
- DNS サブドメインと SSL 証明書を作成します。
-
-
Web ブラウザーを開き、サブドメインを使用してアプリにアクセスするための URL を入力します。
HTTPS 経由でアプリケーションにアクセスするために SSL 証明書を使用するには、HTTPS ポートが Kubernetes LoadBalancer サービスで定義されていることを確認してください。 curl -v --insecure https://<domain> を実行すると、要求が HTTPS ポートで正しく転送されているか確認できます。
接続エラーが発生する場合、サービスで HTTPS ポートが開いていないことを示します。 また、ご使用のアプリで TLS 接続を終了できることを確認してください。 curl -v https://<domain> を実行すると、アプリが TLS を適切に終端するか確認できます。 証明書エラーは、アプリが TLS 接続を適切に終了していないことを示します。
VPC アプリケーション・ロード・バランサーのセットアップ
クラスターで Kubernetes LoadBalancer サービスをセットアップして、アプリをパブリック・ネットワークまたはプライベート・ネットワークに公開します。 アプリを公開すると、要求をアプリに転送する VPC アプリケーション・ロード・バランサー (VPC ALB) が VPC 内のクラスターの外に自動的に作成されます。 VPC ALBは、 TCP プロトコルのみをサポートしています。
VPC 用アプリケーション・ロード・バランサーを Red Hat OpenShift on IBM Cloud Ingress のアプリケーション・ロード・バランサーと混同しないでください。 VPC アプリケーション・ロード・バランサー (VPC ALB) は、VPC 内のクラスターの外で実行され、ユーザーが作成する Kubernetes LoadBalancer サービスによって構成されます。 Ingress アプリケーション・ロード・バランサー (ALB) は、クラスター内部のワーカー・ノードで実行される Ingress コントローラーです。
パブリック VPC ALB またはプライベート VPC ALB のセットアップ
開始前に
- VPC NLB用の Kubernetes
LoadBalancerサービスをデプロイする名前空間に対して、 作家 または、 マネージャー IBM Cloud IAM サービスのアクセスロール が割り当てられていることを確認してください。 - Red Hat OpenShift クラスターにアクセスします。
- VPC ALB を表示するには、
infrastructure-serviceプラグインをインストールします。 コマンドを実行するための接頭部は、ibmcloud isです。ibmcloud plugin install infrastructure-service
アプリがパブリック要求またはプライベート要求を受信できるようにするには、以下のようにします。
-
アプリをクラスターにデプロイします。 デプロイメント構成ファイルの metadata セクションに、ラベルを追加しておく必要があります。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。
-
Kubernetes
LoadBalancerサービスの構成 YAML ファイルを作成し、ファイルにmyloadbalancer.yamlという名前を付けます。apiVersion: v1 kind: Service metadata: name: myloadbalancer 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: "proxy-protocol" service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "<public_or_private>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector: "<key>=<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet1_ID,subnet2_ID>" service.kubernetes.io/ibm-load-balancer-cloud-provider-zone: "<zone>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol: "<protocol>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port: "<port>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path: "<url_path>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota: "<value>" service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group: "<security-group>" 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.service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"-
オプション。 VPC ロード・バランサーを永続的にするには、固有の名前を指定します。 永続 VPC ロード・バランサーは、属しているクラスターが削除されても削除されません。 詳しくは、 永続 VPC ロード・バランサー を参照してください。
service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "proxy-protocol"-
オプション :PROXYプロトコルを有効にします。 ロード・バランサーは、クライアントの IP アドレス、プロキシー・サーバーの IP アドレス、両方のポート番号などのクライアント接続情報を要求ヘッダーに入れてバックエンド・アプリに渡します。 PROXY プロトコルを受け入れるようにバックエンド・アプリを構成しておく必要があります。 たとえば、 以下の手順に従って、 NGINX アプリがPROXYプロトコルを受け入れるように設定できます。
service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type-
パブリック要求またはプライベート要求を受け入れるサービスを指定する注釈。 このアノテーションを含めない場合は、パブリックの
LoadBalancerが作成されます。 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector-
- ワーカーノードのラベルセレクタを指定するための注釈。 トラフィックを受信するワーカー・ノードを指定するために、サポートされているラベル・セレクター・キーのいずれかを選択できます。 このアノテーションにはラベル・セレクターを 1 つだけ指定できること、また、セレクターは
"key=value"という形式で指定する必要があることに注意してください。 このアノテーションを指定しない場合は、クラスター内のすべてのワーカー・ノードが、VPC ALB からのトラフィックを受信するように構成されます。 指定した場合は、このアノテーションが、service.kubernetes.io/ibm-load-balancer-cloud-provider-zoneアノテーションよりも優先されるので、ワーカー・ノードのdedicated: edgeラベルは無視されます。 - 次のキーを使用できます。 -
ibm-cloud.kubernetes.io/internal-ip-ibm-cloud.kubernetes.io/machine-type-ibm-cloud.kubernetes.io/os-ibm-cloud.kubernetes.io/region-ibm-cloud.kubernetes.io/subnet-id-ibm-cloud.kubernetes.io/worker-pool-id-ibm-cloud.kubernetes.io/worker-pool-name-ibm-cloud.kubernetes.io/zone-kubernetes.io/arch-kubernetes.io/hostname-kubernetes.io/os-node.kubernetes.io/instance-type-topology.kubernetes.io/region-topology.kubernetes.io/zone
- ワーカーノードのラベルセレクタを指定するための注釈。 トラフィックを受信するワーカー・ノードを指定するために、サポートされているラベル・セレクター・キーのいずれかを選択できます。 このアノテーションにはラベル・セレクターを 1 つだけ指定できること、また、セレクターは
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets-
VPC ALB サービスがデプロイを行う 1 つ以上のサブネットを指定するための注釈。 指定した場合、このアノテーションは
service.kubernetes.io/ibm-load-balancer-cloud-provider-zoneアノテーションよりも優先されます。 同じ VPC にあるサブネットで、クラスターが接続されているものとは別のサブネットを指定できることに留意してください。 その場合、VPC ALB は同じ VPC 内の別のサブネットにデプロイされますが、それでもクラスター・サブネット上のワーカー・ノードにトラフィックを転送できます。 すべてのリソース・グループのサブネットを確認するには、ibmcloud oc subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone>を実行します。 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone-
クラスターが接続されている VPC ゾーンを指定するアノテーション。 このアノテーションでゾーンを指定すると、次の 2 つの処理が行われます。
- VPC ALB が、そのゾーンのワーカー・ノードが接続されているのと同じサブネットにデプロイされます。
- そのゾーンのクラスターのワーカー・ノードのみが、VPC ALB からのトラフィックを受信するように構成されます。
-
ゾーンを表示するには、
ibmcloud oc zone ls --provider vpc-gen2を実行します。 -
- ロード・バランサーを特定のゾーンに配置するには、ロード・バランサーを作成する際にこのアノテーションを指定する必要があります。 後でこのアノテーションを別のゾーンに変更しても、ロード・バランサー自体は新規ゾーンに移動されません。 ただし、ロード・バランサーは、新規ゾーン内のワーカー・ノードのみにトラフィックを送信するように再構成されます。
- ワーカー・ノードに
dedicated: edgeラベルを設定し、このアノテーションを指定すると、指定したゾーン内のエッジ・ノードのみがトラフィックを受信するように構成されます。 他のゾーンのエッジ・ノードや、指定したゾーンの非エッジ・ノードは、ロード・バランサーからトラフィックを受信しません。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol-
オプション: このアノテーションは、 Kubernetes ロード・バランサー・サービスに関連付けられた VPC ロード・バランサー・リソースのヘルス・チェック・プロトコルを設定します。 通常、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も指定されている場合にのみ適用されます。 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 のパスは、 origin-form リクエストターゲットの形式で指定する必要があります。
- このアノテーションが指定されず、
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-idle-connection-timeout-
オプション。 リスナーのアイドル接続タイムアウト(秒) 。 デフォルトのアイドル・タイムアウトは、アカウント設定によって異なります。 通常、この値は
50です。 ただし、許可リストに登録されている一部のアカウントでは、タイムアウト設定が大きくなっています。 アノテーションを設定しない場合、ロード・バランサーはアカウントのタイムアウト設定を使用します。 このアノテーションを設定することにより、タイムアウトを明示的に指定できます。 最小は50です。 最大値は7200です。 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-instance-crn: "private-dns-crn"-
オプション。 バージョンではプライベートVPC ALBにのみ適用できます4.15またはそれ以降。 このロードバランサーに関連付けるDNS
instance。 詳細については、プライベートDNSレコードの登録。 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-zone-id: "dns-zone-id"-
オプション。 バージョンではプライベートVPC ALBにのみ適用できます4.15またはそれ以降。 このロードバランサーに関連付けるDNS
zone。 詳細については、プライベートDNSレコードの登録。 selector-
アプリ・デプロイメント YAML の
<selector_key>セクションで使用したラベル・キー (<selector_value>) と値 (spec.template.metadata.labels)。 このカスタム・ラベルにより、アプリが実行されるすべてのポッドが識別されてロード・バランシングに含められます。 port-
サービスが listen するポート。
targetPort-
オプション: サービスがトラフィックを転送する宛先ポート。 ポッド内で実行されているアプリケーションは、このターゲットポートで TCP からのトラフィックをリッスンしている必要があります。 多くの場合、ターゲット・ポートは、アプリケーション・ポッドで実行されているイメージで静的に定義されます。 ポッドで構成されているターゲット・ポートは、サービスのノード・ポートとは異なり、VPC LB で構成されている外部ポートとも異なる場合があります。
externalTrafficPolicy-
- 必須。 特定
LocalまたはCluster。 - アプリへのクライアントリクエストの送信元IPアドレスを保持するには、
Localに設定してください。 この設定により、着信トラフィックが別のノードに転送されなくなります。 このオプションは、HTTP ヘルス・チェックも構成します。 UDP ロードバランサーの場合、「Cluster」オプションを選択するには、「service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp」が必要です。 詳細については、「 UDP ロードバランサー向けの TCP ヘルスチェックの設定 」を参照してください。
- 必須。 特定
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota-
オプション。 ロード バランサーがルーティングするゾーンごとのワーカー ノードの数。 デフォルト値は 8 です。 3 つのゾーンにワーカー ノードがあるクラスターの場合、ロード バランサーは合計 24 個のワーカー ノードにルーティングされます。 ロード バランサーがルーティングするすべてのゾーンのワーカー ノードの合計数は 50 を超えることはできません。 クラスターのすべてのゾーンにわたるワーカー ノードが 50 未満の場合、ゾーン内のすべてのワーカー ノードにルーティングするには 0 を指定します。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group-
オプション。 VPC ロードバランサーに追加する顧客管理のセキュリティ グループ。 使用したくない場合は IBM-管理されたセキュリティグループ 所有および管理するセキュリティ グループを指定します。 このオプションは、IBM管理対象のセキュリティ グループを削除し、指定したセキュリティ グループに置き換えます。 既存のロードバランサーから注釈を削除すると、追加したセキュリティグループがIBM管理されたセキュリティ グループ。 この注釈はいつでも追加または削除できます。 セキュリティ グループを管理し、最新の状態に保つ責任はあなたにあります。
-
クラスターに Kubernetes
LoadBalancerサービスを作成します。oc apply -f myloadbalancer.yaml -n <namespace> -
クラスターに Kubernetes
LoadBalancerサービスが正常に作成されたことを確認します。 サービスが作成されると、**「LoadBalancer Ingress」**フィールドに VPC ALB によって割り当てられたホスト名が取り込まれます。
VPC ALB が VPC にプロビジョンされるまでに数分かかります。 VPC ALB のプロビジョンが完了するまで、Kubernetes LoadBalancer サービスのホスト名を使用してアプリにアクセスすることはできません。
```sh {: pre}
oc describe svc myloadbalancer -n <namespace>
```
パブリックの `LoadBalancer` サービスの CLI 出力例:
```sh {: screen}
NAME: myvpcalb
Namespace: default
Labels: <none>
Annotations:
Selector: app=echo-server
Type: LoadBalancer
IP: 172.21.XX.XX
LoadBalancer Ingress: 1234abcd-us-south.lb.appdomain.cloud
Port: tcp-80 80/TCP
TargetPort: 8080/TCP
NodePort: tcp-80 30610/TCP
Endpoints: 172.17.17.133:8080,172.17.22.68:8080,172.17.34.18:8080 + 3 more...
Session Affinity: None
External Traffic Policy: Local
HealthCheck NodePort: 31438
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 16m service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 15m service-controller Ensured load balancer
Normal CloudVPCLoadBalancerNormalEvent 13m ibm-cloud-provider Event on cloud load balancer myvpcalb for service default/myvpcalb with UID 08cbacf0-2c93-4186-84b6-c4ab88a2faf9: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
```
-
VPC ALB が VPC に正常に作成されたことを確認します。 出力で、VPC ALB の**「Operating Status」が
online、「Provision Status」**がactiveであることを確認します。LoadBalancerサービス用に自動的に作成される VPC ALB の名前は変更しないでください。 VPC ALB の名前を変更すると、Red Hat OpenShift on IBM Cloud はLoadBalancerサービス用の別の VPC ALB を自動的に作成します。ibmcloud is load-balancers以下の CLI 出力例では、
kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306という名前の VPC ALB が KubernetesLoadBalancerサービス用に作成されています。ID Name Family Subnets Is public Provision status Operating status Resource group r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-3 true active online default -
パブリックの
LoadBalancerサービスを作成した場合は、手順 4 で確認した VPC ALB から割り当てられた KubernetesLoadBalancerサービスのホスト名を curl します。 次に例を示します。curl 06496f64-us-south.lb.appdomain.cloud:8080出力例
Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!プライベートの
LoadBalancerサービスを作成した場合は、プライベート VPC ネットワークに接続しないとホスト名を curl できません。
クラスターを作成するときやワーカー・ノードをゾーンに追加するときに、クラスターに接続しているサブネットを削除しないでください。 クラスターで使用されている VPC サブネットを削除すると、そのサブネットの IP アドレスを使用しているロード・バランサーで問題が発生するだけでなく、ロード・バランサーの新規作成もできなくなる可能性があります。
Kubernetes または OpenShift クラスターに関連付けられていない VPC ALB および NLB は、「ibmcloud is」コマンド、またはコンソールの「 VPC インフラストラクチャ 」セクションを使用して、直接更新できます。 例えば、フロントエンド・リスナーのポートまたはヘルス・チェックのタイムアウト値を変更します。 ただし、 Kubernetes やOpenShiftクラスターに関連付けられているVPCロードバランサーについては、それらの更新はIngress設定の注釈を通じて行う必要があります。 IBM Cloud プロバイダーは、関連付けられたVPC ALBおよびNLBと定期的に再同期を行い、稼働中のロードバランサーがIngressの想定される構成に準拠していることを確認します。 そのため、そのようなロード・バランサーに対して、Ingress アノテーションを使用する代わりに VPC を介して直接変更を行った場合、それらの変更は元に戻されます。
DNS レコードおよび TLS 証明書の登録
VPC アプリケーション・ロード・バランサー (VPC ALB) は、アプリへのアクセスに使用できる 1234abcd-<region>.lb.appdomain.cloud という形式のデフォルトの HTTP ホスト名を提供します。 しかし、HTTPS に対応するためにアプリのドメインに TLS 証明書が必要な場合は、パブリックとプライベートのどちらの VPC ALB についても、IBM 提供のサブドメインを作成したり、カスタム・ドメインを持ち込んだりできます。
VPC ALB のホスト名の DNS サブドメインを作成した後に、nlb-dns health-monitor コマンドでカスタム・ヘルス・チェックを作成することはできません。 代わりに、デフォルトの VPC ALB のホスト名用に提供されるデフォルトの VPC ロード・バランサー・ヘルス・チェックが使用されます。 詳しくは、VPC の資料を参照してください。
開始前に
- VPC ALB をセットアップします。 VPC ALB を構成する Kubernetes
LoadBalancerサービスに HTTPS ポートを定義するようにしてください。 - TLS 証明書を使用して HTTPS でアプリにアクセスするには、アプリが TLS 接続を終端できる必要があります。
DNS サブドメインを使用して VPC ALB のホスト名を登録するには、次のようにします。
-
get svcコマンドを実行して、VPC ALB のホスト名を取得します。 出力の EXTERNAL-IP 列でホスト名を探します。 例えば、1234abcd-us-south.lb.appdomain.cloudなどです。oc get svc -o wide出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR ... webserver-lb LoadBalancer 172.21.xxx.xxx 1234abcd-us-south.lb.appdomain.cloud 8080:30532/TCP 1d run=webserver -
ロード・バランサーのホスト名の、カスタム DNS サブドメインまたは IBM 提供の DNS サブドメインを作成します。
-
カスタムドメイン :独自のカスタムドメインを用意し、ロードバランサーの外部IPを「
1234abcd-us-south.lb.appdomain.cloud」という形式で指定して、CNAMEレコードとしてエイリアスを設定してください。- ドメイン・ネーム・サービス (DNS) プロバイダーを利用するか、または IBM Cloud DNS を使用して、カスタム・ドメインを登録します。
- ロードバランサーの外部IPアドレスを正規名レコード(CNAME)として指定し、カスタムドメインのエイリアスを定義します。 以下の例では、
1234abcd-us-south.lb.appdomain.cloudという外部 IP を持つロード・バランサーにwww.your-custom-domain.comで到達できます。
- ホスト/サービス
- アプリにアクセスするための接頭部 (
wwwなど)。 - リソース・タイプ
CNAMEを選択します。- TTL
- 存続時間を選択してください。
- 値/ターゲット
- 前に取得した LoadBalancer 外部 IP。 例えば、
1234abcd-us-south.lb.appdomain.cloud.などです。 IBM Cloud DNS を使用する場合は、必ず末尾にピリオドを入力してください。
-
IBM 提供のサブドメイン:
nlb-dnsコマンドを使用して、VPC ALB のホスト名用のサブドメインと TLS 証明書を生成します。IBM Cloud によって、サブドメインのワイルドカード TLS 証明書の生成と保守が行われます。- DNS サブドメインと TLS 証明書を作成します。
ibmcloud oc nlb-dns create vpc-gen2 --cluster <cluster_name_or_id> --lb-host <vpc_lb_hostname> --type (public|private) - サブドメインが作成されたことを確認します。 詳しくは、サブドメインのフォーマットについてを参照してください。
出力例ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate>
- DNS サブドメインと TLS 証明書を作成します。
-
-
パブリック VPC ALB のサブドメインを作成した場合は、Web ブラウザを開き、 URL を入力して、
www.your-custom-domain.comのようなサブドメイン経由でアプリにアクセスしてください。 プライベート VPC ALB のサブドメインを作成した場合は、プライベート VPC ネットワークに接続した状態で、サブドメインへのアクセスをテストする必要があります。
TLS 証明書を使用して HTTPS でアプリにアクセスするために、Kubernetes の LoadBalancer サービスに HTTPS ポートを定義したことを確認してください。 curl -v --insecure https://<domain> を実行すると、要求が HTTPS ポートで正しく転送されているか確認できます。 接続エラーが発生する場合、サービスで
HTTPS ポートが開いていないことを示します。 また、ご使用のアプリで TLS 接続を終了できることを確認してください。 curl -v https://<domain> を実行すると、アプリが TLS を適切に終端するか確認できます。 証明書エラーは、アプリが TLS 接続を適切に終了していないことを示します。
プライベート VPC ALB のプライベート DNS レコードの登録
バージョン4.15または、後で次のオプションの注釈を使用して独自のDNSを関連付けることができます instance カスタムDNSを提供する zone プライベート VPC ALB を使用します。 このため、オプションの注釈を両方とも設定する必要があります。 指定されていない場合はDNS A このロードバランサーの記録 hostname プロパティはパブリックDNSゾーンに追加されます
lb.appdomain.cloud。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-instance-crn: "private-dns-crn"- このロードバランサーに関連付けるDNS
instance。 指定されたインスタンスは、IAM ポリシーに従って、別のリージョンまたはアカウントに存在する場合があります。 可能な値: 9 ≤ 長さ ≤ 512 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-zone-id: "dns-zone-id"- このロードバランサーに関連付けるDNS
zone。 指定されたゾーンは、IAM ポリシーに従って、別のリージョンまたはアカウントに存在する場合があります。 許容される値:1 ≤ 長さ ≤ 128。値は正規表現 [1]*[a-z0-9]$ に一致する必要があります
この機能を使用する前に、前提条件として次の操作を実行する必要があります。
- ロードバランサーにバインドできるDNSゾーンを作成する
- VPC LB間のサービス間認証を有効にし、DNS Services
- クラスターのVPCをゾーンの許可されたネットワークに追加する
詳細については、「 アプリケーション・ロードバランサーを IBM Cloud DNS Services と統合する 」および「 DNSゾーンに許可されたネットワークとしてVPCを追加する 」の各ドキュメントを参照してください。
次に例を示します。
apiVersion: v1
kind: Service
metadata:
name: myloadbalancer
annotations:
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private"
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-instance-crn: "crn:v1:bluemix:public:dns-svcs:global:a/bb1b52262f7441a586f49068482f1e60:f761b566-030a-4696-8649-cc9d09889e88::"
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-zone-id: "d66662cc-aa23-4fe1-9987-858487a61f45"
spec:
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 169.60.115.164
...
永続 VPC ロード・バランサー
デフォルトでは、VPC ロード・バランサーは、関連付けられているクラスターが削除されると削除されます。 ただし、 LoadBalancer サービス定義を作成するときに、クラスターが削除された後もロード・バランサーが使用可能なままになるように、ロード・バランサーを永続的なものにすることができます。 永続 VPC ロード・バランサーは、以前のクラスターが削除された後に別のクラスターに適用できます。
VPC ロード・バランサー名は、デフォルトで kube-<cluster_ID>-<kubernetes_lb_service_UID> としてフォーマット設定されます。 クラスターが削除されると、この名前フォーマットは、関連付けられたロード・バランサーも削除されることを指定します。 クラスターの削除時にロード・バランサーが削除されないようにするには、 LoadBalancer サービス定義に service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name アノテーションを含めて、ロード・バランサーに固有の名前を付けます。 ロード・バランサー名は VPC 内で固有でなければならず、小文字の英数字とハイフン (-) のみを含めることができます。 アノテーションは、すべての VPC ロード・バランサー・タイプに適用できます。
永続 VPC ロード・バランサーが不要になった場合は、お客様の責任で削除してください。 永続 VPC ロード・バランサーを削除するには、VPC ロード・バランサーが関連付けられている Kubernetes LoadBalancer サービス定義を削除します。
クラスター間での VPC ロード・バランサーの移動
永続 VPC ロード・バランサー は、1 つの VPC クラスターから切り離してから、別の VPC クラスターに接続することができます。 新規クラスターは、元のクラスターと同じ VPC 内になければなりません。
クラスターからの VPC ロード・バランサーの切り離し
VPCロードバランサーは、その作成時に指定された Kubernetes ( LoadBalancer )のサービス定義に関連付けられています。 永続 VPC ロード・バランサーをクラスターから切り離すには、 VPC ロード・バランサーの名前を変更 するか、元の LoadBalancer サービス定義から service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name アノテーションを削除して、 LoadBalancer サービスとのリンクを切断する必要があります。 クラスターを削除 して、永続 VPC ロード・バランサーをクラスターから切り離すこともできます。
アノテーションを削除すると、元の LoadBalancer サービスが元に戻り、元のクラスターに非永続 VPC ロード・バランサーが作成されます。 この非永続 VPC ロード・バランサーは、 kube-<cluster_ID>-<kubernetes_lb_service_UID> 命名規則に従います。
クラスターへの VPC ロード・バランサーの接続
永続的なVPCロードバランサーがクラスターから切り離された後、そのVPCロードバランサーを参照する新しい Kubernetes LoadBalancer サービス定義を作成することで、別のクラスターにアタッチすることができます。
新しいクラスター上に新しい LoadBalancer サービスを作成するときに、 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name アノテーションを使用して、接続する VPC ロード・バランサーの名前を指定できます。
LoadBalancer サービスを作成する場合は、VPC ロード・バランサー・タイプ (ALB、NLB) と IP タイプ (パブリック、プライベート) が LoadBalancer サービスの仕様と一致している必要があります。 例えば、NLB タイプを指定する新規クラスター上の既存の LoadBalancer サービスを使用して VPC ALB をクラスターに接続することはできません。 ロード・バランサー・タイプと IP
タイプを指定するアノテーションは、それぞれ service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features と service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type です。
LoadBalancer サービスで指定するポートとノード・ポートは、VPC ロード・バランサーの作成に使用したポートと一致している必要はありません。 VPC ロード・バランサーは、新規クラスター内で関連付けられている LoadBalancer サービスのポート定義を使用して再構成します。
ロード・バランサーのヘルス・チェック
VPC ロード・バランサーは、 externalTrafficPolicy アノテーションを使用して構成するヘルス・チェックによって自動的に構成されます。 追加のアノテーションを使用して、ロード・バランサーの ヘルス・チェックをカスタマイズ できます。
externalTrafficPolicyがClusterに設定されている場合、TCP ヘルス・チェックが適用されます。 UDP ロード・バランサーを構成する場合は、追加のポートを指定する必要があります。externalTrafficPolicyがLocalに設定されている場合、HTTP ヘルス・チェックが適用されます。 着信トラフィックは、その特定のノードにあるアプリケーション・ポッドにのみ配信されます。 その特定のノードにアプリケーション・ポッドがない場合、着信トラフィックはドロップされます。
externalTrafficPolicy: Local 設定が原因で、ロード・バランサー・ワーカー・ノードのヘルス・チェックが失敗する可能性があります。 通常、この結果は予期される動作であり、必ずしも問題を示すものではありません。ロード・バランサーがアプリケーション・ポッドを持たないノードに接続しようとすると、トラフィックが意図的にドロップされるためです。 詳しくは、 ワーカー・ノードで VPC ロード・バランサーのヘルス・チェックが失敗するのはなぜですか? を参照してください。
VPC ロード・バランサーのヘルス・チェックのカスタマイズ
VPC ロード・バランサーのヘルス・チェックをより詳細に制御するために、オプションのアノテーションを使用して、テスト間隔、タイムアウト、および再試行の拡張構成でヘルス・チェックをカスタマイズできます。 これらのカスタマイズはいつでも変更または削除できます。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol- オプション: このアノテーションは、 Kubernetes ロード・バランサー・サービスに関連付けられた VPC ロード・バランサー・リソースのヘルス・チェック・プロトコルを設定します。 通常、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も指定されている場合にのみ適用されます。 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 のパスは、 origin-form リクエストターゲットの形式で指定する必要があります。
- このアノテーションが指定されず、
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です。
UDP ロード・バランサーの TCP ヘルス・チェックの有効化
UDP ヘルス・チェックはないため、TCP ヘルス・チェックを使用する UDP ロード・バランサーには、service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp アノテーションを使用して追加の TCP ポートを指定する必要があります。
クラスター内で実行されている別のロード・バランサーまたは NodePort の TCP ノード・ポートを指定できます。 ただし、ノード・ポートが 30000-32767 範囲外にある場合は、指定されたポートへの着信トラフィックを許可するように VPC クラスター・セキュリティー・グループ kube-<cluster-ID> を変更する必要があります。
なお、指定したポート値が、予期せず停止したサービス、またはポート値が再設定されたサービスのものである場合、そのサービスが復旧するか、 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp アノテーションを新しい TCP ポート値で再設定するまで、 TCP のヘルスチェックは機能しなくなります。 これを回避するには、kubelet ポート 10250 を指定します。これは、サービスの中断が発生しない静的ポート値です。 ただし、kubelet ポートからの着信トラフィックを受け入れるには、VPC クラスター・セキュリティー・グループを変更kube-<cluster-ID>する必要があります。
UDP のロードバランサーで、ヘルスチェック用に TCP のポートを追加で指定する手間を省きたいですか? 追加のポート指定を必要としない HTTP ヘルス・チェックを使用するには、externalTrafficPolicy を Local に設定します。
ロード・バランサーのサブネットまたはゾーンの変更
VPC NLB の作成後に、VPC NLB の作成に使用した listen サブネットを再構成することはできません。 既存のVPC NLBのリスニングサブネットを変更するには、対応する Kubernetes LoadBalancer サービスを削除し、更新してから、再度適用する必要があります。
-
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
Kubernetes サービスをリストし、変更する
LoadBalancerサービスの名前を見つけます。oc get services出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-load-balancer LoadBalancer 172.21.77.198 52.118.150.107 8080:32767/TCP,443:30943/TCP 5d -
Kubernetes
LoadBalancerサービスに対応する VPC ロード・バランサーを見つけます。VPC ロード・バランサーの名前の形式は
kube-<cluster_ID>-<kubernetes_lb_service_UID>です。 クラスター ID を確認するには、ibmcloud ks cluster get --cluster <cluster_name>を実行します。 Kubernetes LoadBalancer サービスの UID を調べるには、oc get svc <load-balancer-name> -o yamlを実行して出力中の 「metadata.uid」フィールドを確認します。 VPCロードバランサー名に含まれる Kubernetes のLoadBalancerサービスUIDから、ハイフン(-)が削除されます。ibmcloud is load-balancers出力例
ID Name Family Subnets Is public Provision status Operating status Resource group r000-5aaaa11f6-c111-111f-b2e0-1c11aaaaf0dc0 kube-c441c43d02mb8mg00r70-3e25d0b5bf11111111fe4ca3f11111cb Network subnet-1 true active online default Application -
Kubernetes
LoadBalancerサービス定義を取得し、my-lb.yamlという名前の yaml ファイルとして出力を保存します。oc describe service my-load-balancer -o yaml -
Kubernetes
LoadBalancerサービスを削除します。 これにより、対応する VPC ロード・バランサーも削除されます。oc delete service my-load-balancer -
実装するサブネットまたはゾーンの変更内容で Kubernetes
LoadBalancerサービス定義ファイルを更新します。LoadBalancerサービスの名前は変更しないでください。 ネットワーク・ロード・バランサーのサブネットまたはゾーンの指定について詳しくは、「Network Load Balancer for VPC のセットアップ (Setting up a Network Load Balancer for VPC)」を参照してください。 -
新しい
LoadBalancer定義ファイルを適用します。oc apply -f my-lb.yaml -
Kubernetes
LoadBalancerサービスがクラスター内で正常に再作成されたことを確認します。 サービスが作成されると、「 LoadBalancer 」のIngress フィールドには、NLBの外部IPアドレスが入力されます。oc describe service my-load-balancer出力例
NAME: my-load-balancer Namespace: default Labels: <none> Annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb Selector: app=echo-server Type: LoadBalancer IP: 172.X.XXX.XX LoadBalancer Ingress: 169.XXX.XXX.XXX Port: tcp-80 80/TCP TargetPort: 8080/TCP NodePort: tcp-80 32022/TCP Endpoints: 172.XX.XX.XXX:8080,172.XX.XX.XX:8080,172.XX.XX.XX:8080 + 3 more... Session Affinity: None External Traffic Policy: Local HealthCheck NodePort: 30882 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 9m27s (x7 over 15m) service-controller Ensuring load balancer Normal EnsuredLoadBalancer 9m20s service-controller Ensured load balancer Normal CloudVPCLoadBalancerNormalEvent 8m17s ibm-cloud-provider Event on cloud load balancer myvpcnlb for service default/my-load-balancer with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active. -
VPC ロード・バランサーが再作成され、サブネットまたはゾーンが更新されたことを確認します。 VPCロードバランサーのプロビジョニングには数分かかるため、プロビジョニングが完了するまでは「
create_pending」というステータスが表示される場合があることにご注意ください。ibmcloud is load-balancers出力例
ID Name Family Subnets Is public Provision status Operating status Resource group r006-5ecc68f6-c751-409f-b2e0-1c69babf0dc0 kube-c441c43d02mb8mg00r70-3e25d0b5bf03445796fe4ca3f73885cb Network subnet-2 true active online default
制限
以下のデフォルト設定と制限について確認してください。
- VPC ALB の既知の制限と VPC NLB の既知の制限を確認してください。
- プライベート VPC ALB は、すべてのトラフィックを受け入れるわけではなく、RFC 1918 トラフィックのみを受け入れます。
- プライベート VPC NLB を作成する専用の VPC サブネットは、クラスターと同じ VPC の同じロケーションに存在する必要がありますが、そのサブネットをクラスターやワーカー・ノードに接続することはできません。
- Red Hat OpenShift: Kubernetes SCTP プロトコル は Kubernetes コミュニティー・リリースで一般提供されていますが、このプロトコルを使用するロード・バランサーの作成は、 IBM Cloud Kubernetes Service クラスターではサポートされていません。
- VPC ロード・バランサーは、作成した Kubernetes
LoadBalancerサービスごとに 1 つ作成され、その KubernetesLoadBalancerサービスにのみ要求を転送します。 VPC 内のすべての VPC クラスターで、最大 50 個の VPC ロード・バランサーを作成できます。 詳しくは、VPC の割り当て量の資料を参照してください。 - VPC ロード・バランサーは、限られた数のワーカー・ノードに要求をルーティングできます。 要求をルーティングできるノードの最大数は、
externalTrafficPolicyアノテーションの設定方法によって異なります。- ロード・バランサー構成で
externalTrafficPolicy: Clusterを設定した場合は、以下のようにします。- VPC ロード・バランサーは、各ゾーンでディスカバーされた最初の 8 つのワーカー・ノードにルーティングします。 3 つのゾーンにワーカー ノードがあるクラスターの場合、ロード バランサーは合計 24 個のワーカー ノードにルーティングされます。 単一ゾーン・クラスターの場合、ロード・バランサーは合計 8 つのワーカー・ノードにルーティングします。 ロードバランサーがルーティングするゾーンごとのワーカーノードの数を変更するには、
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quotaただし、すべてのゾーンの合計数は 50 を超えることはできません。 クラスターのすべてのゾーンにわたるワーカー ノードが 50 未満の場合、ゾーン内のすべてのワーカー ノードにルーティングするには 0 を指定します。 のkube-proxyアプリケーション ポッドが存在するノード上のアプリケーション ポッドにワーカー ノードからの着信トラフィックをルーティングするように IP テーブルを構成します。
- VPC ロード・バランサーは、各ゾーンでディスカバーされた最初の 8 つのワーカー・ノードにルーティングします。 3 つのゾーンにワーカー ノードがあるクラスターの場合、ロード バランサーは合計 24 個のワーカー ノードにルーティングされます。 単一ゾーン・クラスターの場合、ロード・バランサーは合計 8 つのワーカー・ノードにルーティングします。 ロードバランサーがルーティングするゾーンごとのワーカーノードの数を変更するには、
- ロード・バランサー構成で
externalTrafficPolicy: Localを設定した場合、クラスター上にワーカー・ノードが 50 個以下の場合にのみ VPC ロード・バランサーが作成されます。 この制限は、VPC ロード・バランサー・プールごとに 50 個のプール・メンバーの VPC 割り当て量制限によって設定されます。 この制限を回避するには、service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selectorアノテーションを使用して、ロード・バランサー・プールに含めるワーカー・ノードを制限します。 例えば、このアノテーションを使用して、特定のワーカー・プールへの着信トラフィックを強制できます。 このアノテーションを使用して特定のワーカー・プールへのトラフィックを強制する場合は、アプリケーション・ポッドも同じワーカー・プールで実行する必要があります。
- ロード・バランサー構成で
- Kubernetes
LoadBalancerサービスの構成 YAML ファイルを定義する場合、以下の注釈と設定はサポートされません。service.kubernetes.io/ibm-load-balancer-cloud-provider-vlan: "<vlan_id>"service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"service.kubernetes.io/ibm-load-balancer-cloud-provider-ipvs-scheduler: "<algorithm>"spec.loadBalancerIPspec.loadBalancerSourceRanges- VPC NLB のみ:
service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "proxy-protocol" - VPC ALB のみ:
externalTrafficPolicy: Local設定はサポートされますが、この設定では要求の送信元 IP が保存されません。
- VPC クラスターを削除すると、
kube-<cluster_ID>-<kubernetes_lb_service_UID>形式で指定され、そのクラスター内の KubernetesLoadBalancerサービス用に Red Hat OpenShift on IBM Cloud によって自動的に作成される非永続 VPC ロード・バランサーも自動的に削除されます。 ただし、固有の名前を持つ 永続ロード・バランサー と、VPC で手動で作成した VPC ロード・バランサーは削除されません。 - VPC ロード・バランサーのホスト名には、最大 128 個のサブドメインを登録できます。 この制限は、サポート Caseを開いて、要求によって解除できます。
- VPC ロードバランサー用に登録するサブドメインは、130 文字以下に制限されています。
- VPC ALB は、クラスター・ワーカー・ノードが割り振られているのと同じ VPC サブネットで listen します。ただし、
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnetsアノテーションまたはservice.kubernetes.io/ibm-load-balancer-cloud-provider-zoneアノテーションを使用して Kubernetes ロード・バランサー・サービスを作成した場合は除きます。これにより、トラフィックが特定のノードに制限されます。- VPC ALB のサブネットとゾーンは、ALB の作成後に更新または変更できます。 クラスターにさらにゾーンを追加するか、
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnetsアノテーションまたはservice.kubernetes.io/ibm-load-balancer-cloud-provider-zoneアノテーションを使用して Kubernetes ロード・バランサー・サービスを更新すると、新しいサブネットを listen するように VPC ALB が更新されます。
- VPC ALB のサブネットとゾーンは、ALB の作成後に更新または変更できます。 クラスターにさらにゾーンを追加するか、
- VPC NLB は、単一ゾーン内の単一 VPC サブネットでのみ listen します。 複数の VPC サブネットで listen したり、複数のゾーンで listen したりするように構成することはできません。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnetsまたはservice.kubernetes.io/ibm-load-balancer-cloud-provider-zoneアノテーションを使用して、NLB が listen する単一サブネットを指定できます。- VPC NLB は、
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selectorまたはservice.kubernetes.io/ibm-load-balancer-cloud-provider-zone annotationsを使用して着信トラフィックを特定のワーカー・ノードに制限しない限り、クラスター内のすべてのワーカー・ノードに着信トラフィックを転送します。 トラフィックを特定のゾーンに制限するには、これらのアノテーションを使用して、そのゾーン内のワーカー・ノードを指定できます。
- VPC NLB は、
- ロード・バランサーの NodePort 割り振りの無効化は、VPC ロード・バランサーではサポートされていません。
- VPC NLBでは、 UDP と TCP を同じVPC LB上で設定できますが、リスニングポートは異なる必要があります。
-
a-z0-9- ↩︎