情報畑でつかまえてロゴ
本サイトは NTTテクノクロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

ネットワークの仮想化とTacker

VNFM、NFVOを実現するOSSであるTackerの説明から社内プロキシ下の環境での構築までをご紹介します

cloud_25913869_s.jpg

はじめに

こんにちは。NTTテクノクロス株式会社の藤井と申します。

突然ですが、皆様はクラウド環境でルータやファイアウォールといった各ネットワーク機器を組み込んだ環境を構築してみたいと思ったことはないでしょうか。
現実世界で環境構築する場合には、各ネットワーク機能を備えたマシンを個別に用意するのも大変です。

そのような場合には、「Tacker」と呼ばれるOSSを使用する、というのも一案です。

Tackerとは、一言でいうとVNFM(Virtual Network Function Management)、NFVO(Network Function Virtualization Orchestrator)
実現するOSSです。

今回はこのTackerについてと構築手順をご紹介します。その際に、VNFMやNFVOについてもご紹介します。

なお構築手順は、外部に接続する際に社内プロキシを通す場合の手順として記載します。
理由は、当社環境が該当環境ではあったのですが、中々情報がなく、構築に時間を要した背景がある為です。
企業活動として構築を行う場合、同様のポイントで悩まされる方もいるかと思いましたので、本記事を通して助けになれれば、
と考えています。

本記事では、以下の流れで説明したいと思います。

1.前提知識について

2.環境構築の条件

3.インストール関連作業

4.openstackインストール後の画面確認

5.Tackerを用いた使用例

6.おわりに

前提知識について

今回ご紹介するTackerOpenStackのコンポーネントの1つです。

まず、OpenStackは以下のクラウドを構築、運用することができるOSSになります。

種類 説明
パブリッククラウド 一般ユーザや企業など、外部の不特定多数の人で環境を共有して使用できるサービスを指す
プライベートクラウド 特定のユーザや企業内で占有して使用することが出来るクラウド環境を指す
ハイブリッドクラウド 上記2つを組み合わせたもの

OpenStackは複数のコンポーネントで構成されており、組み込めるコンポーネントは図1のようになっています。

図1 OpenStackを構成するコンポーネント一覧

                    引用:https://www.openstack.org/software/

続いてTackerですが、図1に「NFV」と記載がある点にお気づきでしょうか。
1にあるように、TackerOpenStackの拡張コンポーネントであり、OpenStackを活用してVNF(Virtual Network Function)の管理や
複数のVNFから構成されるネットワークサービスの管理を実現しているものになります。

NFVやVNFについては以下をご確認ください。

種類 説明
NFV

ルータやファイアウォール、ロードバランサーなどのネットワーク機器を汎用サーバの
仮想化基盤上で実装するためのフレームワーク

VNF NFV環境の上で動くルータやファイアウォール、ロードバランサーなどのネットワーク機器を
ソフトウェア(仮想マシン)として実装したもの

ちなみに、「はじめに」にて「TackerとはVNFMNFVOを実現するOSS」と述べましたが、
そもそもこれらはどのようなものなのでしょうか。
以下をご覧ください。

種類 説明
VNFM VNFの作成、変更、削除、起動や停止といった複数のVMの管理を行う機能を指す
NFVO

ネットワーク機能を仮想基盤上で実現するアーキテクチャを指すNFVの自動化をしているもの
具体的には、複数のVNFをテンプレート化し、同じ環境を自動で作り出せることが出来る
また、VNFMVNFの管理を行っているが、NFVOVNFMへの操作に加え、NFV自体の管理も行うため、
より広い範囲の管理を行っている

Tackerが提供しているVNFMNFVOを使用することで、ルータ等のハードウェアを個々で揃え個別に設定するよりも、
仮想上でソフトウェアとして実装されたものを使用する方がコストを抑えられる可能性があるとともに、VNFMで一括管理、
再設定が出来るため、運用がやりやすいことがメリットだと言えます。

また、OpenStackは構築のためのコストがAWSAzureと比べて高いものの、クローズド環境で用途によって構成や設定を
自由に組み替え構築ができることや、商用サービスとして展開することもできるため、柔軟な使い方ができることも
メリットだと言えます。

Tackerのアーキテクチャは図2のようになっています。
GUIでの管理ができるHorizon、もしくはCLI経由でTackerAPIを経由してVNFの作成などを行っています。

図2 Tackerのアーキテクチャ

                    引用:https://wiki.openstack.org/wiki/Tacker

環境構築の条件

以下でインストール前の事前準備手順を記載します。

Tackerの構築にあたり、構築方法は様々ありますが、その中でも今回は「devstack」を使用します。
devstackとは、Openstack環境を手軽に構築することが出来るツールになります。
ただし、devstackは開発環境構築用のツールなので、本番環境には使用しないことを推奨します。

今回行った環境で使用したOSやTacker、devstackのバージョンは以下になります。

条件名 指定条件 備考
OS Ubuntu22.04

Tacker

master コミットID:c5b0806c5eee11d2dff439623e9fb0a775e8c617
devstack master コミットID:48af5d4b1bf5332c879ee52fb4686874b212697f

※ OpenStackはVM内に構築し、OSはインストール直後のものを使用

私が行った環境は社内のプロキシサーバにつながっており、構築時に下記コマンド、環境変数に対してプロキシサーバを経由するように設定する必要がありました。
※一部は「インストール関連作業」節を実行後に必要なものとなる点、ご注意ください

コマンドの種類 指定方法
apt

/etc/apt/apt.conf.d/30proxy

Acquire::http { Proxy "proxy_host:proxy_port"; } ;

curl

~/.curlrc

※上記コマンドはstackユーザで行う。

proxy = "http://proxy_host:proxy_port"

環境変数

/etc/profile

export http_proxy=http://proxy_host:proxy_port

export HTTP_PROXY=http://proxy_host:proxy_port

export https_proxy=http://proxy_host:proxy_port

export HTTPS_PROXY=http://proxy_host:proxy_port

export ftp_proxy=http://proxy_host:proxy_port

export FTP_PROXY=http://proxy_host:proxy_port

export NO_PROXY="127.0.0.1,localhost,(ホストマシンのIPアドレス※今回は192.168.122.126)/24,10.0.0.0/24"

export no_proxy="127.0.0.1,localhost,(ホストマシンのIPアドレス※今回は192.168.122.126)/24,10.0.0.0/24"

docker

設定箇所①

/etc/systemd/system/docker.service.d/http-proxy.conf

export http_proxy=http://proxy_host:proxy_port

export HTTP_PROXY=http://proxy_host:proxy_port

export https_proxy=http://proxy_host:proxy_port

export HTTPS_PROXY=http://proxy_host:proxy_port

export ftp_proxy=http://proxy_host:proxy_port

export FTP_PROXY=http://proxy_host:proxy_port

export NO_PROXY="127.0.0.1,localhost,(ホストマシンのIPアドレス※今回は192.168.122.126)/24,10.0.0.0/24"

export no_proxy="127.0.0.1,localhost,(ホストマシンのIPアドレス※今回は192.168.122.126)/24,10.0.0.0/24"

設定箇所②

/etc/systemd/system/containerd.service.d/http-proxy.conf

[Service]

Environment="HTTP_PROXY=http://proxy-host:proxy-port/"

Environment="HTTPS_PROXY=http://proxy-host:proxy-port/"

Environment="NO_PROXY=127.0.0.1,localhost,(ホストマシンのIPアドレス※今回は192.168.122.126)/24,10.0.0.0/24"

設定箇所③

mkdir -p ~/.docker/
nano ~/.docker/config.json

※上記2コマンドはstackユーザで行う。

{

"proxies":

{

"default":

{

"httpProxy": "http://proxy_host:proxy_port",

"httpsProxy": "http://proxy_host:proxy_port",

"noProxy": "127.0.0.1,localhost,(ホストマシンのIPアドレス※今回は192.168.122.126)/24,10.0.0.0/24"

}

}

}

git

git config --global http.proxy http://proxy_host:proxy_port

git config --global https.proxy http://proxy_host:proxy_port

git config --global url.http://github.com/.insteadOf git://github.com/

git config --global url.http://git.openstack.org.insteadOf git://git.openstack.org/

pip

pip config set global.HTTP_PROXY http://proxy_host:proxy_port

pip config set global.HTTPS_PROXY http://proxy_host:proxy_port

pip config set global.proxy http://proxy_host:proxy_port

sudo pip config set global.HTTP_PROXY http://proxy_host:proxy_port

sudo pip config set global.HTTPS_PROXY http://proxy_host:proxy_port

sudo pip config set global.proxy http://proxy_host:proxy_port
wget

/etc/wgetrc

http_proxy=http://proxy_host:proxy_port

https_proxy=http://proxy_host:proxy_port

ftp_proxy=http://proxy_host:proxy_port

sudoコマンドでの実行時

sudo visudo

#Defaults env_reset

Defaults env_keep="no_proxy NO_PROXY"

Defaults env_keep+="http_proxy https_proxy ftp_proxy"

Defaults env_keep+="HTTP_PROXY HTTPS_PROXY FTP_PROXY"

インストール関連作業

・各パッケージを最新状態にする

sudo apt-get update

sudo apt-get upgrade

・dockerのインストール

sudo apt install ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io

※ dockerのインストール、プロキシ設定後、下記コマンドで反映されていることを確認する。

sudo systemctl daemon-reload

sudo systemctl restart docker

sudo systemctl restart containerd

sudo systemctl show --property=Environment docker

※「sudo systemctl show --property=Environment docker」実行時の結果として以下が表示されることを確認

Environment=HTTP_PROXY=http://proxy_host:proxy_port HTTPS_PROXY=http://proxy_host:proxy_port NO_PROXY=127.0.0.1,localhost,(ホストマシンのIPアドレス※今回は192.168.122.126)/24,10.0.0.0/24

・devstack構築に必要なユーザの作成

sudo useradd -s /bin/bash -d /opt/stack -m stack

sudo chmod +x /opt/stack

echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

sudo -u stack -i

・devstackのクローン

git clone https://opendev.org/openstack/devstack -b master

cd /opt/stack/devstack

・local.confの作成

devstackではどのコンポーネントを構築時に含めるのか、ホストとなるIPアドレスは何にするのか、といった内容を
local.conf」内に記載し、それを元に構築が行われます。

今回使用したlocal.confは下記になります。
ただし、赤字箇所については自身の環境によって変更してください。

[[local|localrc]]

############################################################

# Customize the following HOST_IP based on your installation

############################################################

HOST_IP=X.X.X.X(構築するホストマシンのIPアドレス※今回は192.168.122.126)

ADMIN_PASSWORD=devstack

MYSQL_PASSWORD=devstack

RABBIT_PASSWORD=devstack

SERVICE_PASSWORD=$ADMIN_PASSWORD

SERVICE_TOKEN=devstack

############################################################

# Customize the following section based on your installation

############################################################

# Pip

PIP_USE_MIRRORS=False

USE_GET_PIP=1

#OFFLINE=False

#RECLONE=True

# Logging

LOGFILE=$DEST/logs/stack.sh.log

VERBOSE=True

ENABLE_DEBUG_LOG_LEVEL=True

ENABLE_VERBOSE_LOG_LEVEL=True

# Neutron ML2 with OpenVSwitch

Q_PLUGIN=ml2

Q_AGENT=ovn

# Disable security groups

LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver

# Enable heat, networking-sfc, barbican and mistral

enable_plugin heat https://opendev.org/openstack/heat master

enable_plugin networking-sfc https://opendev.org/openstack/networking-sfc master

enable_plugin barbican https://opendev.org/openstack/barbican master

enable_plugin mistral https://opendev.org/openstack/mistral master

# Ceilometer

#CEILOMETER_PIPELINE_INTERVAL=300

CEILOMETER_EVENT_ALARM=True

enable_plugin ceilometer https://opendev.org/openstack/ceilometer master

enable_plugin aodh https://opendev.org/openstack/aodh master

# Blazar

enable_plugin blazar https://github.com/openstack/blazar.git master

# Fenix

enable_plugin fenix https://opendev.org/x/fenix.git master

# Tacker

enable_plugin tacker https://opendev.org/openstack/tacker master

enable_service n-novnc

enable_service n-cauth

disable_service tempest

[[post-config|/etc/neutron/dhcp_agent.ini]]

[DEFAULT]

enable_isolated_metadata = True

local.conf作成後、stackユーザで下記コマンドを実行し、インストールを開始します。

cd ~/devstack

./stack.sh

openstackインストール後の画面確認

devstackを使用してOpenStackの構築が完了後、下記アドレスでOpenStackGUIでの管理画面にアクセスできます。

http://[ホストマシンのIPアドレス]/dashboard

アクセスすると、図3の画面が表示されるためユーザ名は「admin」、パスワードは「devstack」を
入力することでログインできます。

図3 OpenStackのログイン画面

ログイン後は図4のような画面に遷移します。

図4 OpenStackの管理画面

図4はOpenstackの管理画面になります。
今回の構築ではTackerを含めているため、画面左側のタブの一番下に「NFV」が表示されています。
VNFの作成や管理を行う際はNFVタブから行います。
NFVタブ内には、VNFMNFVOを行うためのタブがそれぞれ用意されているため、行いたい操作に応じて各タブを選択することで実施ができます。
1つ目のVNFMを行うためのタブの内容は図5のようになっています。

図5 VNFMで実行できる機能一覧

VNFMで実行できる各機能については以下をご覧ください。

種類 説明
VNF Catalog

TOSCA(Topology and Orchestration Specification for Cloud Applications)と呼ばれるYAML形式で記載された
ファイルに、VNFでどのような機能、設定を持たせるかを定義したテキストをテンプレートとして
登録するための機能

VNF Manager VNFの作成、変更、削除といったVNF自体の管理を行うため機能

続いて、2つ目のNFVOを行うためのタブの内容は図6のようになっています。

図6 NFVOで実行できる機能一覧

NFVOで実行できる各機能については以下をご覧ください。

種類 説明
VIM Management

Tackerで作成したVNFをどのVIMで管理させるかを決める機能

選択できるものとしては「OpenStack」と「Kubernetes」の2種類がある

※今回の手順ではKubernetesは含めていないため、そちらを選択する場合は別途インストールが必要

VNFFG Catalog VNF間の通信経路について、YAML形式のテキストに定義しテンプレートとして保存できる機能
VNFFG Manager VNFFG Catalogで作成したものを使用して、経路設定を適用、変更、削除といった管理ができる機能
NS Catalog 複数のVNF、そしてVNF間の経路を決めるVNFFGを一度に作成できるようYAML形式のテキストに
定義し、テンプレートとして保存できる機能
NS Manager NS Catalog保存したテンプレートを使用して、ネットワーク上に一度に展開、削除などを行える機能

Tackerを用いた使用例

先ほどまでで構築は完了しましたが、ここからはTackerを用いることで実現できることの一例をご紹介したいと思います。

1:サービスチェイニング利便性の向上

TackerではService Function Chain(SFC)関連のコマンドが用意されており、
それを用いることでサービスチェイニングが実現できます。

また、複数のサービスを運用する際、各ネットワーク機器の動きについてはTOSCAで定義しているため、
設定を変更する際にもすぐに対応できる点が利点といえます。

2:迅速なNW機器のライフサイクル管理が行える

OpenStackで構築したNW内で、ファイアウォールやDNSサーバ、QoSが必要になった際にTOSCAで定義したファイルを用いて
Tackerで実装することで、ハードウェアを新たに用意することなく、迅速に組み込むことが可能になります。

また、追加アプリを自前で用意することで、ライフサイクル管理自体を自動化できる可能性もあります。

おわりに

今回はVNFM、NFVOを実現するTackerをご紹介しました。
Tackerを用いることで、高価なネットワーク機器を個々に用意することなくNFVを実現することが出来ます。

本記事に関して何か問い合わせがございましたら、以下にご連絡ください。
よろしくお願いいたします。

本件に関するお問い合わせ

NTTテクノクロス
フューチャーネットワーク事業部

藤井 亮太

お問い合わせ

連載シリーズ
著者プロフィール
藤井 亮太