ネットワークの仮想化とTacker
VNFM、NFVOを実現するOSSであるTackerの説明から社内プロキシ下の環境での構築までをご紹介します
はじめに
こんにちは。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.おわりに
前提知識について
今回ご紹介するTackerはOpenStackのコンポーネントの1つです。
まず、OpenStackは以下のクラウドを構築、運用することができるOSSになります。
種類 | 説明 |
パブリッククラウド | 一般ユーザや企業など、外部の不特定多数の人で環境を共有して使用できるサービスを指す |
プライベートクラウド | 特定のユーザや企業内で占有して使用することが出来るクラウド環境を指す |
ハイブリッドクラウド | 上記2つを組み合わせたもの |
OpenStackは複数のコンポーネントで構成されており、組み込めるコンポーネントは図1のようになっています。
図1 OpenStackを構成するコンポーネント一覧
引用:https://www.openstack.org/software/
続いてTackerですが、図1に「NFV」と記載がある点にお気づきでしょうか。
図1にあるように、TackerはOpenStackの拡張コンポーネントであり、OpenStackを活用してVNF(Virtual Network Function)の管理や
複数のVNFから構成されるネットワークサービスの管理を実現しているものになります。
NFVやVNFについては以下をご確認ください。
種類 | 説明 |
NFV |
ルータやファイアウォール、ロードバランサーなどのネットワーク機器を汎用サーバの |
VNF | NFV環境の上で動くルータやファイアウォール、ロードバランサーなどのネットワーク機器を ソフトウェア(仮想マシン)として実装したもの |
ちなみに、「はじめに」にて「TackerとはVNFM、NFVOを実現するOSS」と述べましたが、
そもそもこれらはどのようなものなのでしょうか。
以下をご覧ください。
種類 | 説明 |
VNFM | VNFの作成、変更、削除、起動や停止といった複数のVMの管理を行う機能を指す |
NFVO |
ネットワーク機能を仮想基盤上で実現するアーキテクチャを指すNFVの自動化をしているもの |
Tackerが提供しているVNFM、NFVOを使用することで、ルータ等のハードウェアを個々で揃え個別に設定するよりも、
仮想上でソフトウェアとして実装されたものを使用する方がコストを抑えられる可能性があるとともに、VNFMで一括管理、
再設定が出来るため、運用がやりやすいことがメリットだと言えます。
また、OpenStackは構築のためのコストがAWSやAzureと比べて高いものの、クローズド環境で用途によって構成や設定を
自由に組み替え構築ができることや、商用サービスとして展開することもできるため、柔軟な使い方ができることも
メリットだと言えます。
Tackerのアーキテクチャは図2のようになっています。
GUIでの管理ができるHorizon、もしくはCLI経由でTackerのAPIを経由してVNFの作成などを行っています。
図2 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/ ※上記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の構築が完了後、下記アドレスでOpenStackのGUIでの管理画面にアクセスできます。
http://[ホストマシンのIPアドレス]/dashboard
アクセスすると、図3の画面が表示されるためユーザ名は「admin」、パスワードは「devstack」を
入力することでログインできます。
図3 OpenStackのログイン画面
ログイン後は図4のような画面に遷移します。
図4 OpenStackの管理画面
図4はOpenstackの管理画面になります。
今回の構築ではTackerを含めているため、画面左側のタブの一番下に「NFV」が表示されています。
VNFの作成や管理を行う際はNFVタブから行います。
NFVタブ内には、VNFM、NFVOを行うためのタブがそれぞれ用意されているため、行いたい操作に応じて各タブを選択することで実施ができます。
1つ目のVNFMを行うためのタブの内容は図5のようになっています。
図5 VNFMで実行できる機能一覧
VNFMで実行できる各機能については以下をご覧ください。
種類 | 説明 |
VNF Catalog |
TOSCA(Topology and Orchestration Specification for Cloud Applications)と呼ばれるYAML形式で記載された |
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を実現することが出来ます。
本記事に関して何か問い合わせがございましたら、以下にご連絡ください。
よろしくお願いいたします。