Tanzu

Tanzu with NSX ALB をロードバランサーとk8sワークロードが異なるネットワークの構成にデプロイする手法

はじめまして。VMware の伊藤です。Tanzu 製品のプラットフォームアーキテクトとして働いており、開発と運用双方の経験があります。この記事では Tanzu で利用するロードバランサー NSX-ALB をロードバランサーと k8s ワークロードが別ネットワークの構成で使う手法を解説をします。

vSphere with Tanzu にしろ、TKGm にしろ、「ロードバランサーと k8s ワークロードが異なるネットワークの構成(Tanzu の2アーム構成)」は「ロードバランサーと k8s ワークロードが同一ネットワークの構成(Tanzu の1アーム構成)」に比べるとネットワーク設計と設定が複雑になります。

製品を試す初期段階ではシンプルな1アーム構成でよいかもしれませんが、いざ本番環境で利用するとなると「外部からのトラフィックを受けるロードバランサーのネットワーク」と「k8s のノード間通信で使われる内部ワークロードのネットワーク」を分離したいといった要件が発生し、2アーム構成が採用されることがよくあります。そのため、この記事でその構成サンプルと NSX-ALB の設定を紹介します。

なお、1アーム構成の vSphere with Tanzu と TKGm の構築については別記事で扱っておりますので、ここではその差分として「2アーム構成の vSphere with Tanzu」の構築を扱います。この記事で扱う内容はほぼロードバランサー NSX-ALB の設定ですので、TKGm についてもほぼ同様に2アーム構成を構築できるはずです。vSphere with Tanzu および TKGm の基本的な設定方法が分からない場合は先に以下の1アーム構成の記事を一読ください。

vSphere with Tanzu 7.0u2, NSX-ALB LoadBalancer の簡易構成の構築

vSphere環境への TKG 1.3.0 with NSX-ALB の簡易展開手順

 

※ 上記の1アーム構成/2アーム構成は Tanzu の視点での用語であり、NSX-ALB としてはマネージメントを除くいくつのネットワークにインターフェースを作成するかが「X」アーム構成の X にあたります。そのため、Tanzu の1アーム構成も2アーム構成も、NSX-ALB 的には1アーム構成と呼ばれます。ご注意ください。

 

構築するネットワーク構成

設定の解説にはいるまえに vSphere の構成を確認します。vSphere with Tanzu の足回りとして Distributed vSwitch を用意しているだけのシンプルな構成です。

Distributed vSwitch が持つ3つの Distributed Port はそれぞれ以下のように利用されます。

  • dp-mgmt-32: マネージメント用ネットワーク
  • dp-data-48: k8s ワークロード用ネットワーク
  • dp-data-52: ロードバランサ用ネットワーク

 

これらの3つのネットワーク上に vSphere with Tanzu を構成するコンポーネントがどのように配置されるかを以下の図に記載します。

各コンポーネントの詳細は1アーム構成の構築記事を参照ください。1アーム構成であれば、左から2つめの NSX-ALB Service Engine (ロードバランサーのデータプレーン)は緑のワークロード用ネットワークに接続されます。今回は2アーム構成なので、別の紫のロードバランサ用ネットワークに接続されています。

1アーム構成と2アーム構成の最も大きな違いは、1アーム構成は「NSX-ALB SE と k8s ノードが同一ネットワークにいるためトラフィック転送にルーティングが発生しない(L2転送)」であるのにたいし、2アーム構成は「NSX-ALB SE はルーター(図のL3スイッチ)を経由して k8s ノードにトラフィックを転送する必要がある」ということです。つまり、2アーム構成は1アーム構成と異なり、「どのようにトラフィックを別ネットワークに届けるか」という設定を NSX-ALB にたいして設定する必要が発生します。

 

NSX-ALB のルーティング設定

ここからは NSX-ALB にたいして具体的にどのようなルーティング設定を実施すればよいかを説明します。NSX-ALB の基本的な設定手順は1アーム構成の構築記事に書いていますので、そちらも参照ください。

まず、NSX-ALB でルーティングを有効化する必要があります。その設定は NSX-ALB の初期構築のタイミング(下記図の左)か、構築後の「クラウドの設定(下記図の右)」よりおこないます。

「Prefer Static Routes vs Directly Connected Network」および「Use Static Route for Network Resolution of VIP」にともにチェックをつけてください。

 

次に具体的なネットワークの設定とルーティングの設定を実施します。どのようなエントリを作成すればよいかを図で確認します。

まず、クライアントからのトラフィックを受け取るのは NSX-ALB SE のデータプレーン側の紫色のネットワークです。このネットワークのインタフェース上に VIP(仮想IP)が NSX-ALB の IPAM(IP Address Management) の機能により払い出されます。

通信を受け取った VIP は、それをトラフィックを処理する k8s のワークロードネットワークに転送をしますが、その送信元インターフェースは VIP がある紫色のネットワークのインタフェースとなります。図の「Source Interface」と書かれている場所です。そのため、「ワークロードネットワーク 192.168.48.0/22 にたいして、ソースインターフェースがあるネットワークの 192.168.52.1 (ゲートウェイ)を経由して通信する」とエントリを作成します。具体的には「192.168.48.0/22 via 192.168.52.1」となります。

同様に送信元インターフェースからマネージメントネットワーク(一部機能がロードバランサを使う)への転送エントリも「192.168.32.0/20 via 192.168.52.1」として定義します。なお、NSX-ALB SE はマネージメントネットワーク側にもインターフェースを持っていますが、それはロードバランサーの転送用途としては使われません。転送が発生する場合はデータプレーン側からマネージメント側へのルーティングのエントリ作成を忘れないようにしてください。

 

それではこれらのルーティング設定を NSX-ALB に実施していきます。まず、転送エントリ作成の前に、そもそもロードバランサ用ネットワークとして dp-data-52(192.168.52.0/22)を使うという設定をします。

図の左では「Infrastructure -> Network」と進み、ロードバランサ用ネットワーク dp-data-52 の設定(サブネットおよび VIP の Pool)を実施しています。そして、IPAM の設定(Templates -> Profile -> IPAM/DNS Profiles)より、dp-data-52 のVIPをIPAMで払い出す設定をおこないます。最後に先ほどのクラウドの設定(Infrastructure -> Clouds -> Edit -> Infrastructure)で、作成した IPAM Profile を適用します。これらの設定により k8s 上で L4LB や Ingress リソースが作成されたタイミングで dp-data-52 のインターフェース上で定義された VIP Pool アドレスを IPAM 機能で払い出すようになります。

 

これでロードバランサーのネットワークインタフェースと IPAM の設定は完了したので、次にルーティングエントリを作成します。

先ほどのトポロジ図で説明したように「192.168.48.0/22(ワークロードネットワーク) via 192.168.52.1」と「192.168.32.0/20(マネージメントネットワーク) via 192.168.52.1」のエントリを作成しています。これで宛先に応じてパケットが物理スイッチのゲートウェイ(192.168.52.1)に転送され、あとはL3スイッチが宛先ネットワークに転送してくれます。

 

以上で NSX-ALB SE の VIP インターフェースから、ワークロードネットワークやマネージメントネットワークにたいして通信が転送できるようになるため設定完了です。