NSX Network Security NSX Data Center アプリケーションのモダナイゼーション ネットワーク

Antrea ベースの Kubernetes クラスタを NSX に統合する手順

Kubernetes クラスタの Antrea ネットワークを NSX に統合

VMware はコンテナネットワーキング向けのソリューションとして、IaaS、CaaS からアプリケーション層に至る様々なレイヤの製品をご提供しています。

  • Kubernetes を下支えする IaaS/vSphere 環境のネットワーク&セキュリティ製品である VMware NSX
  • 仮想ロードバランサー製品である NSX-ALB (Advanced LoadBalancer) と、NSX-ALB を外部 LB として利用し Kuberbetes Service LoadBalancer、Ingress、Gateway 機能を実現する AKO (Avi Kubernetes Operator)
  • Tanzu 製品群にも組み込まれているオープンソースの CNI である Antrea
  • Kubernetes のクラスターネットワーキング機能として NSX を活用する NCP (NSX Container Plugin)

 

NSX, Antrea, NSX-ALB/AKO によるマルチ Kubernetes クラスタ管理

 

Antrea CNI はそれ単体で Kubernets のセキュリティを強化する高度なネットワークポリシーを利用可能ですが、NSX Manager 連携機能を利用すれば、マルチクラスタ環境での一貫した Kubernetes ネットワークポリシーを管理することが可能です。また VM のような既存のワークロードとの間でファイアウォール機能を利用することも可能になっています。

Antrea CNI とは何か、そして Antrea と NSX を連携することで使用できる機能については、以下の2つのブログでご紹介しています。

これらの機能を利用するためには、Antrea CNI が展開された Kubernetes クラスタを NSX Manager と連携させる必要があります。本ブログでは、この連携方法と手順についてご紹介したいと思います。

 

Antrea を含む Kubernetes クラスタを NSX Manager に統合するための条件

Antrea NSX 連携機能を利用するには、VMware が提供する製品版の Antrea である VMware Container Networking with Antrea (VCNA) が必要になります。この機能の使用権は NSX の Advanced または Enterprise エディション、もしくは VCNA の Enterprise エディションに付属します。使用する NSX Manager にこれらのライセンスのいずれかが適用済みであることをご確認ください。

また、互換性のある NSX と Antrea のバージョンを使用している必要があります。以下でご紹介する設定例では、NSX 4.1 および OSS 版の Antrea 1.12.0 を使用しています。また対象の Kubernetes クラスタは v1.25.5、ベース OS は Ubuntu 20.04.6 LTS で構成しています。

なお、Antrea 連携のインストール方法は NSX の管理ガイドにも記載されています。前提条件も詳細に記載されておりますので、設定作業の開始前に目を通していただくことをお勧めします。

 

アーキテクチャ

Antrea 連携を有効にするには、まず Kubernetes クラスタ側に Antrea の Controller と Agent (下図の薄緑部) をインストールした後、NSX Manager とのアダプタとなるモジュール(Antrea NSX Adapter、下図の濃緑部)を展開します。このコンテナが NSX Manager と K8s API の間を仲介し、Antrea Controller からの情報収集や Antrea への制御を行います。

 

Antrea CNI のインストール

VMware Tanzu Kubernetes Grid (TKG) では Antrea を初期インストール時にセットアップすることが可能ですが、今回のようにアップストリームの Kubernetes やサードパーティ製品を利用する場合は個別にインストールする必要があります。Antrea CNI のインストールについては Antrea レポジトリの Getting Started に記載されていますが、ここでは代表的な手順を簡単にご説明します。

まず、以下のコマンドでターゲットのクラスタに Antrea をインストールします。(Antrea v1.12.0 をインストールする場合)


$ kubectl apply -f https://github.com/antrea-io/antrea/releases/download/v1.12.0/antrea.yml

次に Antrea を管理するための antctl コマンドを作業環境にインストールし、稼働中の Antrea バージョンを確認します。(Mac or Linux, Antrea v1.12.0の場合)


$ curl -Lo ./antctl "https://github.com/vmware-tanzu/antrea/releases/download/v1.12.0/antctl-$(uname)-x86_64"
$ chmod +x ./antctl
$ mv ./antctl /usr/local/bin
$ antctl version
antctlVersion: v1.12.0
controllerVersion: v1.12.0

念のため、Antrea Controller と Agent が稼働中であることを確認します。Antrea Controller は deployment, Antrea Agent は Daemon Set として展開されています。このクラスタには3台のノードがあり、Antrea Agent はすべてのノードで稼働しています。


$ kubectl get deployments antrea-controller -n kube-system
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
antrea-controller   1/1     1            1           10m
$ kubectl get daemonsets antrea-agent -n kube-system
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
antrea-agent   3         3         3       3            3           kubernetes.io/os=linux   11m
$ kubectl get pod -o wide -n kube-system | grep antrea
NAME                               READY   STATUS    RESTARTS   AGE   IP             NODE             NOMINATED NODE   READINESS GATES
antrea-agent-hvg8h                 2/2     Running   0          13m   172.19.0.203   k8s-worker-203   <none>           <none>
antrea-agent-jh9j5                 2/2     Running   0          13m   172.19.0.201   k8s-master-201   <none>           <none>
antrea-agent-jpvwh                 2/2     Running   0          13m   172.19.0.202   k8s-worker-202   <none>           <none>
antrea-controller-b59c8598-67n4h   1/1     Running   0          13m   172.19.0.203   k8s-worker-203   <none>           <none>

 

Antrea NSX Adaptor インストール手順

ここからは、NSX 管理ガイドの Antrea Kubernetes クラスタを NSX に登録するための前提条件 に従って、Antrea NSX Adaptor を展開するための準備作業を行っていきます。

 

1. 自己署名セキュリティ証明書の作成

まず、Adaptor が NSX に接続する際に使用する証明書を OpenSSL コマンドを使って作成していきます。ここでは、登録する Kubernetes クラスタの名前を kubeadm-cluster-1 としています。


$ openssl genrsa -out kubeadm-cluster-1-private.key 2048
$ openssl req -new -key kubeadm-cluster-1-private.key -out kubeadm-cluster-1.csr -subj "/C=US/ST=CA/L=Palo Alto/O=VMware/OU=Antrea Cluster/CN=kubeadm-cluster-1"
$ openssl x509 -req -days 3650 -in kubeadm-cluster-1.csr -signkey kubeadm-cluster-1-private.key -out kubeadm-cluster-1.crt

 

2. プリンシパル ID ユーザの作成

次に、Antrea NSX Adaptor が使用する NSX ユーザとしてプリンシパル ID ユーザを作成します。NSX Manager UI を開き、[システム] > [ユーザー管理] > [ユーザーロールの割当 ] の順に移動します。さらに [プリンシパル ID の追加]  をクリックしてユーザーの作成画面を開き、以下のように設定を追加します。

  • プリンシパル ID ユーザ: 任意のユニークな名前を指定します。
  • ノード ID: Kubernetes クラスタの名前を入力します。(ここでは “kubeadm-cluster-1” )
  • 証明書のPEM: 前のステップで作成した自己署名証明書ファイル (ここでは “kubeadm-cluster-1.crt” ) の中身を BEGIN 行、END 行も含めて貼り付けます。

次にロール列の [設定] をクリックし、[ロールの追加] をクリックして、このユーザに [エンタープライズ管理者] ロールを割り当てます。[適用] をクリックします。

最後に、[保存] をクリックしてユーザー作成を完了します。

 

3. Antrea NSX Adaptor イメージのバージョンを特定

Antrea NSX Adaptor のパッケージをダウンロードする必要がありますが、その前に、使用中の Antrea のバージョンからダウンロードする Adaptor イメージを決定します。本ブログの執筆時点では製品版 VCNA は 1.7.0 が最新で、それに含まれる OSS Antrea バージョンは 1.11.1 となります。今回は Antrea 1.12.0 を使っているので、VCNA 1.7.0 に対応する最新のイメージを使います。各 VCNA バージョンに対応する OSS Antrea のベースバージョン、および Antrea NSX Adaptor イメージは、各 VCNA バージョンのリリースノートで確認できます。

Release Notes 内の Antrea-NSX images の記載から、Ubuntu 環境で利用する Adaptor イメージが以下であることが分かります。これはこの後のステップで使用します。

  • projects.registry.vmware.com/antreainterworking/interworking-debian:0.11.0

 

4. Antrea NSX Adaptor のパッケージをダウンロード

VMware Customer Connect に、NSX 製品をダウンロードできるユーザ ID でログインします。ログイン後、右上の地球儀のアイコンをクリックして言語を English に切り替えます。

次に、[Products and Accounts] メニューから [All Products] を選んで移動します。右側のプルダウンメニューから [Networking & Security] を選択します。ダウンロード可能なすべてのネットワーキング製品がリストされるので、[VMware Antrea] を見つけて [View Download Components] をクリックします。

ダウンロード可能なすべての VCNA バージョンが表示されるので、ここでは 1.7.0 を選んで [GO TO DOWNLOADS] をクリックします。

VCNA 1.7.0 のダウンロード可能なパッケージがリストされます。Antrea NSX Adaptor のパッケージ ( “Interworking Adaptor” の文字列が含まれている) の中から、[VMware Container Networking with Antrea, NSX Interworking Adapter Image and Deployment Manifests] を選択し、[DOWNLOAD NOW] をクリックしてダウンロードします。

 

5. Antrea NSX Adaptor 構成ファイルの編集

前のステップでダウンロードした ZIP パッケージファイルを unzip コマンドなどで解凍します。いくつかの YAML ファイルや Adaptor のイメージファイル等が抽出されます。

Adaptor イメージを Kubernetes クラスタに展開する方法としては (1) VMware レジストリからプルする方法と、(2) パッケージに添付されたイメージを手動でコピーする方法の 2 つがありますが、今回は推奨方法である (1) を選択します。

抽出した YAML ファイルのうち、interworking.yamlderegisterjob.yaml をエディタで開き、すべてのイメージ URL 定義を、Release Notes で確認した以下の文字列に書き換えていきます。(Ubuntu 環境の場合)

  • image: projects.registry.vmware.com/antreainterworking/interworking-debian:0.11.0

次に、ブートストラップ構成ファイルの編集の手順に従って、bootstrap-config.yaml を変更します。変更箇所と変更内容は以下のとおりです。

  • clusterName: 対象の Kubernetes クラスタの名前を入力します。(ここでは “kubeadm-cluster-1” )
  • NSXManagers: NSX Manager の IP アドレスを入力します。NSX Manager クラスタ内の複数の NSX Manager の IP アドレスを指定する場合は、IP アドレスをカンマで区切って入力します。検証環境などで NSX Manager が 1 台の場合は、その IP アドレスのみを入力します。
  • tls.crt: NSX のプリンシパル ID ユーザーを作成する際に使用した、自己署名証明書を base64 エンコードしたものを 1 行で入力します。今回の例では、kubeadm-cluster-1.crt 証明書ファイルを、以下のようにエンコードした結果を入力します。

    $ cat kubeadm-cluster-1.crt | base64 -w 0


  • tls.key: Kubernetes クラスタのプライベートキーファイルを base64 エンコードしたものを 1 行で入力します。今回の例では、kubeadm-cluster-1-private.key ファイルを、以下のようにエンコードした結果を入力します。

    $ cat kubeadm-cluster-1-private.key | base64 -w 0


以下は bootstrap-config.yaml の修正例(抜粋)です。


apiVersion: v1
kind: Namespace
metadata:
  name: vmware-system-antrea
  labels:
    app: antrea-interworking
    openshift.io/run-level: '0'
---
# NOTE: In production the bootstrap config and secret should be filled by admin
# manually or external automation mechanism.
apiVersion: v1
kind: ConfigMap
metadata:
  name: bootstrap-config
  namespace: vmware-system-antrea
data:
  bootstrap.conf: |
    bootstrapFrom: "Inline"
    clusterName: kubeadm-cluster-1
    NSXManagers: [xxx.xxx.xxx.xxx]
    vpcPath: ""
    proxyEndpoints:
      rest-api: []
      nsx-rpc-fwd-proxy: []
---
apiVersion: v1
kind: Secret
metadata:
  name: nsx-cert
  namespace: vmware-system-antrea
type: kubernetes.io/tls
data:
  tls.crt: LS0tLS1CRUd...0tLS0tCg==
  tls.key: LS0tLS1CRUd...VZLS0tLS0K

 

6. Antrea NSX Adaptor の展開

最後に、作成した YAML ファイルを使用して Kubernetes クラスタに Antrea NSX Adaptor を展開し、NSX と連携させます。以下のコマンドを実行します。引数の順番は厳密に以下の通りである必要があります。管理ガイドの Kubernetes API サーバへの YAML ファイルの送信 も参照してください。


$ kubectl apply -f bootstrap-config.yaml -f interworking.yaml

VMware レポジトリから Antrea NSX Adaptor (interworking Pod) がクラスタ内に展開され、初期設定が自動的に行われます。interworking Pod の起動状況は以下のコマンドで確認できます。


$ kubectl get pods -o wide -n vmware-system-antrea
NAME                            READY   STATUS    RESTARTS   AGE   IP             NODE             NOMINATED NODE   READINESS GATES
interworking-6bd58f97cc-7ccwp   4/4     Running   0          16m   172.19.0.202   k8s-worker-202   <none>           <none>

NSX との連携が成功していたら、NSX UI 上でも状況を確認することができます。NSX Manager UI を開き、[システム] > [ファブリック] > [ノード] > [コンテナ クラスタ] の順に移動します。登録したクラスタの状態が [稼働中] で表示されていれば成功です。

また、[稼働中] のリンクをクリックすると、クラスタ内の各コンポーネント (Antrea Controller, Agents, Adaptor の管理プレーンおよび制御プレーン) の稼働状態も確認することができます。

NSX UI から使える Antrea 連携機能をさらに試してみたい場合は、NSX の Antrea CNI 連携機能Antrea と NSX でコンテナと VM 間のファイアウォールを強化 のブログもご参照ください。

 

アンインストールに関する注意事項

Antrea NSX Adaptor を削除する場合は、必ず管理ガイドの NSX からの Antrea Kubernetes クラスタの登録を解除 に従って実施してください。(NSX 側の登録情報も同時に解除する必要があるため)

 

終わりに

本ブログでは Antrea が構成された Kubernetes クラスタを NSX と連携させる手順についてご紹介しました。Antrea と NSX を連携する作業の際に、多少なりとも参考になれば幸いです。最初の方でご紹介した関連ブログで説明しているように、Antrea NSX 連携を使うと Kubernetes ネットワークの管理、セキュリティ、トラブルシューティング等でより高度な機能をお使いいただけるようになります。また今後も様々な機能の追加を予定しておりますので、ぜひ一度お試しいただければと思います。


〜お知らせ〜

※VMwareでは、各種製品をクラウド上でご評価いただける Hands-on Labs (HOL) を無償でご提供しています。
今回ご紹介した各種ソリューションへの入り口としてぜひご活用下さい。(Antrea連携機能のHOLはまだご提供しておりません)