パブリックネットワークへの公開

2016年8月10日(水)
古賀 政純

今回、インスタンスには、192.168.1.0/24のプライベートLANに所属するIPアドレスが付与されますが、プライベートIPアドレスだけでは、クラウド基盤外にあるpublicネットワーク(172.16.0.0/16)に存在するクライアントからアクセスすることができません。そこで、OpenStackでは、インスタンスに対して、publicネットワークからアクセス可能なFloating IP(通称、浮動IP)を付与し、インスタンスに付与されたprivateネットワークのIPアドレスと関連付けます。これにより、クライアントは、インスタンスに付与されたpublicネットワークの浮動IPにアクセスすることで、インスタンスのサービスにアクセスすることができます。

Floating IPの確保

浮動IPを付与するには、一般ユーザーkogaでログインし、HorizonのGUI画面の左側の「プロジェクト」→「コンピュート」→「アクセスとセキュリティー」をクリックし、「アクセスとセキュリティー」の画面にある「Floating IP」タブをクリックします。現在は、浮動IPがまだ確保されていない状態です。

Floating IPの確保前

図1: Floating IPの確保前

インスタンスに割り当てるための浮動IPを確保します。画面右端の「Floating IPの確保」をクリックします。すると、テナントtenant0001で利用可能な浮動IPのプールとクォータに関する情報が表示されます。

テナントtenant0001で利用可能な浮動IPのプールとウォータの情報

図2: テナントtenant0001で利用可能な浮動IPのプールとウォータの情報

今回は、publicネットワークに存在するクライアントから、privateネットワークに所属するインスタンスにアクセスしますので、インスタンスに割り当てる浮動IPのプールは、「public」が選択可能となっています。さらに、tenant0001では浮動IPを40個まで用意しましたので、「プロジェクトのクォータ」欄には、「40 利用可能」と表示されています。そのうちの1つを確保しますので、ウィンドウ右下の「IPの確保」をクリックします。複数の浮動IPを確保したい場合は、再び「Floating IP」タブをクリックした画面で「Floating IPの確保」をクリックし、作業を繰り返します。クォータで設定した範囲内の個数で、浮動IPを複数個確保することができます。

インスタンスに付与される浮動IPを3つ確保した様子

図3: インスタンスに付与される浮動IPを3つ確保した様子

以上で、インスタンスに割り当てることができる浮動IPを確保しました。これでインスタンスを起動するための各種準備が整いました。次からは、いよいよインスタンスの起動です。

インスタンスの起動前のパラメーター入力

事前に登録したglanceイメージから、インスタンスを起動します。今回は、事前に登録しておいたglanceイメージの「Fedora 23」を例に説明します。一般ユーザーkogaでログインし、「プロジェクト」→「コンピュート」→「インスタンス」をクリックします。

インスタンスの画面

図4: インスタンスの画面

画面右側の「インスタンスの起動」をクリックします。すると、インスタンスに関する各種設定を行うウィンドウが表示されます。まず、起動するインスタンス名を「Instance Name」に入力します。今回は、「myvm01」としました。このインスタンス名は、起動したインスタンスのホスト名に設定されます。

インスタンスの起動前の各種設定画面においてインスタンス名「myvm01」を入力

図5: インスタンスの起動前の各種設定画面においてインスタンス名「myvm01」を入力

左側の「ソース」をクリックします。すると、右下の「利用可能」欄にglanceイメージの一覧が表示されます。

ソースの一覧表示。ここでの「ソース」とは、インスタンスの元となるOS環境のglanceイメージを意味する

図6: ソースの一覧表示。ここでの「ソース」とは、インスタンスの元となるOS環境のglanceイメージを意味する

今回は、事前に登録しておいたFedora 23のglanceイメージを指定しますので、「Fedora 23」の右側の「+」をクリックします。すると、「Fedora 23」のglanceイメージが「割り当て済み」の欄に移動します。

glanceイメージ「Fedora 23」をソースとして割り当て済みにした様子

図7: glanceイメージ「Fedora 23」をソースとして割り当て済みにした様子

画面左の「フレーバ」をクリックします。先ほどのglanceイメージのときと同様に、割り当てたいフレーバの右側にある「+」ボタンをクリックします。今回は、作成した「sales0001」フレーバを選択します。選択した「sales0001」フレーバが「割り当て済み」に移動したことを確認します。

フレーバの選択画面で、「sales0001」を割り当て済みにした様子

図8: フレーバの選択画面で、「sales0001」を割り当て済みにした様子

画面左の「ネットワーク」をクリックします。すると、インスタンスに割り当て可能なネットワークとして、privateネットワークとpublicネットワークが表示されます。これは、tenant0001で定義したSDNのネットワークセグメントです。

インスタンスに割り当てるネットワークの選択

図9: インスタンスに割り当てるネットワークの選択

インスタンスには、privateネットワークのIPアドレスを付与し、OpenStack基盤外のクライアントからは、publicネットワークの浮動IPアドレス経由でインスタンスにアクセスしますので、「private」の右端の「+」をクリックします。

インスタンスにprivateネットワークを割り当てる

図10: インスタンスにprivateネットワークを割り当てる

画面左の「ネットワークのポート」をクリックします。今回は、特に何も設定できる項目がありません。

ネットワークのポート

図11: ネットワークのポート

画面左の「セキュリティーグループ」をクリックします。作成したセキュリティーグループ「mysecurity01」が表示されているはずですので、右側の「+」をクリックし、割り当て済みに移動させます。

セキュリティーグループ「mysecurity01」を割り当てた様子

図12: セキュリティーグループ「mysecurity01」を割り当てた様子

画面左の「キーペア」をクリックします。作成したキーペア「key0001」が表示されているはずですので、右側の「+」をクリックし、割り当て済みに移動させます。

キーペア「key0001」を割り当てた様子

図13: キーペア「key0001」を割り当てた様子

画面左の「設定」をクリックします。インスタンス起動後にロードさせたいスクリプトなどを登録することができます。簡単なスクリプトを登録し、動作を確認しておくことをおすすめしますが、今回は何も登録しません。

インスタンス起動後のカスタムスクリプトの登録

図14: インスタンス起動後のカスタムスクリプトの登録

画面左の「メタデータ」をクリックします。インスタンス起動時にカーネルに引き渡すブートパラメーターなどをメタデータとして登録できます。もしなんらかのメタデータを入力した場合は、画面上の「カスタム」欄にメタデータ(ブートパラメーターを付与したい場合は、「kernel_extra_args」)を入力します。「+」を押すと選択済みの欄にメタデータが表示されますので、空欄にパラメーター(ブートパラメーター「no_timer_check」等)を入力することができます。今回は、Fedora 23のglanceイメージからインスタンスを起動しますが、ブートパラメーターなどを設定せずに、OSを起動しますので、特にメタデータは入力しません。すべての項目を入力したら、ウィンドウ右下の「インスタンスの起動」をクリックします。するとインスタンスが起動します。

メタデータの入力画面

図15: メタデータの入力画面

glanceイメージの登録でもメタデータを登録することができますが、同様の手順で、インスタンスの起動時にもブートパラメーターを付与することが可能です。2016年5月時点でCentOSのコミュニティが提供しているqcow2形式のイメージファイルをそのまま利用する場合、glanceイメージのメタデータ「kernel_extra_args」に「no_timer_check」を付与し、インスタンス起動時におけるメタデータの設定においても、パラメーター「kernel_extra_args」に「no_timer_check」を付与しなければならない場合があります。しかし、本書で解説したvirt-editを使ってブートパラメーターを編集したCentOS 6.xとCentOS 7.xのqcow2形式のイメージを使えば、メタデータによるブートパラメーターの管理を省くことができます。ただし、virt-editを使う場合は、オリジナルのqcow2形式のイメージファイルを改変することになりますので、SHA256やMD5等によるチェックサムを使ったイメージデータの改ざん有無の検知を行っている場合は、注意が必要です。メタデータを利用するか、qcow2イメージを改変するかは、判断が分かれるところですが、筆者の場合、改変したqcow2イメージは、glanceイメージとして登録する際に、改変に関する簡単な説明を付ける管理方法を採用しています。OSの起動の不具合を解消するためにメタデータを付与する管理方法は、イメージだけでなくインスタンスの起動に関する運用が煩雑になるため、極力避けるようにしています。

インスタンス起動前にブートパラメーターの「no_timer_check」を入力する例

図16: インスタンス起動前にブートパラメーターの「no_timer_check」を入力する例

起動したインスタンスに浮動IPを割り当てる

インスタンスが起動すると、Horizonのインスタンスの画面で、「タスク」欄が「起動中」になり「IPアドレス」欄にprivateネットワークのIPアドレスが自動的に付与されます。ステータスが「作成中」から「稼働中」に変化すると、インスタンスのOSがブートします。このprivateネットワークのIPアドレスに対して浮動IPを割り当てます。

インスタンスが起動した様子。privateネットワークのIPアドレスが自動的に割り当てられているが、浮動IPはまだ割り当てられていない状態

図17: インスタンスが起動した様子。privateネットワークのIPアドレスが自動的に割り当てられているが、浮動IPはまだ割り当てられていない状態

起動したインスタンス「myvm01」の右側のアクション欄にある「Floating IPの割り当て」をクリックしますが、時間が経過すると下図70のように「スナップショットの作成」のボタンに変わりますので、その場合は、右隣にある「▼」ボタンをクリックするとプルダウンメニューで「Floating IPの割り当て」をクリックできます。

「Floating IPの割り当て」をクリック

図18: 「Floating IPの割り当て」をクリック

Floating IPの割り当ての管理の画面において、「IPアドレス」の欄にある「▼」をクリックすると、確保した浮動IP一覧が表示されますので、インスタンスに割り当てたい浮動IPを選択します。浮動IPを選択したら、ウィンドウ右下の「割り当て」をクリックします。

インスタンスにアクセスするための浮動IPを選択

図19: インスタンスにアクセスするための浮動IPを選択

インスタンスに浮動IPアドレスが割り当てられると、インスタンスの画面において、IPアドレス欄にプライベートIPアドレスとともに「Floating IP:」が表示され、割り当てた浮動IPが表示されます。この浮動IPが外部から「Fedora 23」のインスタンスにアクセスする際に必要となるIPアドレスになります。

インスタンスに浮動IPが割り当てられた様子

図20: インスタンスに浮動IPが割り当てられた様子

インスタンスの状態をコンソールログで確認する

インスタンスに浮動IPが付与され、ステータス欄が「稼働中」になっていることを確認したら、実際にインスタンスにアクセスしてみます。「インスタンス名」の「myvm01」をクリックします。インスタンスの概要が表示されます。

インスタンスの概要を表示

図21: インスタンスの概要を表示

概要タブの右隣にある「ログ」タブをクリックします。このログは、myvm01のコンソール画面の出力をログとしてテキストで表示しますので、インスタンスのOSの起動の途中の様子などを確認することができます。コンソールログの最新の状況を表示するには、ブラウザの更新ボタンをクリックします。障害対応やメンテナンス上、ログファイルを参照する以外に、WebUIを使ってブートシーケンスの画面を簡易的に見たい場合もあります。その場合は、このコンソールログの画面を更新することで確認するとよいでしょう。図74の例では、OSの起動処理が無事に終了し、ログインプロンプトが出力されていることがわかります。(ログ中の最下行)

インスタンスのログを表示

図22: インスタンスのログを表示

インスタンスを利用する

インスタンスのOS環境が無事起動したようですので、リモートのクライアントからインスタンスにログインしてみましょう。インスタンスにログインするには、「.pemファイル」を利用します。まず、「.pemファイル」をダウンロードしたLinuxクライアント上で、「.pemファイル」のアクセス権限を確認します。以下、Linuxクライアント側のコマンドプロンプトを「$」で表します。インスタンスにアクセスするLinuxクライアントの一般ユーザーは、satoとします。ブラウザを使って保存しておいたkey0001.pemファイルは、Linuxクライアントの一般ユーザーsatoのホームディレクトリにコピーしておいてください。

$ whoami
sato
$ pwd
/home/sato
$ ls -l key0001.pem
-rw-r--r-- 1 sato sato 1683  5月  7 22:58 2016 key0001.pem

アクセス権限を600に変更します。

$ chmod 600 key0001.pem
$ ls -l key0001.pem
-rw------- 1 sato sato 1683  5月  7 22:58 2016 key0001.pem

key0001.pemファイルを使って、インスタンスにアクセスします。今回、インスタンスに付与されている浮動IPは、172.16.1.4です。また、Fedoraコミュニティが提供するFedora 23のqcow2イメージは、ユーザーfedoraでログインできますので、以下のように指定します。

$ ssh -i key0001.pem fedora@172.16.1.4
...
[fedora@myvm01 ~]$

コマンドプロンプトが、「[fedora@myvm01 ~]$」に変化し、インスタンスのFedora 23の環境にログインできました。ホスト名を確認します。

[fedora@myvm01 ~]$ hostname
myvm01.novalocal

IPアドレスを確認しておきます。

[fedora@myvm01 ~]$ ip -4 a |grep inet
    inet 127.0.0.1/8 scope host lo
    inet 192.168.1.3/24 brd 192.168.1.255 scope global dynamic eth0

publicネットワークに所属する外部のホストにICMP通信ができるかを確認します。

[fedora@myvm01 ~]$ ping 172.16.31.8 -c 2
PING 172.16.31.8 (172.16.31.8) 56(84) bytes of data.
64 bytes from 172.16.31.8: icmp_seq=1 ttl=63 time=2.27 ms
64 bytes from 172.16.31.8: icmp_seq=2 ttl=63 time=1.91 ms

--- 172.16.31.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1451ms
rtt min/avg/max/mdev = 1.914/2.096/2.279/0.188 ms
[fedora@myvm01 ~]$

以上で、インスタンスにログインし、一般ユーザーfedoraでOS環境を利用することができました。

CentOS 7.2やCentOS 6.7のqcow2形式のイメージファイルから起動したインスタンスの場合は、centosユーザーでログインします。

$ chmod 600 key0001.pem
$ ssh -i key0001.pem centos@172.16.1.4
[centos@myvm02 ~]$ whoami
centos

インスタンスをWebUIのコンソール経由で操作する

インスタンスmyvm01の「ログ」タブの右隣にある「コンソール」タブをクリックするとインスタンスのコンソールが表示され、ブラウザ経由でインスタンスのOS環境を操作することができます。Fedora 23のqcow2イメージは、先述の「.pemファイル」を使ったSSH接続により、リモートからfedoraアカウントでログインできますが、インスタンスのOS環境が提供するローカルのログインプロンプトから/etc/passwdファイルによるパスワード認証でログインを行うには、ユーザーを作成し、パスワードを付与する必要があります。リモートからfedoraユーザーでSSH接続できる状態であれば、インスタンス上で「sudo su -」を実行することにより、rootアカウントになることができますので、rootアカウントでパスワードを付与すれば、「.pemファイル」を使わずに、WebUIのコンソールに表示されたログインプロンプトやパスワード認証でのSSH接続でインスタンスにログインすることができます。ただし、「.pemファイル」を使わずに、パスワード認証によるSSH接続でログインする場合は、たとえば、セキュリティーが十分に確保されているプライベートクラウド基盤などの利用に限定するなど、インスタンスへのアクセス方法に関する情報セキュリティー管理基準を確立し、パスワード漏洩を防ぐ対策を行ってください。

インスタンスのコンソール画面

図23: インスタンスのコンソール画面

WebUIのコンソール画面を開いても、キーボードから文字が入力できない場合は、マウス操作でWebブラウザを横に広げ、コンソール画面の両脇に表示される灰色の個所をマウスでポイントすると、コンソールでキー入力が可能になります。

インスタンスに構築したWebサーバーをテストする

Fedora 23のインスタンスが起動できましたので、非常に簡単な例として、OpenStackクラウド基盤上のインスタンスでWebサーバーを起動し、サービスを外部に公開してみましょう。まずは、Fedora 23のインスタンスmyvm01上でrootアカウントになります。以下、Fedora 23のインスタンスmyvm01のfedoraユーザーのプロンプトを「[fedora@myvm01 ~]$」、また、インスタンスmyvm01のrootユーザーのプロンプトを「[root@myvm01 ~]#」で表します。

[fedora@myvm01 ~]$ sudo su -

DNSサーバーの設定(/etc/resolv.confファイル等)を確認します。DNSが正しく設定されていない場合、インスタンスからインターネットへのアクセスができませんので、正しいアドレスを設定してください。

[root@myvm01 ~]# cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search openstacklocal
nameserver 8.8.8.8

プロキシサーバー経由でインターネットにアクセスする場合は、環境変数http_proxyとhttps_proxyにプロキシサーバーを設定しておきます。

[root@myvm01 ~]# export http_proxy=http://proxy.yoursite.com::8080
[root@myvm01 ~]# export https_proxy=http://proxy.yoursite.com::8080

Fedoraにおけるパッケージの管理は、yumの次世代コマンドであるdnfを使いますので、設定ファイルも/etc/dnf/dnf.confファイルを編集します。

[root@myvm01 ~]# vi /etc/dnf/dnf.conf
...
proxy=http://proxy.yoursite.com:8080

#

Webサーバーを実現するhttpdパッケージをインストールします。Fedoraコミュニティが配布しているhttpdパッケージがprivateネットワークで稼働するインスタンスmyvm01上にダウンロードされ、インストールされます。

[root@myvm01 ~]# dnf install -y httpd

Webコンテンツtest.htmlを配置し、Webサービスを起動します。

[root@myvm01 ~]# echo "Hello OpenStack !" > /var/www/html/test.html
[root@myvm01 ~]# systemctl start httpd
[root@myvm01 ~]# systemctl status httpd
[root@myvm01 ~]# systemctl enable httpd

publicネットワーク(172.16.0.0/16)上にある別のクライアント端末を開き、myvm01のWebコンテンツが表示されるかを確認します。publicネットワークから、myvm01の浮動IPにアクセスすることに注意してください。

$ curl http://172.16.1.4/test.html
Hello OpenStack !

以上で、OpenStack基盤にインスタンスを起動し、Webサービスをクライアントに提供できるようになりました。GUIによるプロジェクトの作成、glanceイメージの管理、SDNの作成、インスタンスの起動、「.pem」ファイルを使ったログインは、OpenStackクラウド基盤の運用管理の基本となります。OpenStackでは、さまざまなSDNを構成することができますが、まずは、簡単なSDNを構成し、外部からインスタンスにアクセスでき、かつ、インスタンスから外部へのアクセスもできるかどうかをテストするとよいでしょう。また、プロジェクト(テナント)とユーザーを複数作成し、プロジェクト間でコンテンツを共有したり、非共有にしたりするなどのアクセス制限の実験を行うと、OpenStackクラウド基盤の理解がよりいっそう深まりますので、ぜひ、マルチテナント構成もテストしてみてください。

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています