ロード・バランサおよびネットワーク・ロード・バランサの構成

Kubernetes Engine (OKE)がタイプLoadBalancerのKubernetesサービスに対してプロビジョニングするOracle Cloud Infrastructureロード・バランサおよびネットワーク・ロード・バランサを定義する方法をご紹介します。

内部ロード・バランサの作成

Oracle Cloud Infrastructureロード・バランサおよびネットワーク・ロード・バランサを作成して、クラスタ上にあるサービスへのアクセスを制御できます:

  • カスタム作成ワークフローでクラスタを作成する場合、新しいクラスタで使用するネットワーク・リソースを含む既存のVCNを選択します。ロード・バランサまたはネットワーク・ロード・バランサを使用してVCN内のトラフィックを制御する場合は、そのVCN内の既存のパブリック・サブネットまたはプライベート・サブネットを選択してそれをホストします。
  • クイック作成ワークフローでクラスタを作成する場合、自動的に作成されるVCNには、ロード・バランサまたはネットワーク・ロード・バランサをホストするためのパブリック・リージョン・サブネットが含まれます。ロード・バランサまたはネットワーク・ロード・バランサをプライベート・サブネットでホストする場合は、後でプライベート・サブネットをVCNに追加できます。

または、クラスタ内でLoadBalancerタイプの内部Kubernetesサービス(通常は単に「内部ロード・バランサ」と呼ばれます)を定義して、クラスタと同じVCNで実行されている他のプログラムがクラスタ内のサービスにアクセスできるようにすることもできます。内部ロード・バランサをプロビジョニングできます。

  • ロード・バランサとして、またはネットワーク・ロード・バランサとして
  • パブリックIPアドレス、またはプライベートIPアドレス(Load BalancerサービスまたはNetwork Load Balancerサービスによって割り当てられます)
  • パブリック・サブネット内またはプライベート・サブネット内

パブリックIPアドレスを持つロード・バランサまたはネットワーク・ロード・バランサは、パブリックと呼ばれます。パブリック・ロード・バランサまたはネットワーク・ロード・バランサは、パブリック・サブネットまたはプライベート・サブネットでホストできます。

プライベートIPアドレスを持つロード・バランサまたはネットワーク・ロード・バランサは、プライベートと呼ばれます。プライベート・ロード・バランサまたはネットワーク・ロード・バランサは、パブリック・サブネットまたはプライベート・サブネットでホストできます。

デフォルトでは、内部ロード・バランサはパブリックIPアドレスでプロビジョニングされ、パブリック・サブネットでホストされます。

詳細は次を参照してください。

  • Oracle Cloud Infrastructureのパブリックおよびプライベートのロード・バランサについては、Load Balancerのタイプを参照してください。
  • Oracle Cloud Infrastructureのパブリックおよびプライベート・ネットワーク・ロード・バランサについて、ネットワークLoad Balancerのタイプを参照してください
OCIロード・バランサとしての内部ロード・バランサの作成

クラスタの作成時にロード・バランサ用に指定されたサブネットでホストされるプライベートIPアドレスを持つOCIロード・バランサとして内部ロード・バランサを作成するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

service.beta.kubernetes.io/oci-load-balancer-internal: "true"

クラスタの作成時にロード・バランサ用に指定された代替サブネットにホストされたプライベートIPアドレスでホストされる、OCIロード・バランサとして内部ロード・バランサを作成するには、マニフェスト・ファイルのメタデータ・セクションに次の両方の注釈を追加します:

service.beta.kubernetes.io/oci-load-balancer-internal: "true"
service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"

ocid1.subnet.oc1..aaaaaa....vdfwは、代替サブネットのOCIDです。代替サブネットは、プライベート・サブネットまたはパブリック・サブネットにすることができます。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 8100
  selector:
    app: nginx
内部ネットワーク・ロード・バランサをOCIネットワーク・ロード・バランサとして作成します

クラスタの作成時にロード・バランサ用に指定されたサブネットでホストされるプライベートIPアドレスを持つOCIネットワーク・ロード・バランサとして内部ネットワーク・ロード・バランサを作成するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci-network-load-balancer.oraclecloud.com/internal: "true"

クラスタの作成時にロード・バランサ用に指定された代替サブネットにホストされるプライベートIPアドレスを持つOCIネットワーク・ロード・バランサとして内部ネットワーク・ロード・バランサを作成するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈の両方を追加します:

oci-network-load-balancer.oraclecloud.com/internal: "true"
oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"

ocid1.subnet.oc1..aaaaaa....vdfwは、プライベート・サブネットのOCIDです。代替サブネットは、プライベート・サブネットまたはパブリック・サブネットにすることができます。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/internal: "true"
    oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

予約済パブリックIPアドレスの指定

タイプLoadBalancerのKubernetesサービスがクラスタにデプロイされると、Kubernetes Engineは、クラスタへのトラフィックを受け入れるOracle Cloud Infrastructureパブリック・ロード・バランサまたはネットワーク・ロード・バランサを作成します。デフォルトでは、Oracle Cloud Infrastructureのパブリック・ロード・バランサまたはネットワーク・ロード・バランサにエフェメラル・パブリックIPアドレスが割り当てられます。ただし、一時的パブリックIPアドレスは一時的であり、パブリック・ロード・バランサまたはネットワーク・ロード・バランサの存続期間中のみ続きます。

デプロイメント後にKubernetesエンジンが作成するOracle Cloud Infrastructureパブリック・ロード・バランサまたはネットワーク・ロード・バランサに同じパブリックIPアドレス・デプロイメントを含める場合は、予約済パブリックIPアドレスのプールから予約済パブリックIPアドレスを割り当てることができます。予約済パブリックIPアドレスの作成および表示の詳細は、パブリックIPアドレスに関する項を参照してください。

Kubernetesエンジンが作成するOracle Cloud Infrastructureパブリック・ロード・バランサまたはネットワーク・ロード・バランサに予約済パブリックIPアドレスを割り当てるには、LoadBalancerタイプのサービスを定義するマニフェスト・ファイルのspecセクションにLoadBalancerIPプロパティを追加し、予約済パブリックIPアドレスを指定します。

予約済パブリックIPアドレスをパブリック・ロード・バランサに割り当てます

例:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
spec:
  loadBalancerIP: 144.25.97.173
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
予約済パブリックIPアドレスをパブリック・ネットワーク・ロード・バランサに割り当てます

例:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
  loadBalancerIP: 144.25.97.173
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

次の点に注意してください:

  • LoadBalancerサービスのloadBalancerIPプロパティを設定した場合、Kubernetesエンジンが作成するOracle Cloud Infrastructureパブリック・ロード・バランサまたはネットワーク・ロード・バランサのIPアドレスを後で直接変更することはできません。IPアドレスを変更する場合は、LoadBalancerサービスを削除し、マニフェスト・ファイルで別の予約済パブリックIPアドレスを指定して、LoadBalancerサービスを再度デプロイします。
  • LoadBalancerサービスのloadBalancerIPプロパティを設定しない場合、Kubernetesエンジンによって作成されるOracle Cloud Infrastructureパブリック・ロード・バランサまたはネットワーク・ロード・バランサのIPアドレスを、一時的IPアドレスから予約済パブリックIPアドレスに後で直接切り替えることはできません。一時的なIPアドレスを予約済パブリックIPアドレスに切り替える場合は、LoadBalancerタイプのサービスを削除し、loadBalancerIPプロパティをマニフェスト・ファイルの予約済パブリックIPアドレスに設定して、LoadBalancerタイプのサービスを再度デプロイします。
  • LoadBalancerタイプのサービスを削除し、他の用途のために予約済パブリックIPアドレスを解放できます(たとえば、LoadBalancerタイプの別のサービスに割り当てることができます)。
  • 同じIPアドレスが別のリソース(コンピュート・インスタンスやLoadBalancerタイプの別のサービスなど)にすでに割り当てられている場合、LoadBalancerタイプのサービスの予約済パブリックIPアドレスは指定できません。
  • 内部ロード・バランサ・サービスのマニフェスト・ファイル(つまり、service.beta.kubernetes.io/oci-load-balancer-internal: "true"またはoci-network-load-balancer.oraclecloud.com/internal: "true"注釈を含むマニフェスト・ファイル)にloadBalancerIPプロパティを追加することはできません。
  • デフォルトでは、マニフェスト・ファイル内でタイプLoadBalancerのサービスのloadBalancerIPプロパティとして指定した予約済パブリックIPアドレスは、クラスタと同じコンパートメントのリソースであることが想定されます。別のコンパートメントに予約済パブリックIPアドレスを指定する場合:

    • パブリック・ロード・バランサの場合、テナンシに次のポリシーを追加します:
      ALLOW any-user to read public-ips in tenancy where request.principal.type = 'cluster'
      ALLOW any-user to manage floating-ips in tenancy where request.principal.type = 'cluster'
    • ネットワーク・ロード・バランサの場合、テナンシに次のポリシーを追加します:
      ALLOW any-user to use private-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'}
      ALLOW any-user to manage public-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'}

ネットワーク・セキュリティ・グループの指定(推奨)

Oracle Cloud Infrastructureネットワーク・セキュリティ・グループ(NSG)を使用すると、リソースとの間で、およびリソース間のトラフィックを制御できます。NSGに定義されたセキュリティ・ルールにより、そのNSG内のすべてのリソースが同じセキュリティ・ポスチャを持つことが保証されます。詳細は、ネットワーク・セキュリティ・グループを参照してください。

NSGを使用して、KubernetesエンジンがタイプLoadBalancerのKubernetesサービスにプロビジョニングするOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサへのアクセスを制御できます。

NSGを使用してアクセスを制御する場合は、ロード・バランサまたはネットワーク・ロード・バランサのサブネットとの間でインバウンドおよびアウトバウンド・トラフィックを許可するための適切なセキュリティ・ルールが存在する必要があります。ロード・バランサおよびネットワーク・ロード・バランサのセキュリティ・ルールを参照してください。

NSGを使用してロード・バランサまたはネットワーク・ロード・バランサへのアクセスを制御する場合:

管理するNSGを使用してアクセスを制御するには、マニフェスト・ファイルに注釈を含めて、ロード・バランサまたはネットワーク・ロード・バランサを追加するNSGを指定します。

既存のNSGへのロード・バランサの追加

Kubernetes Engineによって作成されたOracle Cloud Infrastructureロード・バランサを管理対象のNSGに追加するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"

ここで、<nsg-ocid>は既存のNSGのOCIDです。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
既存のNSGへのネットワーク・ロード・バランサの追加

Kubernetes Engineによって作成されたOracle Cloud Infrastructureネットワーク・ロード・バランサを管理対象のNSGに追加するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"

ここで、<nsg-ocid>は既存のNSGのOCIDです。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

次の点に注意してください:

  • 指定するNSGは、Oracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサと同じVCN内にある必要があります。
  • 指定したNSGがクラスタの別のコンパートメントに属している場合は、IAMポリシーに次のようなポリシー・ステートメントを含める必要があります:
    ALLOW any-user to use network-security-groups in TENANCY where ALL { request.principal.type = 'cluster' }

    このポリシー・ステートメントが許容しすぎると考えられる場合は、NSGが属するコンパートメントを明示的に指定したり、クラスタを明示的に指定したりする権限を制限できます。例:

    Allow any-user to use network-security-groups in compartment <compartment-ocid> where all { request.principal.id = '<cluster-ocid>' }
  • 次の形式で、最大5つのNSGをカンマ区切りリストで指定できます。
    oci.oraclecloud.com/oci-network-security-groups: "<nsg1-ocid>,<nsg2-ocid>,<nsg3-ocid>,<nsg4-ocid>,<nsg5-ocid>"
  • NSGからロード・バランサまたはネットワーク・ロード・バランサを削除したり、ロード・バランサまたはネットワーク・ロード・バランサが存在するNSGを変更するには、注釈を更新してマニフェストを再適用します。
  • 管理するNSGを使用してOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサへのアクセスを制御する場合、Oracleでは、ロード・バランサまたはネットワーク・ロード・バランサのマニフェスト・ファイルのメタデータ・セクションに次の注釈のいずれかをそれぞれ追加して、Kubernetesセキュリティ・リスト管理を無効にすることをお薦めします。

    service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
    oci-network-load-balancer.oraclecloud.com/security-list-management-mode:  "None"

    または、次の同等の注釈を追加できます。

    oci.oraclecloud.com/security-rule-management-mode: "None" 

    推奨事項に従って注釈を追加した場合、Kubernetesセキュリティ・リスト管理は有効になりません。ノード・プールおよびKubernetes APIエンドポイントのイングレス・セキュリティ・ルールおよびエグレス・セキュリティ・ルールを使用してNSGを設定する必要があります(詳細は、ネットワーク・セキュリティ・グループまたはセキュリティ・リスト(あるいはその両方)のセキュリティ・ルール構成およびネットワーク・リソース構成の例を参照してください)。また、kube-proxyヘルス・ポート、ヘルス・チェック・ポート範囲およびロード・バランサのイングレスおよびエグレス・セキュリティ・ルールを使用してNSGを設定する必要があります。

ロード・バランサおよびネットワーク・ロード・バランサのセキュリティ・ルール管理オプションの指定

セキュリティ・ルールは、タイプがLoadBalancerのKubernetesサービスに対してプロビジョニングされるOracle Cloud Infrastructureロード・バランサおよびネットワーク・ロード・バランサへのアクセスを制御します。セキュリティ・ルールは、次の方法で管理(作成、更新および削除)できます。

  • ネットワーク・セキュリティ・グループまたはNSG (推奨) NSGのセキュリティ・ルールは、NSGに追加されたKubernetesリソースに適用されます。そのため、NSGは個々のリソースにきめ細かいアクセス制御を提供できます。
  • セキュリティ・リスト内。セキュリティ・リスト内のセキュリティ・ルールは、サブネット内のすべてのKubernetesリソースに適用されます。セキュリティ・リストは、サブネット内の個々のリソースに対するファイングレイン・アクセス制御を提供しません。

セキュリティ・ルールの仕組みに関する重要な情報、およびセキュリティ・リストとネットワーク・セキュリティ・グループの一般的な比較については、セキュリティ・ルールを参照してください。

ノート

セキュリティ・ルールがセキュリティ・リストで管理されている場合、インフラストラクチャが複雑で、Terraformなどのツールを使用すると、セキュリティの構成と管理が複雑になる可能性があります。また、セキュリティ・リストを使用してセキュリティ・ルールを管理する機能は、将来のリリースで非推奨になることに注意してください。このような理由から、Oracleでは、セキュリティ・ルールの管理にネットワーク・セキュリティ・グループ(NSG)およびoci.oraclecloud.com/security-rule-management-mode注釈を使用することをお薦めします。

必要に応じて、セキュリティ・ルールを自分で管理し、ルールを作成、更新および削除できます。または、oci-cloud-controller-manager (クラスタ・コントロール・プレーン上で実行)が、セキュリティ・ルールの一部またはすべてを管理することを指定することもできます。Kubernetes Engineは、oci-cloud-controller-managerを使用して、タイプLoadBalancerのKubernetesサービスのロード・バランサおよびネットワーク・ロード・バランサをプロビジョニングします。

oci-cloud-controller-managerがNSGまたはセキュリティ・リストのロード・バランサまたはネットワーク・ロード・バランサのセキュリティ・ルールを管理するかどうかを指定するには、次のように様々な注釈を使用します。

使用する注釈に関係なく、また、ユーザーまたはoci-cloud-controller-managerがセキュリティ・リストまたはNSGのセキュリティ・ルールを管理しているかどうかに関係なく、oci-cloud-controller-managerがロード・バランサまたはネットワーク・ロード・バランサを追加する1つ以上の追加NSGのOCIDを指定することもできます。この場合、oci.oraclecloud.com/oci-network-security-groupsまたはoci-network-load-balancer.oraclecloud.com/oci-network-security-groups注釈を使用します。oci-cloud-controller-managerは、これらの注釈で指定された追加のNSGのセキュリティ・ルールを管理しないため、セキュリティ・ルールの管理はユーザーの責任です。oci.oraclecloud.com/oci-network-security-groupsまたはoci-network-load-balancer.oraclecloud.com/oci-network-security-groupsアノテーションの使用の詳細は、ネットワーク・セキュリティ・グループの指定(推奨)を参照してください。

oci.oraclecloud.com/security-rule-management-mode注釈を使用したNSGおよびセキュリティ・リストのセキュリティ・ルールの管理

NSGのセキュリティ・ルールを管理するために必要なIAMポリシー

oci-cloud-controller-managerがNSGでクラスタのロード・バランサのセキュリティ・ルールを管理できるようにするには、NSGを管理する権限をクラスタに付与する必要があります。たとえば、特定のコンパートメントでこの権限を付与するには:

ALLOW any-user to manage network-security-groups in compartment <compartment-name> where request.principal.type = 'cluster' 

また、oci-cloud-controller-managerでネットワーク・セキュリティ・グループを作成できるようにするには、VCNを管理したり、仮想ネットワーク・ファミリを管理するための権限もクラスタに付与する必要があります。たとえば、次のいずれかのポリシー・ステートメントを指定します。

  • ALLOW any-user to manage vcns in compartment <compartment-name> where request.principal.type = 'cluster'
  • ALLOW any-user to manage virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'

oci.oraclecloud.com/security-rule-management-mode注釈の使用

oci-cloud-controller-managerがNSG内のロード・バランサまたはネットワーク・ロード・バランサのセキュリティ・ルールを管理すること(Oracleで推奨)を指定するには、まず必要なIAMポリシーを設定する必要があります。NSGでセキュリティ・ルールを管理するために必要なIAMポリシーを参照してください。前提条件のIAMポリシーを設定したら、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加できます:

oci.oraclecloud.com/security-rule-management-mode: "NSG"

oci-cloud-controller-managerは、ロード・バランサまたはネットワーク・ロード・バランサ・サービスへのイングレスに必要なすべてのセキュリティ・ルールを、oci-cloud-controller-managerがその目的のために作成するNSGで管理します。このNSGはフロントエンドNSGと呼ばれ、0.0.0.0/0またはソースCIDRブロック(およびソース・ポート範囲)からのロード・バランサまたはネットワーク・ロード・バランサへのインバウンド・トラフィック(マニフェスト・ファイルで指定されている場合)を許可します。oci-cloud-controller-managerは、フロントエンドNSGに次のセキュリティ・ルールを作成します。

方向 ソース プロトコル/宛先ポート 説明
イングレス 0.0.0.0/0 (またはマニフェスト・ファイルに指定されている場合はソースCIDRブロック) マニフェストファイルに指定されたポート。 OCIロード・バランサへのインバウンド・トラフィックを許可します。
エグレス バックエンドNSG (バックエンドNSGのOCIDがマニフェスト・ファイルで指定されている場合) ALL/(サービスのノードポート) ワーカー・ノードへのトラフィックを許可します。
エグレス バックエンドNSG (バックエンドNSGのOCIDがマニフェスト・ファイルで指定されている場合) TCP/ヘルス・チェック・ポート(10256)

ソースIPアドレスが保持されている場合、ヘルス・チェック・ポートはサービスによって自動的に選択されます。

OCIロード・バランサまたはネットワーク・ロード・バランサが、ヘルス・チェック・ポート用にワーカー・ノードでkube-proxyと通信できるようにします。

oci-cloud-controller-managerで、バックエンド・セットのワーカー・ノードへのイングレス・トラフィックのセキュリティ・ルールを、ロード・バランサまたはネットワーク・ロード・バランサ・サービスからのエグレス・トラフィックとともに管理する場合は、その目的で使用する既存のNSGのOCIDを指定する必要があります。このNSGはバックエンドNSGと呼ばれます。oci-cloud-controller-managerは、バックエンドNSGを指定した場合にのみ、フロントエンドNSGにエグレス・ルールを追加します。バックエンドNSGとして使用するNSGを指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci.oraclecloud.com/oci-backend-network-security-group: "<nsg-ocid>"

ここで、<NSG-OCID>は、クラスタと同じVCNにある既存のNSGのOCIDであり、ワーカー・ノードをホストするコンピュート・インスタンスがすでに追加されているNSGでもあります。例:

oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex"

複数のバックエンドNSGのOCIDsをカンマ区切りリストで指定できます。例:

oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex,ocid1.networksecuritygroup.oc1.phx.aaaaaa....jfle,ocid1.networksecuritygroup.oc1.phx.aaaaaa....pkrj"

バックエンド・セット内のワーカー・ノードをホストするコンピュート・インスタンスは、oci.oraclecloud.com/oci-backend-network-security-group注釈の値として指定するバックエンドNSGにすでに追加されている必要があります。次のいずれかの方法で、コンピュート・インスタンスをバックエンドNSGに追加できます:

  • ノード・プールの作成時にNSGを指定する方法(管理対象ノードおよび仮想ノードの場合)。
  • コンピュート・サービス(管理対象ノードの場合)を使用して、ワーカー・ノードをホストするコンピュート・インスタンスのプライマリVNICをNSGに手動で追加します。たとえば、コンピュート・サービスのコンソール・ページ(またはコンピュート・サービスのCLIまたはAPI)を使用します。

oci-cloud-controller-managerは、バックエンドNSGに次のセキュリティ・ルールを作成します:

方向 ソース プロトコル/宛先ポート 説明
イングレス フロントエンドNSG OCID TCP/ヘルス・チェック・ポート(10256)

ソースIPアドレスが保持されている場合、ヘルス・チェック・ポートはサービスによって自動的に選択されます。

OCIロード・バランサまたはネットワーク・ロード・バランサが、ヘルス・チェックのためにワーカー・ノードでkube-proxyと通信できるようにします。
イングレス フロントエンドNSG OCID ALL/(サービスのノードポート) OCIロード・バランサまたはネットワーク・ロード・バランサがワーカー・ノードと通信できるようにします。

バックエンドNSGにOCIDを指定しない場合、oci-cloud-controller-managerは、バックエンド・セット内のワーカー・ノードへのイングレス・トラフィックのセキュリティ・ルール、またはロード・バランサまたはネットワーク・ロード・バランサからのエグレス・トラフィックのセキュリティ・ルールを管理しません。

oci.oraclecloud.com/security-rule-management-mode注釈を他の値に設定して、セキュリティ・ルールを自分で管理するか、oci-cloud-controller-managerでセキュリティ・リスト内のセキュリティ・ルールを管理するように指定することもできます。注釈の完全な構文は次のとおりです。

oci.oraclecloud.com/security-rule-management-mode: <value>

<value>は次のいずれかです:

  • "NSG": (推奨) oci-cloud-controller-managerは、ロード・バランサまたはネットワーク・ロード・バランサ・サービスへのイングレスに必要なすべてのセキュリティ・ルールを、その目的のために作成するネットワーク・セキュリティ・グループ(NSG)で管理します。
  • "None": (ネットワーク・ロード・バランサのデフォルト)セキュリティ・リスト管理は有効化されず、oci-cloud-controller-managerはセキュリティ・ルールを管理しません。セキュリティ・ルールを設定して、ノード・ポート範囲、kube-proxyヘルス・ポートおよびヘルス・チェック・ポート範囲の適切なポートへのインバウンド・トラフィックを許可する必要があります。また、インバウンド・トラフィックがロード・バランサおよびネットワーク・ロード・バランサに許可されるようにセキュリティ・ルールを設定する必要があります(ロード・バランサおよびネットワーク・ロード・バランサのセキュリティ・ルールを参照)。これは、service.beta.kubernetes.io/oci-load-balancer-security-list-management-modeまたはoci-network-load-balancer.oraclecloud.com/security-list-management-mode"None"に設定することと同じです。
  • "SL-All": (ロード・バランサのデフォルト) oci-cloud-controller-managerは、ロード・バランサまたはネットワーク・ロード・バランサ・サービスとの間で送受信するために必要なすべてのセキュリティ・ルールをセキュリティ・リスト内で管理します。これは、service.beta.kubernetes.io/oci-load-balancer-security-list-management-modeまたはoci-network-load-balancer.oraclecloud.com/security-list-management-mode"All"に設定することと同じです。
  • "SL-Frontend": oci-cloud-controller-managerは、セキュリティ・リスト内のロード・バランサおよびネットワーク・ロード・バランサ・サービスへのイングレスのセキュリティ・ルールのみを管理します。セキュリティ・ルールを設定して、ノード・ポート範囲、kube-proxyヘルス・ポートおよびヘルス・チェック・ポート範囲の適切なポートへのインバウンド・トラフィックを許可する必要があります。これは、service.beta.kubernetes.io/oci-load-balancer-security-list-management-modeまたはoci-network-load-balancer.oraclecloud.com/security-list-management-mode"Frontend"に設定することと同じです。

管理対象ノードがあるクラスタで、管理モードを明示的に指定しない場合、または無効な値を指定した場合、oci-cloud-controller-managerは、ロード・バランサまたはネットワーク・ロード・バランサ・サービスとの間のイングレスおよびエグレスに必要なすべてのセキュリティ・ルールをセキュリティ・リスト("SL-All"と同等)で管理します。この場合、oci-cloud-controller-managerは、0.0.0.0/0 (またはマニフェスト・ファイルに指定されたソース・ポート範囲)からリスナー・ポートへのインバウンド・トラフィックを許可するセキュリティ・ルールを作成することに注意してください。仮想ノードを持つクラスタでは、セキュリティ・リスト管理は有効化されず、セキュリティ・ルールを常に手動で構成する必要があります("None"と同等)。

次の点に注意してください:

  • oci.oraclecloud.com/security-rule-management-mode注釈とservice.beta.kubernetes.io/oci-load-balancer-security-list-management-modeまたはoci-network-load-balancer.oraclecloud.com/security-list-management-mode注釈の両方をマニフェストに含めると、oci-cloud-controller-managerは常にoci.oraclecloud.com/security-rule-management-modeを使用し、他の注釈は無視されます。
  • セキュリティ・リストとネットワーク・セキュリティ・グループの両方で許可されるイングレス・ルールおよびエグレス・ルールの数に制限があります(それぞれ、セキュリティ・リストの制限およびネットワーク・セキュリティ・グループの制限を参照)。イングレス・ルールまたはエグレス・ルールの数が制限を超えると、ロード・バランサまたはネットワーク・セキュリティ・グループの作成または更新が失敗します。
  • ロード・バランサまたはネットワーク・ロード・バランサは、最大5つのNSGに追加できます。NSGの数が制限を超えると、エラーが返されます。
  • タイプLoadBalancerのKubernetesサービスを削除すると、OCI-cloud-controller-managerによって作成されたOCIリソース(フロントエンドNSGおよびフロントエンドNSGまたはバックエンドNSGで作成されたセキュリティ・ルール)が削除されます。バックエンドNSGおよびoci-cloud-controller-managerで作成されなかったセキュリティ・ルールは削除されません。
  • LoadBalancerタイプのKubernetesサービスのネットワーク・ロード・バランサをプロビジョニングする場合、is-preserve-source: "true"注釈を使用して、IPパケットのヘッダーにクライアントIPアドレスの保持を指定できます(externalTrafficPolicy注釈が"Local"に設定されている場合にのみ有効です)。この場合、oci-cloud-controller-managerはバックエンドNSGにセキュリティ・ルールを作成し、LoadBalancerサービス・マニフェストでloadBalancerSourceRangesで指定されたCIDRブロックからバックエンド・セット内のワーカー・ノードへのアクセスを許可します。loadBalancerSourceRangesでCIDRブロックが指定されていない場合、oci-cloud-controller-managerは、nodePortで指定されたポート番号でインターネット(0.0.0.0/0)からのアクセスを許可するセキュリティ・ルールを作成します。
  • oci.oraclecloud.com/oci-backend-network-security-group注釈の値として指定するバックエンドNSGは、クラスタと同じVCNに存在する必要があります。
  • バックエンド・セット内のワーカー・ノードをホストするコンピュート・インスタンスは、oci.oraclecloud.com/oci-backend-network-security-group注釈の値として指定するバックエンドNSGにすでに追加されている必要があります。

セキュリティ・ルール管理注釈の例

例1: 管理対象セキュリティ・ルールを使用して新しいフロントエンドNSGを作成し、既存のバックエンドNSGでセキュリティ・ルールを管理

この例では:

  • oci-cloud-controller-managerで、ロード・バランサのフロントエンドNSGを作成し、そのNSGのセキュリティ・ルールを管理する必要があります。
  • oci-cloud-controller-managerで既存のバックエンドNSGを使用し、そのNSGでセキュリティ・ルールを管理する場合。

oci.oraclecloud.com/security-rule-management-mode注釈の値として"NSG"を指定し、oci.oraclecloud.com/oci-backend-network-security-group注釈の値として既存のNSGのOCIDを指定します。

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid> 
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

この場合は次のようになります。

  • oci-cloud-controller-managerは、ロード・バランサのフロントエンドNSGを作成し、そのセキュリティ・ルールを管理します。
  • oci-cloud-controller-managerは、oci-backend-network-security-group注釈で指定されたOCIDを持つバックエンドNSGのセキュリティ・ルールを管理します。

次の点に注意してください:

  • oci.oraclecloud.com/oci-backend-network-security-group注釈の値として指定するバックエンドNSGは、クラスタと同じVCNに存在する必要があります。
  • バックエンド・セット内のワーカー・ノードをホストするコンピュート・インスタンスは、oci.oraclecloud.com/oci-backend-network-security-group注釈の値として指定するバックエンドNSGにすでに追加されている必要があります。

例2: 管理対象セキュリティ・ルールを使用して新しいフロントエンドNSGを作成し、既存のバックエンドNSGでセキュリティ・ルールを手動で管理します

この例では:

  • oci-cloud-controller-managerで、ロード・バランサのフロントエンドNSGを作成し、そのNSGのセキュリティ・ルールを管理する必要があります。
  • セキュリティ・ルールを手動で定義して、作成および管理するNSGのロード・バランサのフロント・エンドからバックエンドへのトラフィックを制御する必要があります。たとえば、トラフィックがLBからワーカー・ノードにルーティングされないようにするセキュリティ・ルールを作成できます。

oci.oraclecloud.com/security-rule-management-mode注釈の値として"NSG"を指定します。

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

この場合は次のようになります。

  • oci-cloud-controller-managerは、ロード・バランサのフロントエンドNSGを作成し、そのセキュリティ・ルールを管理します。
  • バックエンドNSGでセキュリティ・ルールを作成および管理して、フロントエンドNSGからバックエンドNSGへのトラフィックを制御する責任があります。

例3: 管理されたセキュリティ・ルールを使用して新しいフロントエンドNSGを作成し、既存のバックエンドNSGでセキュリティ・ルールを管理(ただし、注釈が正しく使用されない)

この例では:

  • oci-cloud-controller-managerで、ロード・バランサのフロントエンドNSGを作成し、そのNSGのセキュリティ・ルールを管理する必要があります。
  • oci-cloud-controller-managerで既存のバックエンドNSGを使用し、そのNSGでセキュリティ・ルールを管理する場合。ただし、注釈を誤って指定します。

oci.oraclecloud.com/security-rule-management-mode注釈の値として"NSG"を正しく指定します。ただし、service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode注釈を誤って含めて、oci.oraclecloud.com/oci-backend-network-security-group注釈を省略するとします。

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "All"
  spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

この場合は次のようになります。

  • oci-cloud-controller-managerは、ロード・バランサのフロントエンドNSGを作成し、そのセキュリティ・ルールを管理します。
  • oci-cloud-controller-managerは、service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode注釈を無視します(oci.oraclecloud.com/security-rule-management-mode注釈が存在するため)。
  • バックエンドNSGでセキュリティ・ルールを作成および管理して、フロントエンドNSGからバックエンドNSGへのトラフィックを制御します(oci.oraclecloud.com/oci-backend-network-security-groupアノテーションが存在しないため)。

例4: 管理対象セキュリティ・ルールを使用して新しいフロントエンドNSGを作成し、既存のバックエンドNSGでセキュリティ・ルールを管理し、既存のNSGにロード・バランサを追加します

この例では:

  • oci-cloud-controller-managerで、ロード・バランサのフロントエンドNSGを作成し、そのNSGのセキュリティ・ルールを管理する必要があります。
  • oci-cloud-controller-managerで既存のバックエンドNSGを使用し、そのNSGでセキュリティ・ルールを管理する場合。
  • あなたは、oci-cloud-controller-managerで、管理するセキュリティ・ルールを持つ既存のNSGにロード・バランサを追加しようと考えています。

次のように指定します。

  • oci.oraclecloud.com/security-rule-management-mode注釈の値として"NSG"を指定します。
  • oci-cloud-controller-managerで使用する既存のNSGのOCIDをoci.oraclecloud.com/oci-backend-network-security-group注釈の値として使用します。
  • oci-cloud-controller-managerでロード・バランサを追加する既存のNSGのOCID。

マニフェストは次のとおりです。

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid>
    oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"
  spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

この場合は次のようになります。

  • oci-cloud-controller-managerは、ロード・バランサのフロントエンドNSGを作成し、そのセキュリティ・ルールを管理します。
  • oci-cloud-controller-managerは、oci.oraclecloud.com/oci-backend-network-security-group注釈で指定されたOCIDを持つバックエンドNSGのセキュリティ・ルールを管理します。
  • oci-cloud-controller-managerは、oci.oraclecloud.com/oci-network-security-groups注釈で指定されたNSGにロード・バランサを追加します。

ヘルス・チェック・パラメータの指定

Oracle Cloud Infrastructureのロード・バランサとネットワーク・ロード・バランサは、ヘルス・チェック・ポリシーを適用してバックエンド・サーバーを継続的に監視します。ヘルス・チェックは、バックエンド・サーバーの可用性を確認するためのテストで、リクエストまたは接続の試行である場合があります。サーバーがヘルス・チェックに失敗すると、ロード・バランサまたはネットワーク・ロード・バランサは一時的にそのサーバーをローテーションから除外します。その後、サーバーがヘルス・チェックに合格すると、ロード・バランサまたはネットワーク・ロード・バランサはそれをローテーションに戻します。

ヘルス・チェック・ポリシーには多数のパラメータが含まれ、それぞれにデフォルト値があります。Kubernetes EngineがOCIロード・バランサまたはネットワーク・ロード・バランサをLoadBalancerタイプのKubernetesサービスにプロビジョニングする場合、マニフェスト・ファイルのメタデータ・セクションに注釈を含めることで、ヘルス・チェック・パラメータのデフォルト値をオーバーライドできます。これらの注釈は、後で追加、変更および削除できます。ヘルス・チェック・パラメータの値を指定した注釈を削除すると、ロード・バランサまたはネットワーク・ロード・バランサはかわりにパラメータのデフォルト値を使用します。

ロード・バランサのヘルス・チェック・パラメータの構成

KubernetesエンジンがLoadBalancerタイプのKubernetesサービスのロード・バランサをプロビジョニングするときにヘルス・チェック・パラメータを構成するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

  • ヘルス・チェック・リクエストの試行が何回失敗したら、バックエンド・サーバーが異常とみなされるかを指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

    service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "<value>"

    ここで、<value>は、失敗したヘルス・チェック・リクエストの数です。

  • ヘルス・チェック・リクエストの間隔を指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

    service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "<value>"

    ここで、<value>はミリ秒単位の数値です。最小値は1000です。

  • ヘルス・チェック・リクエストへのレスポンスを待機する最大時間を指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

    service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "<value>"

    ここで、<value>はミリ秒単位の数値です。ヘルス・チェックが成功するのは、ロード・バランサがこのタイムアウト期間内にレスポンスを受信した場合のみです。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "5"
    service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "15000"
    service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "4000"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
ネットワーク・ロード・バランサのヘルス・チェック・パラメータの構成

KubernetesエンジンがLoadBalancerタイプのKubernetesサービスのネットワーク・ロード・バランサをプロビジョニングするときにヘルス・チェック・パラメータを構成するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

  • ヘルス・チェック・リクエストの試行が何回失敗したら、バックエンド・サーバーが異常とみなされるかを指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

    oci-network-load-balancer.oraclecloud.com/health-check-retries: "<value>"

    ここで、<value>は、失敗したヘルス・チェック・リクエストの数です。

  • ヘルス・チェック・リクエストの間隔を指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

    oci-network-load-balancer.oraclecloud.com/health-check-interval: "<value>"

    ここで、<value>はミリ秒単位の数値です。最小値は1000です。

  • ヘルス・チェック・リクエストへのレスポンスを待機する最大時間を指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

    oci-network-load-balancer.oraclecloud.com/health-check-timeout: "<value>"

    ここで、<value>はミリ秒単位の数値です。ヘルス・チェックが成功するのは、ネットワーク・ロード・バランサがこのタイムアウト期間内にレスポンスを受信した場合のみです。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/health-check-retries: "5"
    oci-network-load-balancer.oraclecloud.com/health-check-interval: "15000"
    oci-network-load-balancer.oraclecloud.com/health-check-timeout: "4000"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

マニフェスト・ファイルのメタデータ・セクションに注釈を含めてヘルス・チェック・パラメータ値を明示的に指定しない場合は、次のデフォルトが使用されます:

Load Balancerの注釈 ネットワークLoad Balancerの注釈

使用されるデフォルト値

service.beta.kubernetes.io/oci-load-balancer-health-check-retries oci-network-load-balancer.oraclecloud.com/health-check-retries "3"
service.beta.kubernetes.io/oci-load-balancer-health-check-interval oci-network-load-balancer.oraclecloud.com/health-check-interval "10000"
service.beta.kubernetes.io/oci-load-balancer-health-check-timeout oci-network-load-balancer.oraclecloud.com/health-check-timeout "3000"

Oracle Cloud Infrastructureロード・バランサおよびネットワーク・ロード・バランサのヘルス・チェック・ポリシーの詳細は、次を参照してください:

バックエンド・セットに含めるワーカー・ノードの選択

Oracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサへの受信トラフィックは、バックエンド・セット内のバックエンド・サーバー間で分散されます。デフォルトでは、Kubernetes EngineがOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサをタイプLoadBalancerのKubernetesサービスにプロビジョニングすると、クラスタ内のすべてのワーカー・ノードがバックエンド・セットに含まれます。

ただし、特定のロード・バランサまたはネットワーク・ロード・バランサのバックエンド・セットに含めるクラスタ内のワーカー・ノードのサブセットのみを選択するオプションがあります。異なるロード・バランサおよびネットワーク・ロード・バランサのバックエンド・セットにクラスタのワーカー・ノードのサブセットを含めることで、単一のKubernetesクラスタを複数の論理クラスタ(サービス)として表示できます。

ロード・バランサ・バックエンド・セットに含めるワーカー・ノードを選択します

KubernetesエンジンがLoadBalancerタイプのKubernetesサービスのロード・バランサをプロビジョニングするときにバックエンド・セットに含めるワーカー・ノードを選択するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci.oraclecloud.com/node-label-selector: <label>

<label>は、標準のKubernetesラベル・セレクタ表記を使用して識別される1つ以上のラベル・キーおよび値です。たとえば、lbset=set1です。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/node-label-selector: lbset=set1
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

ネットワーク・ロード・バランサ・バックエンド・セットに含めるワーカー・ノードを選択します

KubernetesエンジンがLoadBalancerタイプのKubernetesサービスのネットワーク・ロード・バランサをプロビジョニングするときにバックエンド・セットに含めるワーカー・ノードを選択するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci-network-load-balancer.oraclecloud.com/node-label-selector: <label>

<label>は、標準のKubernetesラベル・セレクタ表記を使用して識別される1つ以上のラベル・キーおよび値です。たとえば、lbset=set1です。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset=set1
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

標準のKubernetesラベル・セレクタ表記を使用して、マニフェスト・ファイルのメタデータ・セクションの注釈にラベル・キーおよび値を指定します。標準のKubernetesラベル・セレクタ表記の詳細は、Kubernetesドキュメントのラベル・セレクタを参照してください。

この表は、標準のKubernetesラベル・セレクタ表記の例を示しています。

Load Balancerの注釈 ネットワークLoad Balancerの注釈

バックエンド・セットに含める:

oci.oraclecloud.com/node-label-selector: lbset=set1 oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset=set1

set1を持つラベル・キーlbsetを持つすべてのワーカー・ノード

oci.oraclecloud.com/node-label-selector: lbset in (set1, set3) oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset in (set1, set3)

set1またはset3を持つラベル・キーlbsetを持つすべてのワーカー・ノード

oci.oraclecloud.com/node-label-selector: lbset oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset 値に関係なく、ラベル・キーがlbsetのすべてのワーカー・ノード。
oci.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3) oci-network-load-balancer.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3)

prodを持つラベル・キーenvと、値set1または値set3を持つラベル・キーlbsetを持つすべてのワーカー・ノード

oci.oraclecloud.com/node-label-selector: env!=test oci-network-load-balancer.oraclecloud.com/node-label-selector: env!=test

testを持たないラベル・キーenvを持つすべてのワーカー・ノード

バックエンド・セット・ポリシーの指定

Kubernetes EngineがLoadBalancerタイプのKubernetesサービスのロード・バランサまたはネットワーク・ロード・バランサをプロビジョニングする場合、バックエンド・セットのポリシーを定義して、受信トラフィックをバックエンド・サーバーに分散する方法を指定できます。

詳細は次を参照してください。

ロード・バランサのバックエンド・セット・ポリシーの指定

KubernetesエンジンがLoadBalancerタイプのKubernetesサービスのロード・バランサをプロビジョニングするときにバックエンド・セットのポリシーを指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci.oraclecloud.com/loadbalancer-policy: <value>

<value>は次のいずれかです:

  • "ROUND_ROBIN": 受信トラフィックをバックエンド・セット・リストの各サーバーに順番にルーティングします。
  • "LEAST_CONNECTIONS": 着信非スティッキー・リクエスト・トラフィックを、最も少ないアクティブ接続でバックエンド・サーバーにルーティングします。
  • "IP_HASH": 受信リクエストのソースIPアドレスをハッシュ・キーとして使用して、同じクライアントからの受信非スティッキー・リクエスト・トラフィックを、そのサーバーが使用可能であるかぎり同じバックエンド・サーバーにルーティングします。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/loadbalancer-policy: "LEAST_CONNECTIONS"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

バックエンド・セットのポリシーを明示的に指定しない場合、「ROUND_ROBIN」がデフォルト値として使用されることに注意してください。

ネットワーク・ロード・バランサのバックエンド・セット・ポリシーの指定

KubernetesエンジンがLoadBalancerタイプのKubernetesサービスのネットワーク・ロード・バランサをプロビジョニングするときにバックエンド・セットのポリシーを指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci-network-load-balancer.oraclecloud.com/backend-policy: <value>

<value>は次のいずれかです:

  • "TWO_TUPLE": 受信トラフィックが2タプル(ソースIP、宛先IP)のハッシュに基づいてルーティングされます。
  • "THREE_TUPLE": 受信トラフィックが3タプル(ソースIP、宛先IP、プロトコル)のハッシュに基づいてルーティングされます。
  • "FIVE_TUPLE": 受信トラフィックが5タプル(ソースIPおよびポート、宛先IPおよびポート、プロトコル)のハッシュに基づいてルーティングされます。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/backend-policy: "THREE_TUPLE"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

バックエンド・セットのポリシーを明示的に指定しない場合、「FIVE_TUPLE」がデフォルト値として使用されることに注意してください。

ポッド準備ゲートの指定

ノート

仮想ノードを持つクラスタにはポッド準備ゲートを指定できますが、管理対象ノードを持つクラスタには指定できません。

Kubernetes Engineが、タイプLoadBalancerのKubernetesサービス用にOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサをプロビジョニングする場合、ポッド・レディネス・ゲートを使用して、トラフィックがバックエンド・セットに正常に追加され、トラフィックの受信準備が整ったポッドにのみルーティングされるようにできます。仮想ノードで実行されているポッドにはポッド準備ゲートを指定できますが、管理対象ノードで実行されているポッドには指定できません。管理対象ノードで実行されているポッドのポッド準備ゲートを定義しないでください。

ポッド準備ゲートは、ポッドがトラフィックを受信する準備ができていることを示す追加の条件です。ポッド・レディネス・ゲートを使用すると、複雑なカスタム・レディネス・チェックを実装でき、ローリング・デプロイメント中にゼロ・ダウンタイムを実現できます。詳細は、Kubernetesドキュメントのポッド・レディネス詳細を参照してください。

ロード・バランサまたはネットワーク・ロード・バランサをプロビジョニングする場合、バックエンド・セットは、Readyという条件を持つデプロイメントのポッド・レプリカのIPアドレスで構成されます。デプロイメントを更新すると(たとえば、新しいイメージを使用するには)、既存のポッド・レプリカが新しいポッド・レプリカに置き換えられます。ただし、次の理由により、すべてのポッド・レプリカを置き換えるには時間がかかり、バックエンドが使用できなくなる可能性があります:

  • 既存のポッド・レプリカは、バックエンド・セットが新しいポッド・レプリカのIPアドレスで更新される前に終了する場合があります。
  • バックエンド・セットは、新しいポッド・レプリカがトラフィックを受信する準備が整う前に、新しいポッド・レプリカのIPアドレスで更新される場合があります。

ポッド・レディネス・ゲートの使用を指定すると、バックエンドがロード・バランサまたはネットワーク・ロード・バランサで常に使用可能になります。既存のポッドは、新しいポッドがバックエンド・セットに追加され、新しいポッドがトラフィックを受信する準備が整うまで終了しません。

Kubernetesエンジンが、特定のネームスペースで作成されたすべてのポッドのポッド仕様にポッド準備ゲートを注入することを指定するには、次のように入力してloadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabledラベルをネームスペースに追加します:

kubectl label ns <namespace> loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled

次の例は、ポッド準備ゲートを使用してロード・バランサを作成する方法を示しています。

まず、次のように入力して、pdrネームスペースにラベルを付けて、ネームスペースのポッド準備ゲートを指定します:

kubectl label ns pdr loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled

コマンドの出力により、ネームスペースにラベルが付けられていることが確認されます。

namespace/pdr labeled

次に、次のように入力して、Nginxをpdrネームスペースにデプロイします。

kubectl apply -f https://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yaml -n pdr

次のように入力して、pdrネームスペース内のポッドをリストします:

kubectl get pods -n pdr

これで、Nginxマニフェストのイメージ・バージョンを更新し、既存のポッドが新しいポッドに置き換えられるように、マニフェストを再適用することで、ポッド・レディネス・ゲートの使用をデモンストレーションできます。

次に示すように、Nginxマニフェストをhttps://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yamlからダウンロードし、イメージ・バージョンをnginx:1.25.1に変更します。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.1
...

次のように入力してマニフェストを再適用してください:

kubectl apply -f ./nginx.yaml -n pdr

次のように入力して、ロールアウトされる新しいポッドを確認します。

kubectl get pods -o wide -n pdr

例:

NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES
nginx-678976847c-8bqs7   1/1     Running   0          44m   10.0.10.153   10.0.10.253   <none>           1/1
nginx-678976847c-ttqms   1/1     Running   0          47m   10.0.10.201   10.0.10.253   <none>           1/1

次のように入力して、新しいポッドのステータスを確認します:

kubectl describe pod <pod-name> -n pdr

例:

kubectl describe pod nginx-678976847c-ttqms  -n pdr

コマンドの出力によって、podreadiness.loadbalancer.oraclecloud.com準備ゲートのステータスが確認されます。例:

...
Readiness Gates:
  Type                                                             Status
  podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f   True 
Conditions:
  Type                                                             Status
  podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f   True 
  PodScheduled                                                     True 
  Initialized                                                      True 
  Ready                                                            True 
  ContainersReady                                                  True 

トラフィック・ルーティングを調整するためのIPModeの指定

Kubernetes EngineがLoadBalancerタイプのKubernetesサービス用にOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサをプロビジョニングする場合、クラスタ内から発信するトラフィックをロード・バランサまたはネットワーク・ロード・バランサのIPアドレスにルーティングする方法を指定できます。

Kubernetesバージョン1.30以降を実行しているクラスタでは、LoadBalancerIPMode Kubernetes機能ゲートが有効になり、LoadBalancerタイプのサービスのipModeフィールドにはデフォルト値がVIPになります。ipModeの値がVIPの場合、クラスタ内のポッドからLoadBalancerタイプのサービスのIPアドレスに送信されるトラフィックは、LoadBalancerサービスをバイパスしてパフォーマンスを最適化するために、アプリケーション・ポッドに直接ルーティングされます。詳細は、Kubernetesドキュメントのロード・バランサ・ステータスのIPModeの指定を参照してください。

ただし、状況によっては、トラフィックをアプリケーション・ポッドに直接ルーティングすることが適切でない場合があります。たとえば、クラスタ内で発生したトラフィックがアプリケーション・ポッドに直接ルーティングされる場合、ロード・バランサ・レベルでSSL終了を実装することはできません。

クラスタ内からロード・バランサまたはネットワーク・ロード・バランサのIPアドレスに送信されるトラフィックをルーティングする方法を指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci.oraclecloud.com/ingress-ip-mode: <value>

<value>は次のいずれかです:

  • "VIP": クラスタ内から発生し、LoadBalancerタイプのサービスのIPアドレスに送信されるすべてのトラフィックは、LoadBalancerサービスをバイパスしてパフォーマンスを最適化するために、アプリケーション・ポッドに直接ルーティングされます。
  • "proxy": クラスタ内から発信され、LoadBalancerタイプのサービスのIPアドレスに送信されるすべてのトラフィックは、LoadBalancerサービス用にプロビジョニングされたOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサにルーティングされます。ロード・バランサまたはネットワーク・ロード・バランサは、トラフィックをアプリケーション・ポッドに転送します。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/ingress-ip-mode: "proxy"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

oci.oraclecloud.com/ingress-ip-mode注釈を指定しない場合、またはその後注釈を削除した場合、LoadBalancer型のサービスのipModeプロパティのデフォルト値は"VIP"になります。

また、oci-network-load-balancer.oraclecloud.com/is-preserve-source注釈をtrueに設定してプライベート・ネットワーク・ロード・バランサを使用する場合、ネットワーク・ロード・バランサには、ソース・ノードと宛先バックエンド・ノードが同じノードであるトラフィックを許可しない既知の制限があります。この制限により、次の条件がすべて満たされている場合に、ネットワーク・ロード・バランサを介して同じノード上のポッド間の通信が防止されます。

  • oci.oraclecloud.com/ingress-ip-mode注釈はproxyに設定されています。
  • oci-network-load-balancer.oraclecloud.com/is-preserve-source注釈はtrueに設定されています。
  • ネットワーク・ロード・バランサはプライベートです。

ロード・バランサおよびネットワーク・ロード・バランサのIPアドレス・ファミリの指定

Kubernetesエンジンが、タイプLoadBalancerのKubernetesサービス用にOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサをプロビジョニングすると、ロード・バランサ・サブネットによって、ロード・バランサまたはネットワーク・ロード・バランサがトラフィックを受信するIPアドレスのIPアドレス・ファミリを介した制御が決定されます。

  • サブネットがIPv4シングル・スタック・サブネットの場合、サブネットはIPv4アドレス指定のみ用に構成されます。ロード・バランサまたはネットワーク・ロード・バランサには、外部トラフィックを受信するIPv4アドレスのみが割り当てられます。ロード・バランサまたはネットワーク・ロード・バランサが外部トラフィックを受信するIPアドレスのIPアドレス・ファミリは変更できません。
  • サブネットがIPv4/IPv6デュアル・スタック・サブネットの場合、サブネットはIPv4とIPv6の両方のアドレス指定用に構成されます。ロード・バランサまたはネットワーク・ロード・バランサには、外部トラフィックを受信するIPv4アドレスとIPv6アドレスのいずれかまたは両方を割り当てることができます。この状況では、サービス・マニフェストのKubernetes spec.ipFamilyPolicyおよびspec.ipFamiliesフィールドを使用して、ロード・バランサまたはネットワーク・ロード・バランサがIPv4アドレスのみで外部トラフィックを受信するか、IPv6アドレスのみで外部トラフィックを受信するか、IPv4アドレスとIPv6アドレスの両方で受信するかを指定できます。

リスナーとバックエンド・セット間のトラフィックに使用されるIPアドレス・ファミリは、ロード・バランサとネットワーク・ロード・バランサで異なる方法で決定されます。

  • ロード・バランサ:ロード・バランサ・リスナーとバックエンド・セット間のトラフィックでは、常にIPv4アドレスが使用されます。
  • ネットワーク・ロード・バランサ:ネットワーク・ロード・バランサ・リスナーとバックエンド・セット間のトラフィックは、ネットワーク・ロード・バランサ・リスナーが外部トラフィックを受信するIPアドレスと同じIPアドレス・ファミリを使用します。

この表は、ロード・バランサ・サブネットのIPアドレス・ファミリ間の相互作用、spec.ipFamilyPolicyspec.ipFamiliesの設定、IPアドレスがロード・バランサまたはネットワーク・ロード・バランサに割り当てられるIPアドレス・ファミリ、およびリスナーとバックエンド・セット間のIPプロトコルを示しています。有効な組合せのみが表示されます。

サブネットIPアドレス・ファミリ ipFamilyPolicyは次のように設定されます。 ipFamiliesは次のように設定されます。 ネットワーク・ロード・バランサ・エンドポイントのIPアドレス・ファミリ ロード・バランサのIPアドレス・ファミリ ネットワーク・ロード・バランサ・リスナーからバックエンド・セット・トラフィック ロード・バランサ・リスナーからバックエンド・セット・トラフィック
IPv4 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv6 IPv6 サポートされていない IPv6 サポートされていない
IPv4 PreferDualStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv6 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv4,IPv6 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv6,IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 PreferDualStack IPv4 IPv4(プライマリ)およびIPv6 IPv4(プライマリ)およびIPv6 IPv4(プライマリ)およびIPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6 IPv6(プライマリ)およびIPv4 IPv6(プライマリ)およびIPv4 IPv6(プライマリ)およびIPv4 IPv4
IPv4/IPv6 PreferDualStack IPv4,IPv6 IPv4(プライマリ)およびIPv6 IPv4(プライマリ)およびIPv6 IPv4(プライマリ)およびIPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6,IPv4 IPv6(プライマリ)およびIPv4 IPv6(プライマリ)およびIPv4 IPv6(プライマリ)およびIPv4 IPv4
IPv4/IPv6 RequireDualStack IPv4,IPv6 IPv4(プライマリ)およびIPv6 IPv4(プライマリ)およびIPv6 IPv4(プライマリ)およびIPv6 IPv4
IPv4/IPv6 RequireDualStack IPv6,IPv4 IPv6(プライマリ)およびIPv4 IPv6(プライマリ)およびIPv4 IPv6(プライマリ)およびIPv4 IPv4

service.beta.kubernetes.io/oci-load-balancer-subnet1注釈を使用して、クラスタの作成時にロード・バランサに指定されたサブネットの代替サブネットを指定する場合は、代替サブネットのアドレス・ファミリがサービス・マニフェストのspec.ipFamilyPolicyおよびspec.ipFamiliesフィールドと互換性があることを確認してください。

KubernetesでのIPv4およびIPv6のサポートの詳細は、KubernetesドキュメントのIPv4/IPv6デュアルスタックを参照してください。

例1:

この例では:

  • クラスタの作成時にロード・バランサに指定されたサブネットを使用します。
  • LoadBalancerタイプのサービスをデプロイするのは、IPv4アドレスとIPv6アドレスの両方を割り当てることができる場合のみで、ipFamilyPolicy: RequireDualStackを設定します。
  • ロード・バランサのプライマリIPアドレスをIPv6アドレス(およびセカンダリ・アドレスをIPv4アドレス)にするため、spec.ipFamilies: IPv6,IPv4を設定します。
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb" 
spec:
  type: LoadBalancer
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv6
  - IPv4
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: nginx

この例では、クラスタのロード・バランサ・サブネットはデュアル・スタックIPv4/IPv6サブネットであるため、デプロイメントは成功します。ロード・バランサには、プライマリ・アドレスとしてIPv6アドレスが割り当てられ、セカンダリ・アドレスとしてIPv4アドレスが割り当てられます。

例2:

この例では:

  • LoadBalancerタイプのサービスを、クラスタの作成時にロード・バランサに指定されたものに代替サブネットでホストするため、service.beta.kubernetes.io/oci-load-balancer-subnet1注釈を使用して代替サブネットのOCIDを指定します。
  • サービスがデュアル・スタックIPv4/IPv6サブネットでホストされている場合、IPv4アドレスとIPv6アドレスの両方をLoadBalancerタイプのサービスに割り当てます。それ以外の場合、サービスが単一のスタックIPv4サブネットでホストされている場合は、そのIPアドレス・ファミリからサービスに割り当てられたIPアドレスが必要になります。そのため、ipFamilyPolicy: PreferDualStackを設定します。
  • ロード・バランサのプライマリIPアドレスをIPv4アドレス(およびそのセカンダリ・アドレスがサブネットでサポートされている場合はIPv6アドレス)にするため、spec.ipFamilies: IPv4,IPv6を設定します。
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"  
spec:
  type: LoadBalancer
  ipFamilyPolicy: PreferDualStack
  ipFamilies:
  - IPv4
  - IPv6
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: nginx

この例では、代替サブネットはデュアル・スタックIPv4/IPv6サブネットであるため、デプロイメントは成功します。ロード・バランサには、プライマリ・アドレスとしてIPv4アドレスが割り当てられ、セカンダリ・アドレスとしてIPv6アドレスが割り当てられます。

ネットワーク・ロード・バランサのプライベートIPアドレスの隠蔽

Kubernetesエンジンが、タイプがLoadBalancerのKubernetesサービスに対してパブリックOracle Cloud Infrastructureネットワーク・ロード・バランサをプロビジョニングすると、ネットワーク・ロード・バランサ・サービスは、パブリックIPアドレスとプライベートIPアドレスの両方をネットワーク・ロード・バランサに割り当てます。プライベートIPアドレスは、ヘルス・チェックおよびポート・アドレス変換(PAT)に使用されますが、VCN外部からの外部トラフィック(パブリック・インターネットからのものを含む)を受信することはできません。

ネットワーク・ロード・バランサ・サービスがネットワーク・ロード・バランサに割り当てたパブリックIPアドレスおよびプライベートIPアドレスを表示するには、kubectl get serviceコマンド(または同様)を入力します。例:

kubectl get service my-nginx-svc -o json | jq .status

{
  "loadBalancer": {
    "ingress": [
      {
        "ip": "203.0.113.2"
      },
      {
        "ip": "10.30.3.24"
      }
    ]
  }
}

状況によっては、ネットワーク・ロード・バランサのパブリックIPアドレスのみを公開し、プライベートIPアドレスを非表示にする場合があります。例:

  • ExternalDNSアドオンを使用するときに、LoadBalancerタイプのKubernetesサービスのマニフェストにexternal-dns.alpha.kubernetes.io/hostname注釈を含めることで、ネットワーク・ロード・バランサのわかりやすいDNS名を指定できます。ExternalDNSは、クラスタ用に構成した外部DNSプロバイダにネットワーク・ロード・バランサのDNSレコードを作成します。DNSレコードは、DNS名をパブリックIPアドレスとプライベートIPアドレスの両方にマップします。その結果、外部トラフィックがDNS名を使用する場合、プライベートIPアドレスが外部トラフィックを受信できない場合でも、トラフィックがネットワーク・ロード・バランサのプライベートIPアドレスにルーティングされる可能性があります。
  • kubectl get serviceコマンド(または類似)を使用してネットワーク・ロード・バランサのIPアドレスを取得する自動化を設定できます。外部トラフィックのルーティングが含まれている場合は、ネットワーク・ロード・バランサのパブリックIPアドレスのみが必要です。ただし、デフォルトでは、kubectl get serviceコマンドはネットワーク・ロード・バランサのパブリックIPアドレスとプライベートIPアドレスの両方を返します。

kubectl get serviceコマンド(または類似コマンド)がネットワーク・ロード・バランサのパブリックIPアドレスのみを返すように指定するには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"

"false"は、oci-network-load-balancer.oraclecloud.com/external-ip-only注釈のデフォルト値です。サービス定義にアノテーションを明示的に含めない場合、kubectl get serviceコマンドはネットワーク・ロード・バランサのパブリックIPアドレスとプライベートIPアドレスの両方を返します。

例:


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

マニフェストにoci-network-load-balancer.oraclecloud.com/external-ip-only: "true"注釈を含めると、kubectl get serviceコマンド(または類似コマンド)を入力したときに、パブリックIPアドレスのみが返されます。例:

kubectl get service my-nginx-svc -o json | jq .status

{
  "loadBalancer": {
    "ingress": [
      {
        "ip": "203.0.113.2"
      }
    ]
  }
}

ノードがトラフィックを処理できないようにする

Oracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサのバックエンド・セット内のバックエンド・サーバーのリストから特定のワーカー・ノードを除外できます。詳細は、node.kubernetes.io/exclude-from-external-load-balancersを参照してください。

ロード・バランサおよびネットワーク・ロード・バランサのタグ付け

Kubernetesエンジンがプロビジョニングするロード・バランサまたはネットワーク・ロード・バランサに、タイプがLoadBalancerのKubernetesサービスにタグを追加できます。タグ付けを使用すると、コンパートメント間で異なるリソースをグループ化でき、独自のメタデータでリソースに注釈を付けることもできます。「ロード・バランサへのタグの適用」を参照してください。

プロキシ・プロトコルの有効化

Kubernetes EngineがOracle Cloud Infrastructureロード・バランサまたはネットワーク・ロード・バランサをLoadBalancerタイプのKubernetesサービスにプロビジョニングする場合、TCPベースのリスナーでプロキシ・プロトコル機能を有効にするかどうかを指定できます。プロキシ・プロトコルを有効にすると、クライアントのIPアドレスなどのトランスポート接続情報を複数のプロキシ・レイヤーにわたってバックエンド・サーバーに安全に転送できます。次のプロキシ・プロトコル・バージョンを使用できます。

  • バージョン1は、テキストベースのヘッダーを使用してプロキシ間で情報を渡し、小規模の実装に最適です。
  • バージョン2。生成および解析の効率を高めるためにテキストベースおよびバイナリ・ヘッダーを使用し、大規模な実装に最適です。

Kubernetes Engineによってプロビジョニングされたロード・バランサは、プロキシ・プロトコル・バージョン1およびバージョン2をサポートします。Kubernetes Engineによってプロビジョニングされるネットワーク・ロード・バランサは、プロキシ・プロトコル・バージョン2をサポートします。

詳細は次を参照してください。

ロード・バランサのプロキシ・プロトコルの有効化

Kubernetes Engineによってプロビジョニングされたロード・バランサのプロキシ・プロトコルを有効にするには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

service.beta.kubernetes.io/oci-load-balancer-connection-proxy-protocol-version: "<value>"

"<value>"は次のいずれかです:

  • "1": ロード・バランサのすべてのリスナーでプロキシ・プロトコル・バージョン1を有効にすることを指定します。
  • "2": ロード・バランサのすべてのリスナーでプロキシ・プロトコル・バージョン2を有効にすることを指定します。

ロード・バランサのプロキシ・プロトコル機能を有効にしたら、次の点に注意してください:

  • ロード・バランサ・リスナーでプロキシ・プロトコル機能を無効にすることはできません。
  • 注釈を更新することで、プロキシ・プロトコル・バージョン1とプロキシ・プロトコル・バージョン2を切り替えることができます。
  • その後、マニフェストから注釈を削除するか、("<value>"""に設定して)注釈を設定解除した場合、"<value>"に最後に正常に適用された設定は、すべてのリスナーに保持されます。
ネットワーク・ロード・バランサのプロキシ・プロトコルの有効化および無効化

Kubernetes Engineによってプロビジョニングされたネットワーク・ロード・バランサに対してプロキシ・プロトコルを有効にするには、マニフェスト・ファイルのメタデータ・セクションに次の注釈を追加します:

oci-network-load-balancer.oraclecloud.com/is-ppv2-enabled: "<value>"

"<value>"は次のいずれかです:

  • "true": ネットワーク・ロード・バランサのすべてのリスナーでプロキシ・プロトコル・バージョン2を有効にすることを指定します。
  • "false": ネットワーク・ロード・バランサのすべてのリスナーでプロキシ・プロトコル・バージョン2を無効にすることを指定します。

ネットワーク・ロード・バランサのプロキシ・プロトコル機能を有効にしたら、次の点に注意してください:

  • ネットワーク・ロード・バランサ・リスナーでプロキシ・プロトコル機能を無効にするには、"<value>""false"に設定します。
  • その後、マニフェストから注釈を削除するか、("<value>"""に設定して)注釈を設定解除するか、注釈に無効な値("enable"など)を指定すると、"<value>"に最後に正常に適用された設定はすべてのリスナーに保持されます。