LoadBalancer Service のパラメータ


このページでは、LoadBalancer Service の動作と構成を制御する Service マニフェストのパラメータについて説明します。このページを読む前に、Google Kubernetes Engine(GKE)LoadBalancer Service のコンセプトを理解しておく必要があります。

Service のパラメータ

GKE では、LoadBalancer Service の次のパラメータがサポートされています。

パラメータ Service フィールドと説明 内部 外部 バージョン サポート
内部パススルー ネットワーク ロードバランサ networking.gke.io/load-balancer-type: "Internal"

内部パススルー ネットワーク ロードバランサを作成するように GKE に指示します。

詳細については、 LoadBalancer Service のコンセプトをご覧ください。

サポートされているすべてのバージョン。
バックエンド サービスベースの外部パススルー ネットワーク ロードバランサ cloud.google.com/l4-rbs: "enabled"

バックエンド サービスベースの外部パススルー ネットワーク ロードバランサを作成するように GKE に指示します。

詳細については、 LoadBalancer Service のコンセプトをご覧ください。

GKE 1.25.5以降
内部トラフィック ポリシー spec.internalTrafficPolicy

Local に設定すると、GKE はノード上のクライアント Pod から、同じノード上にあるサービスを提供する Pod にのみパケットを転送します。Cluster に設定すると、GKE はノード上のクライアント Pod から、任意のノード上にあるサービスを提供する Pod にパケットを転送します。詳細については、サービスの内部トラフィック ポリシーをご覧ください。

このパラメータは、GKE Dataplane V2 を実行しているクラスタではサポートされていません。

GKE 1.22 以降
外部トラフィック ポリシー spec.externalTrafficPolicy

ロードバランサのヘルスチェックに合格するノード VM と、クラスタ内の準備完了のサービスを提供する Pod へのパケットのルーティング方法を制御します。また、GKE サブセットが有効になっている場合に、ノードを GCE_VM_IP NEG にグループ化する方法を制御します。

詳細については、 LoadBalancer Service のコンセプトをご覧ください。

GKE 1.14 以降(Windows ノードプールの場合は 1.23.4-gke.400 以降)。
ヘルスチェック ポート spec.healthCheckNodePort

LoadBalancer Service のロードバランサのヘルスチェックをデプロイします。このパラメータは、spec.externalTrafficPolicyLocal に設定されている場合にのみ有効です。

サポートされているすべてのバージョン。
ファイアウォール ルールと送信元 IP アドレスの許可リスト spec.loadBalancerSourceRanges

特定のソース範囲のみを許可するように、GKE と VPC ネットワークでオプションのファイアウォール ルールを構成します。kube-proxy は、指定されたソース範囲と一致するように iptables ルールも構成します。

サポートされているすべてのバージョン。
静的 IP アドレス
  • spec.loadBalancerIP(IPv4 のみ)
  • networking.gke.io/load-balancer-ip-addresses

ロードバランサの転送ルールに割り当てられる静的 IPv4 アドレス、静的 IPv6 アドレス範囲、またはその両方を指定します。重要な構成要件と実装の詳細については、共通の IP アドレスの共有に関する考慮事項をご覧ください。

  • spec.loadBalancerIP: サポートされているすべてのバージョン。
  • networking.gke.io/load-balancer-ip-addresses: GKE 1.29 以降。その他のクラスタ構成またはアノテーションの要件については、静的 IP アドレス パラメータをご覧ください。
Network Service Tiers cloud.google.com/network-tier

GKE が外部転送ルールと IP アドレスに使用する Network Service Tiers を指定します。アノテーション有効値は StandardPremium(デフォルト)です。

GKE 1.19 以降
カスタム サブネット
  • networking.gke.io/internal-load-balancer-subnet
  • networking.gke.io/load-balancer-subnet

(IPv6 にのみ適用)
  • networking.gke.io/internal-load-balancer-subnet: サポートされているすべてのバージョン
  • networking.gke.io/load-balancer-subnet: GKE 1.29 以降。その他の要件については、カスタム サブネットのアノテーションをご覧ください。
グローバル アクセス networking.gke.io/internal-load-balancer-allow-global-access: "true"

VPC ネットワークまたは接続されたネットワークの任意のリージョンにあるクライアントが、転送ルールの IP アドレスにアクセスできるようにします。

GKE 1.16 以降はプレビュー。GKE 1.17.9-gke.600 以降では一般提供しています。
すべてのポート

spec.ports[].port で 5 つを超える(最大 100)一意のポートが指定されている場合、GKE はすべてのポートを使用するように自動的に転送ルールを構成します。

GKE バージョン 1.18.19-gke.1400 以降
ipFamilyPolicy

spec.ipFamilyPolicy

GKE が Service に IP アドレスを割り振る方法を定義します。spec.ipFamilyPolicy は、SingleStackPreferDualStack、または RequireDualStack として定義できます。

詳細については、IPv4 / IPv6 デュアルスタック Service をご覧ください。

バージョン 1.29 以降の GKE クラスタでは、LoadBalancer Service のデュアルスタック ネットワークがサポートされます。
ipFamilies(省略可)

spec.ipFamilies

シングルスタックまたはデュアルスタックの Service を割り振る IP アドレス ファミリーを定義します。次のいずれかの値を使用します。

  • IPv4: シングルスタック IPv4 Service の場合のみ。
  • IPv6: IPv6 Service の場合のみ。
  • IPv4,IPv6: Service のプライマリ IP アドレスが IPv4 のデュアルスタック Service の場合。
  • IPv6,IPv4: Service のプライマリ IP アドレスが IPv6 のデュアルスタック Service の場合。
バージョン 1.29 以降の GKE クラスタでは、LoadBalancer Service のデュアルスタック ネットワークがサポートされます。

ヘルスチェック ポート

ロードバランサのヘルスチェックで説明されているように、GKE は外部パススルー ネットワーク ロードバランサまたは内部パススルー ネットワーク ロードバランサを作成するときに、常にロードバランサのヘルスチェックをデプロイします。

healthCheckNodePort パラメータを設定できるかどうかは、次の externalTrafficPolicy 構成によって異なります。

externalTrafficPolicy ヘルスチェック ポート
Cluster

spec.healthCheckNodePort は利用できません。

Local

カスタムポートは、spec.healthCheckNodePort を使用して選択できます。指定しない場合、Kubernetes コントロール プレーンがノードポートの範囲からヘルスチェック ポートを割り当てます。

ファイアウォール ルールと送信元 IP アドレスの許可リスト

LoadBalancer Service を作成すると、GKE によって Service に対応する VPC ファイアウォール ルールが作成されます。各ファイアウォール ルールには次の特徴があります。

  • ファイアウォール ルールの方向は上り(内向き)で、アクションは allow です。 Google Cloud の暗黙の上り(内向き)拒否ファイアウォール ルールは、GKE が上り(内向き)ファイアウォール ルールの作成時に許可リストモデルを使用することを意味します。
  • GKE により、ファイアウォール ルールのプロトコルと宛先ポートは、Service の spec.ports[] リストで指定されたものに設定されます。
  • GKE は、ターゲット パラメータを LoadBalancer の仮想 IP アドレスに設定して、ファイアウォール ルールの宛先を設定します。
  • Service に spec.loadBalancerSourceRanges[] が含まれている場合、GKE により、ファイアウォール ルールの送信元パラメータは、そのリスト内の IP アドレスに設定されます。さらに、各ノードで実行されている kube-proxy インスタンスは、指定された IP アドレスへのトラフィックを制限するように、そのノードの iptables ルールを構成します。Service に loadBalancerSourceRanges[] が含まれていない場合、GKE により、ファイアウォール ルールの送信元パラメータは、すべての IP アドレス (0.0.0.0/0) に設定されます。

LoadBalancer Service 用に作成されたファイアウォール ルールでは、その Service のプロトコルと宛先ポートに一致するパケットを Service の仮想 IP アドレスに許可します。

共通ポートを使用する Service

クラスタに少なくとも 1 つの共通プロトコルと宛先ポートを共有する 2 つ以上の Service が含まれている場合、有効なソース範囲のセットは、そのプロトコルと宛先ポートの組み合わせを指定するすべての Service に対する loadBalancerSourceRanges のユニオンになります。これは、上り(内向き)ファイアウォール ルールの target パラメータでは、宛先 IP アドレスが VM に関連付けられたすべての IP アドレスとして定義されているためです。

2 つの LoadBalancer Service があるクラスタについて考えてみましょう。

  • 最初の Service の spec.ports[0].port は、TCP ポート 80 で、spec.loadBalancerSourceRanges=[100.10.0.0/16] です。この Service に対応するロードバランサは結果として、IP アドレス 192.0.2.2 を持ちます。
  • 2 番目の Service の spec.ports[0].port は TCP ポート 80spec.ports[1].port は TCP ポート 90 で、spec.loadBalancerSourceRanges=[172.16.0.0/24] です。この Service に対応するロードバランサは結果として、IP アドレス 198.51.100.3 を持ちます。

GKE は、クラスタの Virtual Private Cloud ネットワークに 2 つの上り(内向き)許可ファイアウォール ルールを作成します。どちらのファイアウォール ルールも、クラスタのすべてのノードをターゲットとして指定します。

  • 1 つ目のファイアウォール ルールは、送信元 100.10.0.0/16 から TCP 宛先ポート 80 へのパケットを許可します。
  • 2 番目のファイアウォール ルールは、送信元 172.16.0.0/24 から TCP 宛先ポート 8090 へのパケットを許可します。

1 つ目の転送ルールは、192.0.2.2:80 の宛先に一致するトラフィックをルーティングします。2 つ目の転送ルールは、198.51.100.3:80198.51.100.3:90 の両方の宛先に一致するトラフィックをルーティングします。各ノードでは、192.0.2.2:80198.51.100.3:80198.51.100.3:90 の 3 つはすべて有効な宛先です。これは次のことを意味します。

  • どちらの Service も、IP アドレスの送信元範囲の組み合わせから、100.10.0.0/16 または 172.16.0.0/24 からの TCP ポート 80 へのパケットを受け入れます。
  • 2 つ目の Service は、172.16.0.0/24 から TCP ポート 90 へのパケットを受け入れます。

同じプロトコルと宛先ポートの組み合わせを使用するすべての Service では、そのプロトコルと宛先ポートの組み合わせを使用する 1 つ以上の Service で spec.loadBalancerSourceRanges を省略した場合、すべての IP アドレスが有効な送信元範囲のセットになります。たとえば、2 番目の Service で spec.loadBalancerSourceRanges が省略されている場合、2 番目のファイアウォールの送信元は 0.0.0.0/0 となり、次のとおりになります。

  • どちらのサービスも、IP アドレスの送信元範囲の組み合わせから(100.10.0.0/16 または 0.0.0.0/0 のいずれかから)、TCP ポート 80 へのパケットを受け入れます。0.0.0.0/0 の範囲には 100.10.0.0/16 の範囲が含まれるため、TCP ポート 80 へのパケットの有効な送信元は任意の IP アドレスになります。
  • 2 つ目の Service は 0.0.0.0/0(任意の IP アドレス)から TCP ポート 90 へのパケットを受け入れます。

静的 IP アドレス

静的 IP アドレスを作成し、その静的アドレスをロードバランサの転送ルールに割り当てるように GKE を構成できます。静的 IP アドレスを使用すると、LoadBalancer Service に変更を加えても、ロードバランサの IP アドレスは変わりません。静的 IP アドレスがない場合、GKE は LoadBalancer Service を更新するときに、ロードバランサ転送ルールに別の IP アドレスを割り当てることがあります。転送ルールの IP アドレスは、Service の spec.clusterIP アドレスと同じではありません。LoadBalancer Service を更新しても、Service の ClusterIP アドレスは変更されません。

静的 IP アドレス パラメータ

LoadBalancer Service に静的 IP アドレスを使用するように指示するには、spec.loadBalancerIP パラメータまたは networking.gke.io/load-balancer-ip-addresses アノテーションを使用します。GKE バージョン 1.29 以降では、Service マニフェストにパラメータとアノテーションの両方が含まれている場合、アノテーションが spec.loadBalancerIP よりも優先されます。

パラメータまたはアノテーションと値 要件と機能
spec.loadBalancerIP:
IPv4_ADDRESS

IPv4 のみの内部 LoadBalancer Service に対して、静的内部 IPv4 アドレスを指定できます。IPv4 のみの外部 LoadBalancer Service に対して、静的外部 IPv4 アドレスを指定できます。このパラメータは、サポートされているすべての GKE バージョンで使用できます。

networking.gke.io/load-balancer-ip-addresses:
IP_ADDRESS_RESOURCE_NAME
  • シングルスタック LoadBalancer Service の場合、アノテーションの値に、IP アドレス自体ではなく IPv4 または IPv6 アドレスのリソース名を設定します。
  • デュアルスタック LoadBalancer Service の場合は、アノテーションの値に、静的 IPv4 アドレスのリソース名と静的 IPv6 アドレス範囲のリソース名をカンマで区切って設定します。

IPv4 のみ、IPv6 のみ、およびデュアルスタックの内部 LoadBalancer Service と外部 LoadBalancer Service には、静的 IPv4 アドレス、静的 IPv6 アドレス範囲、またはその両方を指定できます。アノテーションには GKE 1.29 以降が必要で、次の追加要件があります。

  • このアノテーションを内部 LoadBalancer Service で使用するには、GKE のサブセット化を有効にした後で、クラスタに内部 LoadBalancer Service を作成する必要があります。
  • このアノテーションを外部 LoadBalancer Service で使用するには、外部 LoadBalancer Service を作成するときに、Service マニフェストに cloud.google.com/l4-rbs: "enabled" アノテーションを含める必要があります。

共通の IP アドレスの共有に関する考慮事項

このセクションの表で示すように、各ロードバランサの転送ルールで IP アドレス、プロトコル、ポート指定、Network Service Tiers 仕様の一意の組み合わせが使用されている場合、2 つ以上の LoadBalancer Service が同じ静的 IP アドレスを参照できます。また、次の点も注意してください。

  • 静的 IPv6 アドレスは実際には /96 IPv6 アドレス範囲ですが、GKE は、/96 範囲の最初の IPv6 アドレス(/128)のパケットのみを受け入れるようにノードを構成します。

  • 複数の内部 LoadBalancer Service で同じ内部 IPv4 アドレスまたは内部 IPv6 アドレス範囲を使用するには、SHARED_LOADBALANCER_VIP の目的で静的 IP アドレスを作成する必要があります。

内部 LoadBalancer Service 外部 LoadBalancer Service
ポートの指定

内部パススルー ネットワーク ロードバランサの転送ルールは、最大 5 つの個別のポート番号をサポートします。または、すべてのポートを使用するように構成することもできます。

内部 LoadBalancer Service に 5 つを超える spec.ports[] が指定されている場合、GKE は、すべてのポートを使用するように内部パススルー ネットワーク ロードバランサの転送ルールを構成します。

同じ IP アドレスとプロトコルを含む転送ルールでポートを重複させることはできません。つまり、同じ IP アドレス、プロトコル、ポートを共有する複数の Internal LoadBalancer Service を作成することはできません。次に例を示します。

  • TCP ポート 80 を使用して内部 LoadBalancer Service を作成した場合、ポート 80 が重複するため、TCP ポート 80、81、90 を使用して別の Service を作成することはできません。
  • 内部 LoadBalancer Service が TCP ポート 80、8080、90 を使用する場合、すべてのポートで TCP を使用する別の Service を作成することはできません。これもポートの重複につながります。

詳細については、 共通の IP アドレスを使用する内部パススルー ネットワーク ロードバランサの転送ルールをご覧ください。

LoadBalancer Service マニフェストに cloud.google.com/l4-rbs: "enabled" アノテーションがない場合、GKE はターゲット プールベースの外部パススルー ネットワーク ロードバランサを作成します。

ターゲット プールベースの外部パススルー ネットワーク ロードバランサの転送ルールでは、連続したポート範囲を使用する必要があります。この連続したポート範囲には、Service が必要とするすべてのポートが含まれますが、Service で使用されないポートが含まれることもあります。たとえば、Service マニフェストでポート 80 と 443 を指定しているターゲット プール ベースの外部パススルー ネットワーク ロードバランサを利用する外部 LoadBalancer Service は、ポート範囲 80 ~ 443 のロードバランサ転送ルールを使用します。このポート範囲により、他の外部 LoadBalancer Service はポート 80 と 443 に加えて、その間の番号も使用できなくなります。

LoadBalancer Service マニフェストに cloud.google.com/l4-rbs: "enabled" アノテーションが含まれている場合、GKE はバックエンド サービスベースの外部パススルー ネットワーク ロードバランサを作成します。バックエンド サービスベースの外部パススルー ネットワーク ロードバランサの転送ルールは、最大 5 つの個別のポート番号、または連続したポート範囲をサポートします。

Network Service Tiers 構成不可。内部アドレスは常にプレミアム ティアです。

静的リージョン外部 IPv4 アドレス用に構成できます。静的リージョン外部 IPv6 アドレス範囲は、プレミアム ティアでのみ作成できます。

静的外部 IP アドレスの Network Service Tiers の仕様が、次のいずれかと一致している必要があります。

  • LoadBalancer Service マニフェストの cloud.google.com/network-tier アノテーションで指定されているティア(マニフェストにこのアノテーションが存在する場合)
  • LoadBalancer Service マニフェストに cloud.google.com/network-tier アノテーションがない場合、プロジェクトのデフォルト ティア。

プロジェクトのデフォルト ティアは、別途構成されていない限り、プレミアムです。

IP アドレスの予約

GKE は、spec.loadBalancerIP を使用して構成された静的 IP アドレスを予約しません。つまり、Service に割り当てた IP アドレスは、Service が削除されたときに解放できます。

IP アドレスを予約したままにするには、プロジェクトでアドレス リソースを手動で作成する必要があります。このリソースに名前を付けるときは、内部ロードバランサ名、k8s- などの接頭辞、またはサービスの UUID を使用しないでください。

アドレスを自分で予約しない場合、プロジェクト ログには、作成されてすぐに削除されたアドレス リソースに関するエントリが含まれることがあります。これは通常のサービス プロビジョニングの一部であり、想定内です。

LoadBalancer のサブネット

クラスタと同じリージョンおよび VPC ネットワークにあるカスタム サブネットで、エフェメラルまたは静的 IPv4 アドレス、IPv6 アドレス範囲、またはその両方を使用するように、内部 LoadBalancer Service を構成できます。内部 LoadBalancer Service にカスタム サブネットを使用すると、次のことができます。

  • 同じ VPC ネットワークとリージョン内の 2 つ以上の GKE クラスタから内部 LoadBalancer Service によって作成された内部パススルー ネットワーク ロードバランサをグループ化する。
  • 内部パススルー ネットワーク ロードバランサの IPv4 アドレスがクラスタのノード IPv4 アドレスと異なる内部 LoadBalancer Service を作成する。
  • デュアルスタック クラスタで、内部パススルー ネットワーク ロードバランサがクラスタのノードおよび Pod の IPv6 アドレスと異なる IPv6 アドレス範囲を持つ内部 LoadBalancer Service を作成する。クラスタのサブネットに外部 IPv6 アドレス範囲がある場合、内部 LoadBalancer Service をサポートするには、カスタム LoadBalancer サブネットが必要です。

クラスタと同じリージョンおよび VPC ネットワークにあるカスタム サブネットで、エフェメラルまたは静的 IPv6 アドレス範囲を使用するように外部 LoadBalancer Service を構成できます。カスタム サブネットを使用して、外部パススルー ネットワーク ロードバランサの IPv6 アドレス範囲がクラスタのノードおよび Pod の IPv6 アドレスと異なる外部 LoadBalancer Service を作成します。デュアルスタック クラスタで外部 LoadBalancer Service をサポートする場合は、クラスタのサブネットに内部 IPv6 アドレス範囲があるため、カスタム LoadBalancer サブネットが必要です。

カスタム サブネットのアノテーション

次のいずれかのアノテーションを使用して、カスタム サブネット内のエフェメラルまたは静的 IP アドレスを使用するように LoadBalancer Service に指示します。LoadBalancer Service のマニフェストに両方のアノテーションが含まれている場合、アノテーション要件が満たされていれば、networking.gke.io/load-balancer-subnet アノテーションが優先されます。

アノテーションと値 要件と機能
networking.gke.io/internal-load-balancer-subnet:
SUBNET_RESOURCE_NAME

アノテーションは、IPv4 のみの内部 LoadBalancer Service のカスタム サブネットを指定する場合にのみ使用できます。アノテーションは、サポートされているすべての GKE バージョンで機能します。

networking.gke.io/load-balancer-subnet:
SUBNET_RESOURCE_NAME

IPv4 のみ、IPv6 のみ、またはデュアルスタックの内部 LoadBalancer Service のカスタム サブネットを指定できます。IPv6 のみまたはデュアルスタックの外部 LoadBalancer Service にカスタム サブネットを指定できます。アノテーションには GKE 1.29 以降が必要で、次の追加要件があります。

  • このアノテーションを使用して内部 LoadBalancer Service のカスタム サブネットを指定するには、GKE のサブセット化を有効にした後、クラスタ内に内部 LoadBalancer Service を作成する必要があります。
  • このアノテーションを使用して外部 LoadBalancer Service のカスタム サブネットを指定するには、外部 LoadBalancer Service の作成時に cloud.google.com/l4-rbs: "enabled" アノテーションを Service マニフェストに含める必要があります。

内部 LoadBalancer Service のサブネットと IPv4 アドレス

次の表に、IPv4 のみまたはデュアルスタックの内部 LoadBalancer Service で有効なサブネット仕様と IPv4 アドレスの組み合わせを示します。

静的 IPv4 アドレス エフェメラル IPv4 アドレス
カスタム サブネット
カスタム サブネットと静的 IPv4 アドレス: 静的内部 IPv4 アドレスは、カスタム サブネットのプライマリ IPv4 アドレス範囲内で作成されている必要があります。 カスタム サブネットとエフェメラル IPv4 アドレス: GKE は、カスタム サブネットのプライマリ IPv4 アドレス範囲内にある未割り振りの内部 IPv4 アドレスを使用します。
クラスタのサブネット クラスタのサブネットと静的 IPv4 アドレス: 静的内部 IPv4 アドレスは、クラスタのサブネットのプライマリ IPv4 アドレス範囲内で作成されている必要があります。 クラスタのサブネットとエフェメラル IPv4 アドレス: GKE は、クラスタのサブネットのプライマリ IPv4 アドレス範囲内にある未割り振りの内部 IPv4 アドレスを使用します。

内部 LoadBalancer Service のサブネットと IPv6 アドレス範囲

次の表に、IPv6 のみまたはデュアルスタックの内部 LoadBalancer Service で有効なサブネット仕様と IPv6 アドレス範囲の組み合わせを示します。内部パススルー ネットワーク ロードバランサの IPv6 転送ルールは内部 /96 IPv6 アドレス範囲を使用しますが、GKE は、宛先が転送ルールの /96 範囲にある最初の IPv6 アドレス(/128)と一致するパケットのみを受け入れるようにノードを構成します。

静的 IPv6 アドレス範囲 エフェメラル IPv6 アドレス範囲
カスタム デュアルスタック サブネット
  • クラスタと同じ VPC ネットワークおよびリージョンに存在する必要があります。
  • 内部 IPv6 アドレス範囲(アクセスタイプ INTERNAL)が必要です。
  • networking.gke.io/load-balancer-subnet アノテーションを使用して指定する必要があります。
カスタム サブネットと静的 IPv6 アドレス範囲: 静的内部 /96 IPv6 アドレス範囲は、カスタム サブネットの内部 /64 IPv6 アドレス範囲内で作成されている必要があります。 カスタム サブネットとエフェメラル IPv6 アドレス範囲: GKE は、カスタム サブネットの内部 /64 IPv6 アドレス範囲内にある未割り振りの内部 /96 IPv6 アドレス範囲を使用します。
クラスタのデュアルスタック サブネット
  • 内部 IPv6 アドレス範囲(アクセスタイプ INTERNAL)が必要です。
クラスタのサブネットと静的 IPv6 アドレス範囲: 静的内部 /96 IPv6 アドレス範囲は、クラスタのサブネットの内部 /64 IPv6 アドレス範囲内で作成されている必要があります。 クラスタのサブネットとエフェメラル IPv6 アドレス範囲: GKE は、クラスタのサブネットの内部 /64 IPv6 アドレス範囲内にある未割り振りの内部 /96 IPv6 アドレス範囲を使用します。

外部 LoadBalancer Service のサブネットと IPv4 アドレス

IPv4 のみおよびデュアルスタックの外部 LoadBalancer Service の外部 IPv4 アドレスは、静的外部 IPv4 アドレスとエフェメラル外部 IPv4 アドレスのどちらの場合も、サブネットから取得されません。

External LoadBalancer Service のサブネットと IPv6 アドレス範囲

次の表に、IPv6 のみまたはデュアルスタックの外部 LoadBalancer Service で有効なサブネット仕様と IPv6 アドレス範囲の組み合わせを示します。外部パススルー ネットワーク ロードバランサの IPv6 転送ルールは外部 /96 IPv6 アドレス範囲を使用しますが、GKE は、宛先が転送ルールの /96 範囲にある最初の IPv6 アドレス(/128)と一致するパケットのみを受け入れるようにノードを構成します。

静的 IPv6 アドレス範囲 エフェメラル IPv6 アドレス範囲
カスタム デュアルスタック サブネット
  • クラスタと同じ VPC ネットワークおよびリージョンに存在する必要があります。
  • 外部 IPv6 アドレス範囲(アクセスタイプ EXTERNAL)が必要です。
  • networking.gke.io/load-balancer-subnet アノテーションを使用して指定する必要があります。
カスタム サブネットと静的 IPv6 アドレス範囲: 静的外部 /96 IPv6 アドレス範囲は、カスタム サブネットの外部 /64 IPv6 アドレス範囲内で作成されている必要があります。静的外部 IPv6 アドレス範囲は、プレミアム ティアでのみ作成できます。 カスタム サブネットとエフェメラル IPv6 アドレス範囲: GKE は、カスタム サブネットの外部 /64 IPv6 アドレス範囲内にある未割り振りの外部 /96 IPv6 アドレス範囲を使用します。
クラスタのデュアルスタック サブネット
  • 外部 IPv6 アドレス範囲(アクセスタイプ EXTERNAL)が必要です。
クラスタのサブネットと静的 IPv6 アドレス範囲: 静的外部 /96 IPv6 アドレス範囲は、クラスタのサブネットの外部 /64 IPv6 アドレス範囲内で作成されている必要があります。静的外部 IPv6 アドレス範囲は、プレミアム ティアでのみ作成できます。 クラスタのサブネットとエフェメラル IPv6 アドレス範囲: GKE は、クラスタのサブネットの外部 /64 IPv6 アドレス範囲内にある未割り振りの外部 /96 IPv6 アドレス範囲を使用します。

グローバル アクセス

networking.gke.io/internal-load-balancer-allow-global-access アノテーションが false であるか、内部 LoadBalancer Service で指定されていない場合、GKE は転送ルールでグローバル アクセスが無効になっている内部パススルー ネットワーク ロードバランサを作成します。グローバル アクセスが無効になっている場合、ロードバランサにアクセスする必要があるクライアントは、同じリージョンと VPC ネットワーク、またはクラスタの VPC ネットワークに接続されているネットワークに配置する必要があります。

内部 LoadBalancer Service の networking.gke.io/internal-load-balancer-allow-global-access アノテーションが true の場合、GKE は内部パススルー ネットワーク ロードバランサの転送ルールでグローバル アクセス オプションを有効にします。VPC ネットワークの任意のリージョンに配置されているクライアント、またはクラスタの VPC ネットワークに接続されているネットワーク内のクライアントは、ロードバランサにアクセスできます。

接続されているネットワーク内のクライアントにグローバルにアクセスする方法の詳細については、以下をご覧ください。

すべてのポート転送ルール

内部パススルー ネットワーク ロードバランサの転送ルールは、5 つの一意のポート番号またはすべてのポートをサポートします。

GKE では、内部 LoadBalancer Service は Service の spec.ports[].port で最大 100 ポートまでしかサポートできません。内部 LoadBalancer Service で最大 5 つのポートを定義すると、転送ルールにその特定のポートが含まれます。ただし、Service で 5 つを超えるポートを指定すると、転送ルールはすべてのポートに一致するように自動的に構成されます。すべてのポートを使用するように転送ルールを構成する場合、GKE は、Service の spec.ports[].port に構成されている特定のポートに対してのみ、上り(内向き)許可ファイアウォール ルールを作成します。

内部パススルー ネットワーク ロードバランサの転送ルールと有効なポート指定の詳細については、転送ルールとポート指定をご覧ください。

IPv4/IPv6 デュアルスタックの LoadBalancer Service

内部または外部の LoadBalancer Service は、シングルスタック(IPv4 と IPv6 のどちらかのみ)またはデュアルスタックのいずれかで作成できます。シングルスタック LoadBalancer Service は、IPv4 アドレスまたは IPv6 アドレスのいずれかを持つ単一の転送ルールを作成します。デュアルスタック LoadBalancer Service は、IPv4 アドレス用と IPv6 アドレス用の 2 つの転送ルールを作成します。IPv4 / IPv6 デュアルスタック LoadBalancer Service を作成するには、IPv4 / IPv6 のデュアルスタック クラスタにデプロイし、使用するロードバランサのタイプに応じて次のいずれかを実施します。

Service ごとに、ipFamilyPolicyipFamilies の仕様を定義できます。詳細については、IPv4 / IPv6 のデュアルスタックに関する記事をご覧ください。

デュアルスタック LoadBalancer Service の制限

  • IPv6 アドレスを持つ LoadBalancer Service は、スタックタイプが ipv4-ipv6 のクラスタでのみサポートされます。詳細については、VPC ネイティブ クラスタにデュアル スタックの IP アドレスを使用する方法をご覧ください。
  • シングルスタック アドレスで作成された LoadBalancer Service は、デュアルスタック サービスにアップグレードできません。

  • デュアルスタック アドレスで作成された LoadBalancer Service は、次の条件に従ってシングルスタックに変更できます。

    • ipFamilies ["IPv4","IPv6"] を持つ Service は、ipFamilies IPv4 を持つ Service に変更できますが、IPv6 には変更できません。
    • ipFamilies ["IPv6","IPv4"] を持つ Service は、ipFamilies IPv6 を持つ Service に変更できますが、IPv4 には変更できません。