Tech Sketch Bucket of Technical Chips by TIS Inc.

SoftLayer BareMetal上でOpenStack Icehouseを動作させる

Pocket

2014年SoftLayer Advent Calendar 1枚目の21日目です。

SoftLayerの特徴のひとつとして、broadcastやmulticastが通り、IP aliasも利用できる「普通」のネットワークを持ったベアメタルサーバを利用できる点が上げられます。
今回はその特徴を最大限に活用し、SoftLayer上にOpenStack Icehouseをインストールします。

softlayer-logo openstack-logo

今回構築するOpenStack on SoftLayerの全体像

softlayer_openstack_pic01

構築要件

今回のOpenStack on SoftLayerは、構築者が個人で検証活動に利用することを前提に、以下の要件を満たすようにインフラを構成します。

  • OpenStackの各種コンポーネントは、同一ベアメタルサーバ上に、できる限り簡単にインストールできるようにする
  • インターネットにはOpenStackのAPIやGUIを公開しない
  • OpenStack内に立ち上げたVMに与えるFloating IPは、別サーバのIP Addressと重複しないように制御する

構築方針

そのため今回は、以下の方針でOpenStackを構築します。

  1. OpenStackのインストールには、RDOが提供するpackstackを利用する
  2. OpenStackはSoftLayerのPublic SubnetではなくPrivate Subnet側にバインドする
    • OpenStackのAPIやGUIは、SoftLayerのPrivate SubnetへVPN接続するか、インターネットからOpenStackサーバーへSSHログインしてから利用する
  3. OpenStackへFloating IPを与える外部接続Subnetとして、SoftLayerから追加取得した Private Portable Subnet を利用する

SoftLayerでサーバーを立ち上げると、SoftLayerから Public Primary SubnetPrivate Primary Subnet が与えられます。これらのPrimary Subnet内に追加でサーバを立ち上げた際、どのIP Addressがサーバに割り当てられるかを利用者側から制御することができません。

そのためSoftLayerから追加で Private Portable Subnet を取得し、そのSubnetをOpenStackへFloating IPを与える外部接続Subnetとして利用することにします。

ベアメタルサーバ立ち上げ

残念ながら東京DCはまだオープンしていないので(12/22追記:東京DCは12/22にオープンしました)、今回はSan Jose DCに以下のベアメタルサーバを立ち上げます。

DataCenterSan Jose 1
CPU3.5GHz Intel Xeon-IvyBridge x 1
RAM2x4GB Kingston 4GB DDR3 1Rx8
HDD1TB SATA x 2
Public NIC100Mbps uplink
Private NIC100Mbps uplink
Host Nameopenstack01
Domain Nametech-sketch.jp
OSCentOS6.5-64bit

今回与えられたネットワークは以下のようになりました。

Public Primary SubnetAAA.BBB.CCC.xxx/29
Public Primary IP AddressAAA.BBB.CCC.DDD
Private Primary Subnet10.90.138.64/26
Private Primary Gateway Address10.90.138.65
Private Primary IP Address10.90.138.103

また追加でPrivate Portable Subnetを取得すると、以下のネットワークが与えられました。

Private Portable Subnet10.88.166.64/26
Private Portable Gateway Address10.88.166.65

Private SubnetへのVPN接続とIPMIコンソール取得

今回はネットワーク設定にも手を入れますので、一つ設定を間違えるとせっかく構築したサーバにログインできなくなります。そこでPrivate SubnetへVPN接続を行い、IPMIコンソールが取得できることを確認します。

1) PPTPでSoftLayerにVPN接続(各OSでの接続手順は、下記ページを参照)

OS PPTP接続手順
Windows 7 http://knowledgelayer.softlayer.com/procedure/set-pptp-vpn-windows-7
Windows Vista http://knowledgelayer.softlayer.com/procedure/set-pptp-vpn-windows-vista
OSX http://knowledgelayer.softlayer.com/procedure/set-pptp-vpn-mac-os-x-10x
Fedora http://knowledgelayer.softlayer.com/procedure/setting-pptp-fedora-5
Ubuntu http://knowledgelayer.softlayer.com/procedure/set-pptp-vpn-ubuntu

2) VPN接続した後、Private IPへSSH接続できることを確認

3) IPMIコンソールの取得確認

SoftLayer Customer Portal >
 Devices > Device List > BareMetalServer(今回はopenstack01.tech-sketch.jp)>
  Action > KVM Console >
   SuperMicro IPMI ToolにIPMIのrootパスワードでログイン >
   Remote Console > Console Redirection > Launch Console >
    ダウンロードしたlaunch.jnlpを起動 > Java iKVM ViewerにてOSのrootパスワードでログイン

※ IPMIのrootパスワードとOSのrootパスワードは異なることに注意

残念ながら、MacBook Air Mid2011 OS X Lion 10.7.5 からはJavaプラグインの問題でIPMIコンソールが取れませんでした。
Windows7 ProfessionalやWindows 8.1 Proからは、IPMIコンソールが取れることを確認しています。

構築前準備

不要なINPUTパケットをREJECT

立ち上がったベアメタルサーバではiptablesが起動していますが、全てのパケットをACCEPTしています。

そのため必要最低限のパケットのみ受け付けるように、iptablesにルールを追加します。

  1. Private Subnet(10.0.0.0/8)のパケットはACCEPT
  2. loopbackはACCEPT
  3. ICMPはACCEPT
  4. 22/TCP(SSH)の新規接続はACCEPT
  5. 確立済みの接続に関連するパケットはACCEPT
  6. それ以外はREJECT

SSHのパスワード認証の禁止

タイムゾーンの変更

VNC接続用ユーザー作成

GUI環境のインストールと接続確認

1) X関連とVNCモジュールのインストール

2) 日本語フォントとfirefoxのインストール

3) VNCへの接続確認

user01でSSHトンネル作成後、vnc://localhost:5901に向けてVNCでログインできることを確認してください。
(Private SubnetへVPN接続が確立しているならば、vnc://10.90.138.103:5901でログインすることもできます。)

OpenStackインストール

SELinuxが無効であることを確認

SoftLayerのベアメタルサーバは最初からSELinuxが無効になっていますが、念のため確認しておきます。

DNS設定

/etc/resolv.confにnameserverが設定されていない場合もあるため、GoogleのDNSを利用するように設定します。

カーネルパラメータ設定

OpenStack用に作成するネットワークブリッジ上でもiptablesによるフィルタリングやNATを有効にするために、カーネルパラメータを変更します。

OpenStackインストーラ(packstack)の取得

RDOのリポジトリから、OpenStackをインストールするpackstackを取得します。

OpenStack最新版のJunoをインストールするpackstackは、RHEL7かCentOS7、あるいはFedora20以降でしか動作しません(RDO QuickStart : Requirement)。そこで今回は、一つ前のIcehouseをインストールするpackstackを取得します。

インストールオプションの変更

packstackの --allinone オプションを用いれば簡単にAllinOneでOpenStackをインストールできますが、今回はバインドするIP AddressをPrivate Primary Subnet側に変更する必要があるため、Answer Fileを作成してインストールオプションを変更します。ついでにpackstackのデフォルト設定ではインストールされない、OpenStack Heatに関連するサービスもインストールするように変更します。

1) インストール設定ファイル(Answer File)を生成

2) インストールオプションの変更

以下のようにAnswer Fileを修正します。

  1. OpenStackをバインドするIP AddressをPublic IP AddressからPrivat IP Addressに変更する
  2. NICTのNTPサーバを設定する
  3. HEAT関連サービスをインストールする
  4. デモ環境をインストールしない

OpenStackコンポーネントのインストール

修正したAnswer Fileを用いて、OpenStackの各種コンポーネントをインストールします。IO速度とサーバスペックにもよりますが、15分〜20分ぐらいかかるので気長に待ちましょう。

OpenStackのインストールに成功すれば、**** Installation completed successfully ****** というメッセージが表示されるはずです。

インストールされたコンポーネントの確認

OpenStackのAPIを用いてインストールされたコンポーネントを確認しましょう。Nova、Neutron、Glance、Cinder、Swift、Keystone、Horizonといった基本サービス、及び今回追加したHeat関連サービスがActiveになっているはずです。

ネットワークの設定変更

ブリッジの作成

packstackが自動的にbr-ex, br-int, br-tunというOVSBridgeを作成しています。

これらのOVSBridgeとPrivate Subnet側のNIC(eth0)をブリッジし、Private Portable SubnetのIP Addressをブリッジにエイリアスで付与することで、OpenStack上のインスタンスが外部ネットワークと通信できるようにします。

※eth0を上げ落としするため、VPN接続ではなくインターネット側からSSHしてください

1) ifcfg-eth0のバックアップ

2) ifcfg-eth0を元にifcfg-br-exを作成

3) ifcfg-eth0を修正

4) eth0のstatic routeをbr-exに変更

5) Private Portable SubnetのIP Addressをbr-exのエイリアスとして設定

6) networkの再起動

networkを再起動すると、以下のようなroute tableを持ったinterfaceが構成されます。

  • Private Primary Subnet(10.90.138.64/26)とPrivate Portable Subnet(10.88.166.64/28)は共にbr-exを用いる
  • SoftLayerのPrivate Subnet宛のパケット(10.0.0.0/8)はPrivate Primary SubnetのGateway(10.90.138.65)にルーティングされる

7) 疎通確認

同一VLAN内の別サーバからの疎通確認。このサーバはPrivate Primary Subnetに所属しているため、Private Primary IP Address宛には直接、Private Portable IP Address宛にはgateway経由で通信できます。

別DCの異なるVLAN内のサーバから疎通確認。SoftLayerの内部ネットワークを経由して、Private Primary IP AddressにもPrivate Portable IP Addressにも到達可能となっています。

softlayer_openstack_pic02

外部接続Subnetのgatewayルールをiptablesに設定

SoftLayerから与えられたPrivate Subnetのgatewayは、インターネットへルーティングする経路を持っていません。そのためOpenStack上に作成したVMがインターネットに出られるように、Private Portable Subnetのパケットをeth1へ転送してNATするルールをiptablesに追加します。

また念のため、Private IPのパケットをそのままインターネットへ流さないようにDROPするルールも追加します。

OpenStackでVMを作成する

Horizonに管理者としてログイン

  1. VPN接続したPCやVNCでログインしたサーバ上でブラウザを起動し、 http://10.90.138.103 へアクセスしてOpenStack Horizonのログイン画面を表示します。
  2. adminでログインします(パスワードはkeystonerc_adminを確認してください)。

外部接続Subnetの作成

Private Portable SubnetをOpenStack内のVMが外部に接続するためのネットワークとして設定します。以下のポイントに注意してください。

  • gatewayはSoftLayerから与えられたgatawayではなく、eth1へのNATルールが追加されているOpenStackサーバ自身のbr-ex:0に割り当てたPrivate Portable IP Addressを指定する
  • ただしこのままだとPrivate Network側の通信ができなくなるため、10.0.0.0/8はPrivate Portable Subnetのgatewayへルーティングするように静的routeを追加する

[プロジェクト] > [ネットワーク] > [ネットワーク] > [+ネットワークの作成]

設定項目 備考
ネットワーク名 public
管理状態 チェック付きのまま
サブネット名 public_subnet
ネットワークアドレス 10.88.166.64/28 Private Portable Subnet
ゲートウェイIP 10.88.166.66 br-ex:0に割り当てたPrivate Portable IP Address
ゲートウェイなし チェックをしない
DHCP有効 チェック付きのまま
IPアドレス割り当てプール 10.88.166.67,10.88.166.78 Private Portable Subnetの空きIP Addressレンジ
DNSサーバ 8.8.8.8 とりあえずGoogleのDNSサーバを利用
追加のルート設定 10.0.0.0/8,10.88.166.65 10.0.0.0/8は10.88.166.65へルーティング

[管理] > [ネットワーク] > [(publicの)ネットワークの編集]

設定項目
名前 public
管理状態 チェック付きのまま
共有 チェクを付ける
外部ネットワーク チェックを付ける

テスト用プロジェクトの作成

[管理] > [認証パネル] > [プロジェクト] > [+プロジェクトの作成]

設定項目
名前 test_pj
  • 今回はクォータは設定しない

テスト用ユーザーの作成

[管理] > [認証パネル] > [ユーザー] > [+ユーザーの作成]

設定項目 備考
ユーザー名 test01
パスワード 適当なパスワードを設定する
主プロジェクト test_pj
ロール member

テスト用ユーザでログイン

Horizonのログイン画面から、test01でログインする

キーペアの作成

[プロジェクト] > [コンピュート] > [アクセスとセキュリティ] > [キーペア] > [+キーペアの作成]

test_keyという名前でキーペアを作成し、ダウンロードします。

マシンイメージの登録

公開されているFedoraイメージをOpenStackに登録します。

[プロジェクト] > [コンピュート] > [イメージ] > [+イメージの作成]

設定項目
名前 fedora-20.x86_64
イメージの場所 http://cloud.fedoraproject.org/fedora-20.x86_64.qcow2
形式 QCOW2 - QEMUエミュレーター

内部Subnetの作成

OpenStack上にtest_pj用の内部Subnetを作成します。

[プロジェクト] > [ネットワーク] > [ネットワーク] > [+ネットワークの作成]

設定項目 備考
ネットワーク名 internal
管理状態 チェック付きのまま
サブネットの作成 チェック付きのまま
サブネット名 internal_subnet
ネットワークアドレス 192.168.0.0/24 PrimaryやPortable Subnetとは異なるNetwork Address
IPバージョン IPv4
ゲートウェイIP (空欄)
ゲートウェイ無し チェック無しのまま
DHCP有効 チェック付きのまま
IPアドレス割り当てプール (空欄)
DNSサーバー 8.8.8.8 とりあえずGoogleのDNSサーバを利用
追加のルート設定 (空欄)

ルーターの作成とネットワークへ接続

外部接続Subnetと内部Subnetを接続するルーターを作成します。

[プロジェクト] > [ネットワーク] > [ルーター] > [+ルーターの作成]

設定項目
ルーター名 ext_router

[プロジェクト] > [ネットワーク] > [ルーター] > [(ext_routerの)ゲートウェイの設定]

設定項目
外部ネットワーク public

[プロジェクト] > [ネットワーク] > [ルーター] > [ext_router] > [+インターフェースの追加]

設定項目
サブネット internal: 192.168.0.0/24 (internal_subnet)
IPアドレス (空欄)

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

[プロジェクト] > [コンピュート] > [アクセスとセキュリティ] > [セキュリティグループ] > [+セキュリティグループの追加]

設定項目 備考
名前 test_sg
説明 test sg セキュリティグループだけは何故か説明が入力必須

[プロジェクト] > [コンピュート] > [アクセスとセキュリティ] > [セキュリティグループ] > [(test-sgの)ルールの管理] > [+ルールの追加]

設定項目
ルール ALL ICMP
方向 受信
接続相手 CIDR
CIDR 0.0.0.0/0
設定項目
ルール SSH
接続相手 CIDR
CIDR 0.0.0.0/0

インスタンス作成

[プロジェクト] > [コンピュート] > [インスタンス] > [+インスタンスの起動]

設定項目 備考
アベイラビリティゾーン nova
インスタンス名 test_A
フレーバー m1.small m1.tinyだとディスク容量が足りない
インスタンス数 1
インスタンスのブートソース イメージから起動
イメージ名 fedora-20.x86_64
キーペア test-key
セキュリティグループ(default) チェックをはずす
セキュリティグループ(test-sg) チェックを付ける
選択済みネットワーク internal 利用可能なネットワークからドラッグ&ドロップ

Floating IP割り当て

Private Portable Subnet内のIP Addressを確保します。

[プロジェクト] > [コンピュート] > [アクセスとセキュリティ] > [Floating IP] > [Floating IPの確保]

設定項目
プール public

今回は10.88.166.68が確保されました。この確保したFloating IPを、先ほど起動したインスタンス(test_A)に割り当てます。

[プロジェクト] > [コンピュート] > [アクセスとセキュリティ] > [Floating IP] > [(10.88.166.68の)割り当て]

設定項目
IPアドレス 10.88.168.68
IPを割り当てるポート test_A: 192.168.0.2

OpenStack内のインスタンスの接続確認

ここまでの手順で、OpenStack上にVMが立ち上がりました。接続確認をしましょう。無事に通信できているでしょうか。

インターネットとの通信

eth1へのNATルールが追加されているOpenStackサーバ自身をgatewayにしたことで、インターネット上のサーバとの通信は問題なく通っています。

SoftLayer内部との通信

外部接続ネットワークにて10.0.0.0/8に静的routeを追加したことで、SoftLayerのPrivate VLAN内部での通信も問題なく通りました(別VLANとも通信できるように、VLAN SpanningはONにしています)。

OpenStack上のVM ⇔ 同一VLAN内のサーバ

OpenStack上のVM ⇔ 別VLAN内のサーバ

softlayer_openstack_pic03

最後に

今回はSoftLayerのベアメタルサーバとPrivate Portable Subnetを活用し、SoftLayer上にOpenStack Icehouseをインストールしました。手元にLinuxマシンが無いけれどOpenStackを試してみたいという方は、ぜひ一度チャレンジしてみてください。

エンジニア採用中!私たちと一緒に働いてみませんか?