設定が必要な NSX-T Data Center リソースには、オーバーレイ トランスポート ゾーン、Tier-0 論理ルーター、ノード仮想マシンに接続する論理スイッチ、Kubernetes ノードの IP アドレス ブロック、SNAT の IP アドレス プールなどがあります。

重要: NSX-T Data Center 2.4 以降で実行している場合は、 [ネットワークとセキュリティの詳細設定] タブを使用して NSX-T リソースを設定する必要があります。

NSX Container Plug-in (NCP) 設定ファイル ncp.ini では、NSX-T Data Center リソースはそれらの UUID または名前を使用して指定されます。

オーバーレイ トランスポート ゾーン

NSX Manager にログインし、[システム] > [ファブリック] > [トランスポート ゾーン] の順に移動します。コンテナ ネットワークに使用されているオーバーレイ トランスポート ゾーンを検索するか、新規に作成します。

ncp.ini[nsx_v3] セクションで overlay_tz オプションを設定して、クラスタのオーバーレイ トランスポート ゾーンを指定します。この手順はオプションです。overlay_tz を設定しない場合、NCP は Tier-0 ルーターからオーバーレイ トランスポート ゾーン ID を自動的に取得します。

Tier-0 論理ルーティング

NSX Manager にログインし、[ネットワークとセキュリティの詳細設定] > [ネットワーク] > [ルーター] の順に移動します。コンテナ ネットワークに使用されているルーターを検索するか、新規に作成します。

ncp.ini[nsx_v3] セクションで tier0_router オプションを設定して、クラスタの Tier-0 論理ルーターを指定します。

注: ルーターは、アクティブ/スタンバイ モードで作成する必要があります。

論理スイッチ

ノードがデータ トラフィック用に使用する vNIC は、オーバーレイ論理スイッチに接続する必要があります。ノードの管理インターフェイスは NSX-T Data Center に接続する必要はありませんが、接続するとセットアップが容易になります。 NSX Manager にログインし、 [ネットワークとセキュリティの詳細設定] > [ネットワーク] > [スイッチング] > [スイッチ] の順に移動して、論理スイッチを作成できます。スイッチ上で論理ポートを作成し、ノードの vNIC を接続します。論理ポートには次のタグが必要です。
  • タグ:<cluster_name>、スコープ:ncp/cluster
  • タグ:<node_name>、スコープ:ncp/node_name
<cluster_name> 値は、 ncp.ini[coe] セクションにある cluster オプションの値と一致させる必要があります。

Kubernetes ポッドの IP アドレス ブロック

NSX Manager にログインして、[ネットワークとセキュリティの詳細設定] > [ネットワーク] > [IP アドレス管理] の順に移動し、1 つ以上の IP アドレス ブロックを作成します。IP アドレス ブロックを CIDR 形式で指定します。

ncp.ini[nsx_v3] セクションで container_ip_blocks オプションを設定して、Kubernetes ポッドの IP アドレス ブロックを指定します。

また、SNAT 以外の名前空間(Kubernetes 用)またはクラスタ(PCF 用)専用の IP アドレス ブロックを作成することもできます。

ncp.ini[nsx_v3] セクションで no_snat_ip_blocks オプションを設定して、SNAT 以外の IP アドレス ブロックを指定します。

NCP の実行中に SNAT 以外の IP アドレス ブロックを作成した場合には、NCP を再起動する必要があります。再起動しない場合、IP アドレス ブロックが枯渇するまで、NCP は共有の IP アドレス ブロックを使用し続けます。

注: IP アドレス ブロックを作成するときに、NCP 構成ファイル ncp.inisubnet_prefix パラメータの値より大きいプリフィックスは使用しないでください。詳細については、 ncp-rc.yml の ncp.ini の ConfigMapを参照してください。

SNAT の IP アドレス プール

SNAT ルールを使用してポッドの IP アドレスを変換する際、または SNAT/DNAT ルールを使用して Ingress Controller を公開する際に、NSX Manager の IP アドレス プールは OpenStack のフローティング IP アドレスと同様に、IP アドレスの割り当てに使用されます。これらの IP アドレスは、外部 IP アドレスともいいます。

複数の Kubernetes クラスタが同じ外部 IP アドレス プールを使用します。各 NCP インスタンスは、管理する Kubernetes クラスタにこのプールのサブセットを使用します。デフォルトでは、ポッドのサブネットと同じサブネット プリフィックスが使用されます。異なるサイズのサブネットを使用するには、ncp.ini[nsx_v3] セクションにある external_subnet_prefix オプションを更新します。

ncp.ini[nsx_v3] セクションで external_ip_pools オプションを設定して、SNAT の IP アドレス プールを指定できます。

設定ファイルを変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。

特定の Kebernetes 名前空間または PCF 組織への SNAT IP アドレス プールの制限

次のタグを IP アドレス プールに追加することで、SNAT の IP アドレス プールから IP アドレスを割り当てる Kubernetes の名前空間または PCF 組織を指定できます。
  • Kubernetes 名前空間の場合。スコープ:ncp/owner、タグ:ns:<namespace_UUID>
  • PCF 組織の場合。スコープ:ncp/owner、タグ:org:<org_UUID>
名前空間または組織の UUID は、次のいずれかのコマンドで取得できます。
kubectl get ns -o yaml
cf org <org_name> --guid
次の点に注意してください。
  • 各タグには 1 つの UUID を指定する必要があります。同じプールに対して複数のタグを作成できます。
  • 古いタグ ベースで一部の名前空間または組織に IP アドレスが割り当てられた後にタグを変更すると、Kubernetes サービスまたは PCF アプリケーションの SNAT 設定が変更されるか NCP が再起動されるまで、割り当てられた IP アドレスは再利用されません。
  • 名前空間と PCF 組織の所有者タグはオプションです。これらのタグがない場合、任意の名前空間または PCF 組織に SNAT IP アドレス プールから IP アドレスを割り当てることができます。

サービスの SNAT IP アドレス プールの設定

サービスにアノテーションを追加して、サービスの SNAT IP アドレス プールを設定できます。次はその例です。
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

ncp/snat_pool で指定される IP アドレス プールには、タグ {"ncp/owner": cluster:<cluster>} を含める必要があります。

NCP によって、このサービスの SNAT ルールが設定されます。このルールの送信元 IP アドレスは、一連のバックエンド ポッドです。宛先 IP アドレスは、指定した外部 IP アドレス プールから割り当てられた SNAT IP アドレスです。NCP で SNAT ルールを設定する際にエラーが発生すると、サービスには ncp/error.snat: <error> のアノテーションが追加されます。想定されるエラーは次のとおりです。
  • IP_POOL_NOT_FOUND - NSX Manager に SNAT IP アドレス プールがありません。
  • IP_POOL_EXHAUSTED - SNAT IP アドレス プールが枯渇しています。
  • IP_POOL_NOT_UNIQUE - ncp/snat_pool で指定されたプールが NSX Manager の複数のプールを参照しています。
  • SNAT_POOL_ACCESS_DENY - プールの所有者タグが、割り当て要求を送信しているサービスの名前空間と一致しません。
  • SNAT_RULE_OVERLAPPED - 新しい SNAT ルールが作成されましたが、SNAT サービスのポッドが別の SNAT サービスに属しています。その結果、同一のポッドに複数の SNAT ルールが適用されています。
  • POOL_ACCESS_DENIED - ncp/snat_pool で指定された IP アドレス プールにタグ {"ncp/owner": cluster:<cluster>} がないか、プールの所有者タグが、割り当て要求を送信しているサービスの名前空間と一致しないことを示します。
次の点に注意してください。
  • ncp/snat_pool で指定されたプールは、サービスを設定する前に NSX-T Data Center に配置しておく必要があります。
  • NSX-T Data Center では、サービスの SNAT ルールの優先順位はプロジェクトよりも高くなります。
  • ポッドに複数の SNAT ルールが設定されている場合は、1 つのルールのみが機能します。
  • アノテーションを変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。

名前空間の SNAT IP アドレス プールの設定

名前空間にアノテーションを追加して、名前空間の SNAT IP アドレス プールを設定できます。次はその例です。
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-sample
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
    ...
NCP によって、この名前空間に SNAT ルールが設定されます。このルールの送信元 IP アドレスは、一連のバックエンド ポッドです。宛先 IP アドレスは、指定した外部 IP アドレス プールから割り当てられた SNAT IP アドレスです。NCP で SNAT ルールを設定する際にエラーが発生すると、名前空間には ncp/error.snat: <error> のアノテーションが追加されます。想定されるエラーは次のとおりです。
  • IP_POOL_NOT_FOUND - NSX Manager に SNAT IP アドレス プールがありません。
  • IP_POOL_EXHAUSTED - SNAT IP アドレス プールが枯渇しています。
  • IP_POOL_NOT_UNIQUE - ncp/snat_pool で指定されたプールが NSX Manager の複数のプールを参照しています。
  • POOL_ACCESS_DENIED - ncp/snat_pool で指定された IP アドレス プールにタグ {"ncp/owner": cluster:<cluster>} がないか、プールの所有者タグが、割り当て要求を送信している名前空間と一致しないことを示します。
次の点に注意してください。
  • アノテーションでは、SNAT IP アドレス プールを 1 個のみ指定できます。
  • SNAT IP アドレス プールは、ncp.ini で設定する必要はありません。
  • ncp/snat_pool で指定される IP アドレス プールには、タグ {"ncp/owner": cluster:<cluster>} を含める必要があります。
  • ncp/snat_pool で指定される IP アドレス プールには、名前空間タグ {"ncp/owner": ns:<namespace_UUID>} も含める必要があります。
  • ncp/snat_pool アノテーションが見つからない場合、名前空間ではクラスタの SNAT IP アドレス プールを使用します。
  • アノテーションを変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。

PAS アプリケーションの SNAT プールの設定

NCP はデフォルトで、PAS (Pivotal Application Service) 組織用に SNAT の IP アドレスを設定します。SNAT の IP アドレス プールの情報が含まれた manifest.xml を使用してアプリケーションを作成し、アプリケーション用に SNAT IP アドレスを設定できます。次はその例です。
    applications:
      - name: frontend
        memory: 32M
        disk_quota: 32M
        buildpack: go_buildpack
        env:
          GOPACKAGENAME: example-apps/cats-and-dogs/frontend
          NCP_SNAT_POOL: <external IP pool ID or name>
    ...
NCP によって、このアプリケーションに SNAT ルールが設定されます。ルールの送信元 IP アドレスは一連のインスタンスの IP アドレスで、宛先 IP アドレスは、外部 IP アドレス プールから割り当てられた SNAT の IP アドレスです。次の点に注意してください。
  • NCP_SNAT_POOL で指定されたプールは、アプリケーションのプッシュ前に NSX-T Data Center に配置しておく必要があります。
  • アプリケーションの SNAT ルールの方が、組織の優先順位よりも高くなります。
  • アプリケーションに設定できる SNAT の IP アドレスは、1 つのみです。
  • 設定を変更して NCP を再起動することで、異なる IP アドレス プールに変更できます。

PCF バージョン 3 の SNAT の設定

PCF バージョン 3 では、2 つのうち、いずれかの方法で SNAT を設定できます。

  • アプリケーションを作成するときに、manifest.ymlNCP_SNAT_POOL を設定します。
    たとえば、アプリケーションの名前が bread であり、 manifest.yml に次の情報が含まれているとします。
    applications:
    - name: bread
      stack: cflinuxfs2
      random-route: true
      env:
        NCP_SNAT_POOL: AppSnatExternalIppool
      processes:
      - type: web
        disk_quota: 1024M
        instances: 2
        memory: 512M
        health-check-type: port
      - type: worker
        disk_quota: 1024M
        health-check-type: process
        instances: 2
        memory: 256M
        timeout: 15
    次のコマンドを実行します。
    cf v3-push bread
    cf v3-apply-manifest -f manifest.yml
    cf v3-apps
    cf v3-restart bread
  • cf v3-set-env コマンドを使用して NCP_SNAT_POOL を設定します。
    次のコマンドを実行します(アプリケーションの名前が app3 であると仮定)。
    cf v3-set-env app3 NCP_SNAT_POOL AppSnatExternalIppool
    (optional) cf v3-stage app3 -package-guid <package-guid> (You can get package-guid with "cf v3-packages app3".)
    cf v3-restart app3

(オプション)(Kubernetes のみ)ファイアウォール マーカー セクション

管理者が作成したファイアウォール ルールが、ネットワーク ポリシーに基づいて NCP で作成したファイアウォール セクションに干渉されないようにするには、NSX Manager にログインし、[セキュリティ] > [分散ファイアウォール] > [全般] の順に移動して、2 つのファイアウォール セクションを作成します。

ncp.ini[nsx_v3] セクションで bottom_firewall_section_marker および top_firewall_section_marker オプションを設定して、マーカー ファイアウォール セクションを指定します。

最下位のファイアウォール セクションは、最上位のファイアウォール セクションの下に配置される必要があります。これらのファイアウォール セクションを作成することで、NCP が分離用に作成するすべてのファイアウォール セクションは、リストの最下位のファイアウォール セクションの上に作成され、NCP がポリシー用に作成するすべてのファイアウォール セクションは、最上位のファイアウォール セクションの下に作成されるようになります。マーカー セクションを作成しない場合、すべての分離ルールはリストの最下位に作成され、すべてのポリシー セクションは最上位に作成されます。同じ値を持つ複数のマーカー ファイアウォール セクションを 1 つのクラスタに設定することはできないため、エラーが発生します。