ソフトウェア定義型ネットワークの作成

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

いよいよ、OpenStackクラウド基盤の肝ともいうべきネットワークの設定を行います。OpenStack基盤でテナントが利用するネットワークは、一般的にソフトウェア定義型ネットワーク(Software Defined Network:通称SDN)と呼ばれます。SDNは、OpenStackクラウド基盤以外にも、最近欧米で話題沸騰のDocker(ドッカー)と呼ばれるコンテナ基盤でも利用されるソフトウェアの技術です。既存の標準的なx86サーバーやネットワークカード、ネットワークスイッチが導入された環境において、ソフトウェアを使ってネットワークセグメントや仮想的なルーターを構築します。物理的なネットワーク機材による静的なシステム構成に比べ、ホスティングなどのマルチテナントのIT基盤のように、ユーザーの利用環境が頻繁に変化するようなクラウド基盤において必須の技術となっています。

DockerにおけるSDNについては、姉妹書の「Docker実践ガイド」(インプレス社)に具体的な構築手順、使用法が掲載されています。

今回構成するネットワークを図1に示します。

テナントtenant0001で作成するソフトウェア定義型ネットワーク(SDN)の構成

図1: テナントtenant0001で作成するソフトウェア定義型ネットワーク(SDN)の構成

図1のとおり、ネットワークセグメントとして、インターネットにアクセスするためのパブリックネットワーク(public)、インスタンスに付与されるIPアドレスが所属するプライベートネットワーク(private)の二つのネットワークセグメントを作成します。また、今回は、構成を単純化するため、パブリックネットワークは、OpenStackクラウド基盤のコントローラーノード兼コンピュートノードが稼働する現在のホストが所属するLAN上と同一セグメント(172.16.0.0/16)に設定します。

以下では、OpenStack基盤においてマルチテナントで利用する典型的なソフトウェア定義型ネットワークの設定手順を述べます。引き続き、一般ユーザーkogaで作業しますが、一部、管理者ユーザーadminで作業する部分が含まれます。一般ユーザーkogaと管理者ユーザーadminでできる内容を区別して理解してください。

サブネットの作成

まず、一般ユーザーkogaでログインし、Horizonの管理画面の左側から、「ネットワーク」をクリックし、さらにプルダウンで表示される「ネットワーク」をクリックします。

ネットワーク作成前の画面

図2: ネットワーク作成前の画面

画面右上の「ネットワークの作成」をクリックします。今回、ネットワーク名は、「private」とします。

ネットワークprivate作成画面

図3: ネットワークprivate作成画面

次に、「サブネット」をクリックしサブネットを作成します。サブネット名は「private_subnet」、ネットワークアドレス「192.168.1.0/24」とし、「ゲートウェイ」に「192.168.1.1」を入力します。この「192.168.1.0/24」は、OpenStackクラウド基盤が稼働する物理NICやLANセグメントとは無関係に、テナントに付与されるプライベートLAN用のネットワークアドレスです。インスタンスには、このプライベートLAN用のネットワークのIPアドレスが付与されれば、同一テナント内のプライベートLAN内に所属する他のインスタンスと通信が可能です。また、外部にあるパブリックLANやインターネットにアクセスできるようにルーターを設定すると、プライベートLAN内のIPアドレスを持つインスタンスは、public LANやインターネットへのアクセスが可能となります。ゲートウェイのIPアドレスは、テナント内に作成する仮想ルーターへの接続に必要です。

ネットワークprivateのサブネットprivate_subnet作成画面

図4: ネットワークprivateのサブネットprivate_subnet作成画面

「サブネットの詳細」をクリックすると、サブネット「192.168.1.0/24」において、インスタンスへのIPアドレスの付与を自動的に行うDHCPの設定が可能です。今回は、「DHCP有効」の左側にあるチェックボックスにチェックを入れて、DHCPを有効にしておきます。また、DHCPでインスタンスに割り当てるIPアドレスの範囲を記述します。今回は、192.168.1.2から192.168.1.254までのIPアドレスの範囲で付与することにしますので、「IPアドレス割り当てプール」に「192.168.1.2,192.168.1.254」を入力します。インスタンスがインターネットにアクセスする際に名前解決に利用するDNSサーバーのIPアドレスを「DNSサーバー」の欄に入力しておきます。

ネットワークprivateのサブネットprivate_subnetの詳細_DHCP有効の場合

図5: ネットワークprivateのサブネットprivate_subnetの詳細_DHCP有効の場合

再度、「サブネット」をクリックし、ポップアップウィンドウの右下にある「作成」をクリックします。

ネットワークprivateのサブネットprivate_subnet作成直後の画面

図6: ネットワークprivateのサブネットprivate_subnet作成直後の画面

以上で、privateネットワークが作成できました。次に、ネットワークpublicを作成します。先ほどと同様に、「ネットワークの作成」をクリックします。ネットワーク名に「public」を入力し、サブネット名「public_subnet」、ネットワークアドレスは、「172.16.0.0/16」、ゲートウェイIPは、「172.16.1.1」、サブネットの詳細では、「DHCP有効」にチェックをいれ、IPアドレス割り当てプールは「172.16.1.2,172.16.1.254」とします。DNSサーバーは、パブリックLANに接続する際に利用しているDNSサーバーを指定します。

ネットワークpublic作成画面

図7: ネットワークpublic作成画面

ネットワークpublicのサブネットpublic_subnet作成画面

図8: ネットワークpublicのサブネットpublic_subnet作成画面

ネットワークpublicのサブネットpublic_subnetの詳細_DHCP有効

図9: ネットワークpublicのサブネットpublic_subnetの詳細_DHCP有効

ネットワークpublicのサブネットpublic_subnet作成直後の画面

図10: ネットワークpublicのサブネットpublic_subnet作成直後の画面

現時点では、private_subnetとpublic_subnetという2つのネットワークセグメントを作りましたが、この時点では、まだ仮想的なルーターも作成されておらず、public_subnetは外部への接続もできない状態です。この時点でのネットワークの構成を確認しておきます。OpenStackにおいては、ネットワークの接続構成は、視覚的に確認することができます。HorizonのGUI画面の左側の「ネットワーク」から「ネットワークトポロジ」をクリックします。

ネットワークトポロジの確認

図11: ネットワークトポロジの確認

図11のように、privateネットワークとpublicネットワークの両方とも円に雲が描かれた絵で描かれています。これは、両方とも、外部ネットワークとして設定されておらず、プライベートLANとして設定されていることを意味しています。すなわち、現時点では、インターネットやこのOpenStack基盤の所属するpublicネットワークへの接続ができません。外部ネットワークへの接続ができない閉じたネットワークが2つ作成されていることをこの絵から理解できるようにしてください。

public_subnetを外部ネットワークとして設定する

現時点では、private_subnetとpublic_subnetという名前の2つプライベートLANが存在しているだけで、このプライベートLANに所属するインスタンスは、インターネットやクラウド基盤外のシステムなど、外部への通信ができません。そこで、publicネットワークを外部と接続できるように設定します。public_subnetの外部接続の設定は、管理者権限で行う必要がありますので、一旦Horizonをログアウトし、adminユーザーでログインします。PackstackでインストールしたOpenStack環境の場合、adminユーザーのパスワードは、/root/keystonerc_adminファイル内の「OS_PASSWORD」に記載されていますので、確認してください。adminユーザーでログインしたら、HorizonのGUI画面の左側の「管理」→「システム」→「ネットワーク」をクリックします。すると、現在のプロジェクト(テナント)ごとに作成されているソフトウェア定義型ネットワークのサブネットの情報が表示されます。テナントtenant0001では、先ほど作成したpublic_subnetとprivate_subnetが表示されています。

adminユーザー権限で、tenant0001のネットワークを確認

図12: adminユーザー権限で、tenant0001のネットワークを確認

publicネットワークを外部ネットワークと通信できるようにするため、tenant0001のpublicネットワークの右側にある「ネットワークの編集」をクリックします。すると、「ネットワークの編集」の画面が表示されますので、ウィンドウ左下の「外部ネットワーク」の左側にあるチェックボックスにチェックを入れ、「変更の保存」をクリックします。

adminユーザー権限で、tenant0001のpublicネットワークを外部ネットワークに設定

図13: adminユーザー権限で、tenant0001のpublicネットワークを外部ネットワークに設定

tenant0001のネットワーク一覧で表示されているpublicネットワークの「外部」欄が「はい」になっていることを確認します。これにより、publicネットワークが外部公開用のLANとして設定されましたので、adminユーザーをログアウトします。

ルーターの作成とゲートウェイ設定

public_subnetとprivate_subnetを接続するため、仮想ルーターを作成します。再び、一般ユーザーkogaでHorizonにログインします。adminユーザーではないことに注意してください。ルーターの作成は、HorizonのGUI画面の左側の「ネットワーク」→「ルーター」をクリックします。さらに、画面右上にある「ルーターの作成」をクリックします。すると、「ルーターの作成」の画面が表示されますので、「ルーター名」を入力します。今回、ルーター名は、「router0001」しました。「外部ネットワーク」は、「public」を選択します。この外部ネットワークの設定は、プライベートIPアドレスを持つインスタンスが外部ネットワークと通信を行うためのゲートウェイの設定となります。

ルーターrouter0001の作成

図14: ルーターrouter0001の作成

● 注意 ●

ここで、「外部ネットワーク」の選択欄が表示されない場合は、publicネットワークの外部公開に関する設定ミスの可能性がありますので、再びadminユーザーでログインし、操作しているプロジェクト名(テナント名)があっているかどうかや、publicネットワークの外部公開設定を確認してください。

作成したルーターの「外部ネットワーク」欄に「public」が表示されていることを確認します。この「外部ネットワーク」が正しく設定されていないと、インスタンスは、外部のネットワークと通信できませんので注意してください。

ルーターrouter0001作成直後の様子

図15: ルーターrouter0001作成直後の様子

ルーターへのインターフェースの追加

次に、ルーターにprivateネットワークに接続するインターフェースを追加します。表示されている「router0001」をクリックします。すると、ルーターの概要が表示されます。

ルーターの概要

図16: ルーターの概要

ルーターの概要が表示されている画面の「概要」タブの右隣にある「インターフェース」タブをクリックします。現在の仮想ルーターに接続されているサブネットのインターフェースが表示されます。

ルーターのインターフェースの表示

図17: ルーターのインターフェースの表示

private_subnetのインターフェースをルーターに接続するため、画面右上の「インターフェースの追加」をクリックします。すると、「インターフェースの追加」の画面が表示されますので、サブネット欄に、privateネットワークのprivate_subnetを選択します。サブネットを選択したら、右下の「送信」をクリックします。

ルーターのインターフェースの追加

図18: ルーターのインターフェースの追加

● 注意 ●

インターフェースの追加画面において、サブネットが表示されない場合は、サブネットのゲートウェイのIPアドレスが適切に設定されていない可能性があります。ゲートウェイのIPアドレスは、HorizonのGUIの左側の「ネットワーク」→「ネットワーク」をたどり、ネットワーク名(privateやpublic)をクリックし、「サブネットの編集」をクリックすると再設定が可能です。

ルーターに外部ゲートウェイのpublic_subnetと内部インターフェースのprivate_subnetが接続されていることがわかります。

サブネットpublic_subnetとprivate_subnetがルーターに接続された様子を確認

図19: サブネットpublic_subnetとprivate_subnetがルーターに接続された様子を確認

この時点でのネットワークトポロジを確認しておきます。地球が描かれたアイコンが表示されているはずです。この地球が描かれたアイコンは、外部ネットワークと接続できるpublicネットワークです。地球が描かれたアイコンをクリックし、publicネットワークのステータスが「稼働中」になっていることを確認します。また、サブネットとして「172.16.0.0/16」が表示されることを確認します。

publicネットワークが稼働中であり、サブネット172.16.0.0(ネットマスクは16ビット)が付与されていることを確認

図20: publicネットワークが稼働中であり、サブネット172.16.0.0(ネットマスクは16ビット)が付与されていることを確認

また、雲が描かれたアイコンをクリックし、privateネットワークが稼働中であり、サブネットとして「192.168.1.0/24」が表示されることを確認します。

privateネットワークが稼働中であり、サブネット192.168.1.0(ネットマスクは24ビット)が付与されていることを確認

図21: privateネットワークが稼働中であり、サブネット192.168.1.0(ネットマスクは24ビット)が付与されていることを確認

最後に、輪に4つの矢印が描かれたアイコンをクリックし、ルーターrouter0001が稼働中であり、外部通信用のゲートウェイとインスタンス用のインターフェースが表示されていることを確認します。

router0001に外部通信用のゲートウェイとインスタンス用のインターフェースが接続されていることを確認

図22: router0001に外部通信用のゲートウェイとインスタンス用のインターフェースが接続されていることを確認

以上で、テナントtenant0001におけるSDNの構築は完了しました。プロジェクト(テナント)のユーザーは、作成したSDN上にインスタンス(アプリが稼働するマルチOS環境)を作成し、クラウド利用者は、外部ネットワークからインスタンスにアクセスすることになります。

セキュリティーグループの作成

クラウド基盤において、ユーザーは、割り当てられたインスタンス上でさまざまなアプリケーションを稼働させることが可能ですが、アプリケーションが利用する通信ポートをクラウド基盤上で制御することが可能です。この通信ポートを適切に設定することにより、インスタンスへのSSH接続やpingによる疎通確認の可否、Webサービスの提供可否などを細かく制御することが可能です。今回は、セキュリティーグループとして、インスタンスへのSSH接続、pingによるICMP通信、WebサービスであるHTTP通信を許可するセキュリティーグループを定義します。セキュリティーグループは、インスタンス起動時に指定する必要がありますので、この時点で作成しておいてください。まず、一般ユーザーkogaでHorizonのGUIにログインし、画面の左側から、「プロジェクト」→「コンピュート」→「アクセスとセキュリティー」をクリックします。OpenStack MitakaをPackstackでインストールした場合は、デフォルトで用意されたセキュリティーグループ「default」が表示されます。

アクセスとセキュリティーの表示

図23: アクセスとセキュリティーの表示

次に、画面上にある「セキュリティーグループの作成」をクリックします。「セキュリティーグループの作成」の画面が表示されますので、名前として「mysecurity01」と入力します。「説明」の入力は必須ではありませんが、セキュリティーグループで許可、または、拒否するプロトコルなどの説明文を記述しておくとよいでしょう。「セキュリティーグループの作成」をクリックします。

セキュリティーグループの作成

図24: セキュリティーグループの作成

セキュリティーグループmysecurity01の作成直後の様子

図25: セキュリティーグループmysecurity01の作成直後の様子

作成したmysecurity01の右側にある「ルールの管理」をクリックします。すると、現在設定されている標準のルールが表示されます。

ルールの管理の設定前の画面

図26: ルールの管理の設定前の画面

セキュリティーグループ「mysecurity01」に、インスタンスへのSSH接続、ICMP通信、HTTPサービスの接続のルールを追加するため、画面右上の「ルールの追加」をクリックします。すると、「ルールの追加」のウィンドウが表示されます。

「ルールの追加」のウィンドウ

図27: 「ルールの追加」のウィンドウ

セキュリティーグループ「mysecurity01」は、インスタンスへのSSH接続を許可するルールを追加しますので、ルールから「SSH」を選択します。実際には、接続相手などを詳細に指定可能ですが、今回は、接続相手に「CIDR」、「CIDR」に「0.0.0.0」が設定されていることを確認し、ウィンドウ右下の「追加」をクリックします。

SSHのルールを設定

図28: SSHのルールを設定

すると、「アクセスとセキュリティー」の設定画面において、「ポート範囲」に「22 (SSH)」と書かれたルールが追加されていることがわかります。

SSHのルール設定直後の様子

図29: SSHのルール設定直後の様子

次に、ICMP通信によるpingの応答を許可するルールを追加するため、再び、画面右上の「ルールの追加」をクリックします。ルールは、「ICMP ALL」を選択します。同様に、HTTP通信も追加してください。

SSH、ICMP、HTTPのルールが設定されたセキュリティーグループ

図30: SSH、ICMP、HTTPのルールが設定されたセキュリティーグループ

以上で、セキュリティーグループmysecurity01の設定が完了しました。

キーペアの作成

クライアントからユーザーがインスタンスのOS環境にSSHログインする際には、公開鍵暗号方式のキーペアが必要となります。公開鍵暗号方式における公開鍵は、novaのデータベースに登録され、秘密鍵は、拡張子が「.pem」で終わるファイル(通称「.pemファイル」)に保管します。ユーザーは、与えられた「.pemファイル」を使って、インスタンスにSSH接続を行うことができます。まず、HorizonのGUI画面の左側の「プロジェクト」→「コンピュート」→「アクセスとセキュリティー」をクリックし、「アクセスとセキュリティー」の画面にある「キーペア」タブをクリックします。

キーペアの一覧表示

図31: キーペアの一覧表示

画面上にある「キーペアの作成」をクリックします。「キーペアの作成」ウィンドウが表示されますので、キーペア名を入力します。今回、キーペア名は「key0001」としました。キーペア名を入力したら「キーペアの作成」をクリックします。すると、自動的に「key0001.pem」のダウンロードを促すウィンドウが表示されますので、ブラウザを起動しているクライアントに保存しておきます。以上で、キーペアの作成が完了しました。

キーペアの作成

図32: キーペアの作成

キーペアの保存

図33: キーペアの保存

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター 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メルマガ会員のサービス内容を見る

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