フラット IPv4 モード ネットワーク モデルを実装する

概要

フラットモード ネットワーク モデルでは、Pod にクラスタ間で一意の IP アドレスがあります。割り振られた Pod CIDR が一意であり、他のサブネットと重複していないことを確認します。たとえば、IP アドレスは他のクラスタでノードや他の Pod CIDR に使用される IP アドレスと重複してはいけません。これらの IP アドレスには外部からアクセスできるため、どのノードの Pod でも他のすべてのノードのすべての Pod と通信できます。Pod から外部 IP アドレスへの通信には、ネットワーク アドレス変換(NAT)は必要ありません。フラットモード ネットワーク モデルと、デフォルトのアイランド ネットワーク モデルとの比較については、フラットモードとアイランド モードのネットワーク モデルをご覧ください。

フラットモード ネットワーク モデルには、静的モード ネットワークと動的モード ネットワークの 2 種類があります(Border Gateway Protocol を使用)。ノードが単一のレイヤ 2 ドメインにまたがる場合は、静的フラットモードを使用できます。複数のレイヤ 2 ドメインにまたがるノードの場合は、BGP でフラット IP モードを使用します。

IP アドレス空間が大きく、クラスタに固有の Pod CIDR を割り振れる場合は、フラットモード ネットワーク モデルを使用します。ClusterCIDRConfig を使用して、Pod CIDR を動的に構成できます。ClusterCIDRConfig は、クラスタの作成後に追加または削除できます。

BGP を使用したフラットモードの詳細については、BGP サポートを使用するフラットモード ネットワーク モデルを実装するをご覧ください。

Pod IP アドレスのネットワーク到達性について

IPv4 の静的フラット ネットワーク モードでは、Pod IP アドレスのネットワーク到達性は、Address Resolution Protocol(ARP)パケットに基づいています。したがって、Pod の IP アドレスは、Pod が同じレイヤ 2 ドメイン内にある場合にのみ到達可能です。ノードは、同じレイヤ 2 ドメインに属している必要があります。Pod に指定する IP アドレス(ClusterCIDRConfig を使用)は、クラスタノードと同じサブネット内に存在する必要があります。構成した Pod CIDR は、ノードのサブネットからのものである必要があります。たとえば、222.1.0.0/16 サブネットがクラスタ内のノードで使用されると、そのサブネット内でより小さいサブネット(222.1.2.0/24)を Pod 用に選択します。クラスタ内の他のリソースが、Pod 用に割り振られた範囲の IP アドレスを使用していないことを確認します。

次のセクションでは、IPv4 のフラットモード ネットワークの構成について説明します。

静的フラットモード ネットワークを実装する方法

デフォルトでは、ベアメタル版 GKE クラスタはアイランド モードのネットワーキングで作成されます。このセクションでは、クラスタにフラットモード ネットワーキングを設定する方法について説明します。

フラットモード ネットワーク モデルでクラスタをデプロイするには、クラスタ構成ファイルに以下の変更を加えます。

フラットモード ネットワーキングは、クラスタの作成時にのみクラスタで有効にできます。フラットモード ネットワーキングを使用して新しいクラスタを作成するには、次の手順を行います。

  1. クラスタ構成ファイルを編集して clusterNetwork.flatIPv4 を追加し、それを true に設定します。

    フラットモード ネットワーキングを有効にすると、クラスタ構成ファイル(clusterNetwork.pods.cidrBlocks)で指定された Pod CIDR は無視されます。

  2. ClusterCIDRConfig マニフェストをクラスタ構成ファイルに追加します。

    ClusterCIDRConfig マニフェストに次の情報を設定します。

    • metadata.namespace: クラスタの名前空間。

    • spec.ipv4.cidr: クラスタ内の Pod に使用する CIDR ブロック形式の IP アドレス範囲。この範囲は、クラスタノードと同じサブネットに存在する必要があります。

    • perNodeMaskSize: クラスタ作成のプリフライト チェックにより、perNodeMaskSize の値が maxPodsPerNode で指定された Pod の数をプロビジョニングするのに十分であることを確認します。

    • nodeSelector: nodeSelector 値に一致するノードラベルがない場合、ノードの調整は保留のままとなり、クラスタの作成は完了しません。

次のクラスタ構成ファイルからの抜粋は、BGP をサポートしないフラットモード ネットワーキングを実装する方法を示しています。この抜粋に表示される CIDR は単なる例であり、独自の CIDR に置き換える必要があります。CIDR を独自のものに置き換える場合は、Pod IP アドレスのネットワーク到達性についてで指定されているように、Pod のネットワーク到達性の基準を満たしていることを確認してください。

---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: flat-mode
  namespace: cluster-flat-mode
spec:
... (other cluster config omitted)

...
  # Cluster networking configuration
  clusterNetwork:
    flatIPv4: true
    services:
      cidrBlocks:
      - 10.96.0.0/12
... (other cluster config omitted)

...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
  name: cluster-wide-1
  namespace: cluster-flat-mode
spec:
  ipv4:
    cidr: "222.1.0.0/16"
    perNodeMaskSize: 24

制限事項

ベアメタル版 GKE の静的フラットモード ネットワークには、次の制限があります。

  • フラットモード ネットワークを使用する Pod は、単一のレイヤ 2 ドメイン内で到達可能です。クラスタ内でなくても、レイヤ 2 ドメインにある他のマシンも Pod に到達できます。この制限は、デュアルスタック クラスタが作成される場合や、IPv6 が BGP なしのフラットモードにある場合にも、IPv6 に存在します。詳細については、Pod IP アドレスのネットワーク到達性についてをご覧ください。

  • ベアメタル版 GKE の IPAM コントローラは、構成された Pod CIDR 内の IP アドレスの可用性を追跡します。他のデバイスですでに使用されている IP を追跡することはありません。したがって、レイヤ 2 ドメイン内の他の IP は、POD CIDR と干渉しないようにする必要があります。詳細については、Pod IP アドレスのネットワーク到達性についてをご覧ください。