ルーティング可能なポッド ネットワークを使用するように Tanzu Kubernetes クラスタを構成するには、antrea-nsx-routed をクラスタの CNI として指定します。

ルーティング可能なポッド ネットワークの概要

Kubernetes ネットワーク モデルでは、クラスタのノード ネットワーク内のポッドが、同じクラスタ内のすべてのノード上のすべてのポッドとネットワーク アドレス変換 (NAT) を使用することなく通信できる必要があります。この要件を満たすために、各 Kubernetes ポッドには、専用ポッド ネットワークから IP アドレスが割り当てられます。

antrea または calico CNI プラグインを使用して Tanzu Kubernetes クラスタをプロビジョニングすると、デフォルトのポッド ネットワーク 192.168.0.0/16 が作成されます。このサブネットは、クラスタ内でのみ一意のプライベート アドレス空間であり、インターネットではルーティングできません。network.pods.cidrBlocks はカスタマイズできますが、これらの CNI プラグインを使用してポッド ネットワークにルーティングすることはできません。詳細については、『Tanzu Kubernetes クラスタをプロビジョニングするための TKGS v1alpha2 API』を参照してください。

Tanzu Kubernetes Grid サービス v1alpha2 API は、antrea-nsx-routed CNI プラグインを使用してルーティング可能なポッド ネットワークをサポートします。このネットワーク インターフェイスは、カスタマイズされた Antrea プラグインであり、Tanzu Kubernetes クラスタでルーティング可能なポッド ネットワークをサポートするように構成されています。クラスタの仕様では、IP アドレス管理 (IPAM) が スーパーバイザー クラスタ によって処理されるようにするために、ポッドの CIDR ブロック フィールドを明示的に null にする必要があります。

ルーティング可能なポッド ネットワークを有効にすると、クラスタ外のクライアントから直接ポッドのアドレスを指定できます。また、外部のネットワーク サービスおよびサーバがソース ポッドを識別し、IP アドレスに基づいてポリシーを適用できるように、ポッドの IP アドレスが保存されます。次のようにトラフィック パターンがサポートされます。
  • 同じ vSphere 名前空間 にある Tanzu Kubernetes クラスタ ポッドと vSphere ポッド の間では、トラフィックが許可されます。
  • 異なる vSphere 名前空間 にある Tanzu Kubernetes クラスタ ポッドと vSphere ポッド の間では、トラフィックがドロップされます。
  • スーパーバイザー クラスタ 制御プレーン ノードは、Tanzu Kubernetes クラスタ ポッドにアクセスできます。
  • Tanzu Kubernetes クラスタ ポッドは、外部ネットワークにアクセスできます。
  • 外部ネットワークは、Tanzu Kubernetes クラスタ ポッドにアクセスできません。Tanzu Kubernetes クラスタ ノードでは、分散ファイアウォール (DFW) の隔離ルールによってトラフィックがドロップされます。

ルーティング可能なポッドのシステム要件

ルーティング可能なポッド ネットワークを使用するには、NSX-T Data Center を使用して スーパーバイザー クラスタ を構成する必要があります。ネイティブ vSphere vDS ネットワークでは、ルーティング可能なポッドを使用することはできません。

ルーティング可能なポッドには、Tanzu Kubernetes Grid サービス v1alpha2 API が必要です。TKGS v1alpha2 API を使用するための要件を参照してください。

ルーティング可能なポッドに関する NSX-T 構成の要件

基本要件以外に、Tanzu Kubernetes クラスタでルーティング可能なポッド ネットワークを使用するための特別な NSX-T 構成は必要ありません。NSX-T を使用して vSphere U3 を実行している vSphere with Tanzu 環境には、ルーティング可能なポッド ネットワークをサポートするバージョンの NCP が含まれています。追加の NSX-T 構成は不要です。

NCP は、ルーティング可能なポッド ネットワークの IP アドレス プールを次の 2 つのソースのいずれかから作成します。
  • ワークロード ネットワークが名前空間ネットワークを使用して構成されている場合、NCP は、この名前空間ネットワークに指定されている IP アドレス ブロックから 1 つ以上の IP プールを作成します。
  • ワークロード ネットワークに対して名前空間ネットワークが指定されていない場合、NCP は、スーパーバイザー クラスタ ポッド CIDR から 1 つ以上の IP プールを作成します。
詳細については、『 VDS ネットワークが構成されている スーパーバイザー クラスタ へのワークロード ネットワークの追加』および『 NSX-T Data Center が構成されている スーパーバイザー クラスタ のワークロード ネットワーク設定の変更』を参照してください。

ルーティング可能なポッドに関する スーパーバイザー クラスタ の構成要件

Tanzu Kubernetes クラスタでルーティング可能なポッド ネットワークを使用するうえでは、基本要件以外に特別な スーパーバイザー クラスタ 構成は必要ありません。

ルーティング可能なポッド ネットワークが以下の説明に従って有効にされている場合、Tanzu Kubernetes クラスタ ポッドの CIDR は、名前空間ネットワークから作成された IP アドレス プールから、またはこれが作成されていない場合は スーパーバイザー クラスタ ポッド CIDR から割り当てられます。

クラスタ ノードに IP アドレスを割り当てる スーパーバイザー クラスタ サービス CIDR が、名前空間ネットワーク CIDR または スーパーバイザー クラスタ ポッド CIDR と重複していないことを確認する必要があります。

ルーティング可能なポッドのクラスタ構成の例

次のサンプル YAML は、ルーティング可能なポッド ネットワークを使用してクラスタを構成する方法を示します。ここで示されているのは Tanzu Kubernetes Grid サービス を呼び出すためのカスタム構成であり、v1alpha2 API を使用して Tanzu Kubernetes クラスタをプロビジョニングします。

クラスタの仕様では、ルーティング可能なポッド ネットワークを有効にするために antrea-nsx-routed を CNI として宣言しています。CNI が antrea-nsx-routed と指定されている場合、pods.cidrBlock フィールドは空にする必要があります。antrea-nsx-routed が指定されている場合、NSX-T ネットワークが使用されていないとクラスタのプロビジョニングは失敗します。

apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-v2-cluster-routable-pods
  namespace: tkgs-cluster-ns
spec:
  topology:
    controlPlane:
      replicas: 3
      vmClass: guaranteed-medium
      storageClass: vwt-storage-policy
      tkr:  
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
    nodePools:
    - name: worker-nodepool-a1
      replicas: 3
      vmClass: guaranteed-large
      storageClass: vwt-storage-policy
      tkr:  
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
  settings:
    storage:
      defaultClass: vwt-storage-policy
    network:
      #`antrea-nsx-routed` is the required CNI
      #for routable pods 
      cni:
        name: antrea-nsx-routed
      services:
        cidrBlocks: ["10.97.0.0/24"]
      serviceDomain: tanzukubernetescluster.local
      #`pods.cidrBlocks` value must be empty
      #when `antrea-nsx-routed` is the CNI 
      pods:
        cidrBlocks: