【OpenStack】 Icehouse 導入編 #2

風邪の方がちらほら見られるようになってきましたが、私もそのうちの一人です。
健康にはお気を付け下さい。

前回はOpenStackのダッシュボードへのアクセス確認まで行いました。
今回はOpenStackにサーバが接続するネットワークを作成します。

※もしインストーラにてネットワークのサンプルが作られている場合はあらかじめ
  削除して進めてください。


まずはadminユーザでログインを行い作業します。

■adminプロジェクト(テナント)での作業
外部ネットワーク(通常のLAN)と接続するネットワークを作成します。

 管理 → システムパネル → ネットワーク
 名前        public_net
 プロジェクト    admin
 管理状態      チェック
 共有        チェック
 外部ネットワーク チェック

外部ネットワークにチェックを入れることで外のLANとつながります。
共有にチェックを入れておかないとadminユーザ以外は使用できないので注意です。

先ほど作った外部ネットワークにサブネット(IPアドレスのサブネットアドレス)を作成し割り当てます。

 publicのリンクをクリック → サブネットの作成をクリック
 サブネット名         public_subnet
 ネットワークアドレス     br-exで利用しているネットワークアドレス
 ゲートウェイIP        外部のアドレスで使っているGWのIPアドレス
 DHCP有効          チェック
 IPアドレス割り当てプール 仮想サーバに割り当てる外部IPプール
                floating IPといいます

 サブネットのアドレスは例えばクラスCであれば192.168.5.0/24のようなアドレスです。


ここまで設定したらダッシュボードから一旦adminユーザをログアウトして、
ユーザdemoでログインをして作業を行います。

■demoプロジェクト(テナント)での作業
ここからはダッシュボードからdemoユーザで接続します。
デモユーザのサーバがつながるネットワークを作成します。
ネットワークはテナント毎に分かれており、このネットワークはdemoユーザのみしか
閲覧、使用は出来ません。

 プロジェクト→ネットワーク → ネットワークからネットワーク作成
 名前          demo_private
 管理状態       チェック
 サブネット名      demo_private_subnet
 ネットワークアドレス 任意のプライベートIPアドレスの範囲
 ゲートウェイIP     192.168.111.1 (ルーターのIPアドレス)
 DHCP有効      チェック

ネットワークが出来たらpublic_netとdemo_private_subnetを接続するためにルーターを作成して、各々のネットワークに接続します。

 プロジェクト → ネットワーク → ルーターのdemo_privateから
 ルーターの作成を実施
  名前:demo_router

 ルータを外部ネットワークに接続
 作成されたルータの右上よりゲートウェイの設定ボタンを押し、
 ルーターのゲートウェイを設定します。
 外部ネットワークで「public_net」を選び「ゲートウェイの設定」ボタンを押します。

 ルータを内部ネットワークに接続
 ルーターの名称のリンクをクリックし、ルーターの詳細画面を表示します。
 「インターフェースの追加」 ボタンを押し、サブネットからdemo_private_subnetを
 選択し「インターフェースの追加」ボタンにて接続を行います。

これで想定するネットワークが構築できたと思います。

ネットワークは以下から確認可能です。
 プロジェクト → ネットワーク → ネットワークトポロジ

次回はOpenStack上に仮想サーバを構築するところまで進めます。

【OpenStack】 Junoリリース!!

先日OpenStack の新バージョンJunoがリリースされました。

機能はあまり大きく変わっていないようなのでIcehouse R2のような感じですが
以下の点が変わったようです。

・Saharaの追加
  Hadoopの機能追加
・Swiftのバージョンアップ
  Swiftが2.0になりました
・Neutron IPv6サポート改善
  IPv6環境のサポート改善がされた模様です。
・ネットワーク機能仮想化(NFV)
  ネットワーク仮想化NFVがサポートされました

変更が少なくなってきたので熟成してきたという事でしょうか?
NFVのサポートは大きなポイントだと思います。


また、10月18日(土)にオープンソースカンファレンスが行われました。
参加の予定を考えていたのですが情報処理試験の前とのこともあって
参加は見送りましたが、Ustreamから自宅で閲覧致しました。

Junoについても少し触れていましたね。
OpenStackの検証は大変ですがまた実施をしてみたいと思います。

【OpenStack】 Icehouse 導入編 #1

みなさまいかがお過ごしでしょうか。

まつぼっくりは先日休み中に旅行に出かけておりまして、今回台風が来る前に帰れましたが、皆様ご無事でしたでしょうか?

OpenStackのSDKのPythonプログラミングを目指しておりますが、
OpenStackの構築環境が無い方のために導入方法についてご紹介したいと思います。
※OpenStackは2014年冬にリリース予定のJunoがありますが、今回は現時点で最新のIcehouseでの導入手順となります。


■OpenStackの登場人物
OpenStackで出てくる主要な役割について以下にまとめました。

Keystone:認証やエンドポイント(サービスにアクセスするURL など)を提供します。
Nova :仮想サーバを立てるためのサーバです。VMwareESXiなどに当たります
Glance :テンプレートイメージを提供します。保存先にはSwiftなどを使用します。
Cinder  :ブロックストレージの役割となります。iSCSIなどの接続を提供し、
PCのHDDのように使用するために使います。
Swift :オブジェクトストレージの役割をします。
オブジェクトストレージとはWEBにアップロードするようにAPIを使っての
アップロード方法にてデータを格納します。
Neutron :ネットワーク系を担当します。
Horizon :WEBでの管理インターフェースを管理者、エンドユーザへ提供します。
Ceilometer:利用状況の情報を提供します。
Heat :設定自動化(オーケストレータ)の機能になります。


■OS導入(CentOS 6.5)
CentOS 6.5のインストーラをDVDメディアなどで起動します。

インストーラ起動後言語設定があります。
Japanese(日本語)」を選択します。

キーボード選択画面が表示されます。
日本語」を選択します。

ストレージ選択画面が表示されます。
基本ストレージデバイス」を選択します。

※未フォーマットディスクが認識された場合。
はい。含まれていません。・・・」を選択して進めます。

ホスト名の入力画面が表示されます。
任意のホスト名を入力します。

同じ画面にて「ネットワークの設定ボタン」をクリックしてNICの設定をします。
※今回の環境はeth0のみ使用するため、eth0のみに「自動接続するにチェック」をいれてあります。

eth0の「IPv4のセッティング」を開きます。
方式を「手動」にしてIPアドレス情報を入力します。

タイムゾーン選択画面が表示されます。
アジア/東京」を選択します。

システムクロックでUTCを使用のチェックを外しておきました。

ルートの任意のパスワードを設定します。

どのタイプのインストールをしますか?と表示されます。
すべての領域を使用する」を選択します。

※このまま進めるとCinderで使用するブロックボリュームが作成できないため、/homeを削除して領域を確保されます。
homeはパーティションとしては作成されませんが、/(ルート)パーティションにディレクトリとして作成されることになります。

内容を確認し、「変更をディスクに書き込む」を選択します。

インストールタイプの確認があります。
Minimal」を選択し進めます。

インストールの完了を待ち、表示にしたがい再起動を行います。

------
OSインストール後に「cinder-volumes」という名前でボリュームを作成します。
※追加するディスクパーティションはlsblkコマンドなどで確認してください。
作成コマンド例
# pvcreate /dev/sda4
# vgcreate cinder-volumes /dev/sda4

yumコマンドでパッケージ全体を更新してきます。
# yum -y update
# reboot


■OpenStack(icehouse)インストール
ここからはOpenStackのインストールに入ります。
OpenStackのインストール方法はAll-In-Oneオプションで導入せず、answer-fileを使った方法を採用しています。
※answer-fileを使った方が後々拡張できます。


初めにリポジトリ(rdoの格納場所)登録しておきます。
# yum install -y http://rdo.fedorapeople.org/rdo-release.rpm

packstack(openstackインストールツール)導入
# yum install -y openstack-packstack

※バージョン指定が無いと最新のバージョンが入るので、下記のようにバージョン指定すると確実にicehouseが入るかと思います。
# yum install -y openstack-packstack-2014.1.1-0.25.dev1208

packstackではallinoneインストールという手軽な方法があるのですが、
今回は導入のカスタマイズができるよう設定を書いたanswerfileを使用しました

アンサーファイルひな形作成
# packstack --gen-answer-file=answer.conf

sedコマンドでanswer.conf内のIPアドレスをすべてサーバのIPで置換します。
# sed -i -e 's/172.16.x.xx/192.168.33.254/g' answer.conf

既定で作成されるのネットワークを無効
answer.confファイルのCONFIG_PROVISION_DEMOを「n」にしておきます。

PackStackを実行。インストールを行います。
# packstack --answer-file=answer.conf

○Open vSwich設定
PackStack完了後はbr-exにeth0の割り当てが自動で行われないので、以下の手順を実施します。

br-ex(ブリッジ)インターフェースの追加
# ovs-vsctl add-br br-ex

br-exへeth0を追加
# ovs-vsctl add-port br-ex eth0
追加した状態を確認
# ovs-vsctl show

結果以下のようになるはずです。
※ならない場合は手動で編集してください。
--------------------------------------------
/etc/sysconfig/network-scripts/ifcfg-br-ex
DEVICE=br-ex
TYPE=OVSBridge
DEVICETYPE=ovs
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.x.xx
NETMASK=255.255.255.0
--------------------------------------------
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=xxxxxxxxx
TYPE=OVSPort
UUID=xxxxxxxxx
ONBOOT=yes
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
--------------------------------------------
※念のためnetworkを再起動しておきましょう。
# service network restart


○ダッシュボードパスワード設定
Horizoに入る初期パスワードを設定します。

adminユーザのパスワード変更】
# source /root/keystonerc_admin
# keystone user-password-update admin
New Password: XXXXXXX
Repeat New Password: XXXXXXX

一行目のkeystonerc_adminファイルをsourceコマンドを使って環境変数に読み込んでいます。keystonerc_adminにはユーザadminの初期パスワードなどの情報が含まれます。

このファイルを読み込ませることでkeystoneにアクセスが可能となります。
またその後にkeystoneコマンドを使うことでパスワードを変更しています。
OpenStackにはPythonSDKを使っての操作以外にコマンドを使っての操作があります。


初期パスワードはkeystonerc_adminファイルを書き換えておきます。

 # vi /root/keystonerc_admin
export OS_USERNAME=admin
export OS_TENANT_NAME=admin
export OS_PASSWORD=XXXXXXX   ←ここを変更後のパスワードに変更
export OS_AUTH_URL=http://172.16.x.xx:35357/v2.0/
export PS1='[\u@\h \W(keystone_admin)]\$ '


admin同様、demoユーザのパスワードも変更しておきましょう。
# source /root/keystonerc_admin
 ※管理者adminでログインしてdemoユーザのパスワードを変えている。
# keystone user-password-update demo
New Password: XXXXXXX
Repeat New Password: XXXXXXX

# vi /root/keystonerc_demo
export OS_USERNAME=demo
export OS_TENANT_NAME=demo
export OS_PASSWORD=XXXXXXX   ←ここを変更後のパスワードに変更
export OS_AUTH_URL=http://172.16.x.xx:5000/v2.0/


keystonerc_adminファイルとkeystonerc_demoファイルを見ると、
keystoneにアクセスするTCPポート番号が異なっていることが判るかと思います。
管理者は35357を用い、一般ユーザは5000を用います。


○ダッシュボード(Horizon)へのログイン
サーバのIPアドレスでWEBブラウザからアクスしてログインできるか確認します。
http://172.16.x.xx/dashboard


基礎的なインストールまで完了しました。
続きはダッシュボードにログインして環境作成となります。

長文を読んで頂きありがとうございました。

iptablesの動き

先日の台風はみなさん通勤、通学いかがだったでしょうか。
朝の忙しい時間帯だったので、大変なおもいをされた方も多いかと思います。
まつぼっくりも5時ごろ目が覚めてテレビやインターネットで祈るように(電車止まれ!?)見ておりましたが、7時ごろあきらめ会社に向かいました。

このブログは今までOpenStackのプログラミングを取り上げてきましたが、
環境設定のところでiptablesの設定を色々と変更致しました。

「iptablesとはなんぞや?」という人とか
「iptables?知ってるよ!でもちゃんと書いたことは無いけどね!」という人も
「LPICで勉強したよ!」という方もう一度おさらいしてみませんか?


iptablesの概要図をご覧ください。ここではfilterとNATテーブルの内容を中心に記載しています。


iptablesは大きく4つのテーブル(役割)に分けられており、iptablesで一番代表的なファイアーウォールの機能はfilterテーブル内で行われています。
他にIPアドレスなどの変換はNATテーブルで行っています。

このようにiptablesは役割別に大きくテーブルの区分けがされており、テーブル内の動作毎にチェーン(Chain)が設定されていると考えると判りやすいと思います。
なお、Chainはその中の細かなルールです。


さて先日OpenStackのプログラム環境の作成時に以下のiptablesの設定を入れましたね。
設定内容を分解してみましょう。
--------------------------------
-A INPUT -s 172.16.0.22/32 -p tcp -m multiport --dports 9292 -m comment --comment "002 glance incoming glance_172.16.0.22" -j ACCEPT
--------------------------------

・「-A」はこのルールを追加することを意味しています。
・次にテーブル名を意味する「-t filter」が入るはずなのですが、filterの場合のみ省略可能です。
  NATの場合は「-t NAT」が入ります。
・「INPUT」はパケットの入力するチェーンを指定しています。
・「-s」は送信元のIPアドレスです。
・「-p」はプロトコルです。
・「-m」は特別で、カーネルモジュールをロードして様々なパケットマッチを行うことができます。
・「--dports」は送信先ポートです。
・ 「-j」は条件に合ったときのアクション


iptablesの内容は「iptables -L」コマンドで確認する事ができます。
-----------------------------------------------------
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   
-----------------------------------------------------

INPUT、FORWARD、OUTPUTのChainがあることがわかります。

Chain横の括弧内に書かれているのはデフォルトのポリシーといって、Chain内にある全てに該当しない場合に適用されます。

iptablesはコマンドで「/etc/sysconfig/iptables」に書き込みができます。

以下のようにすると追加したルールはチェーンの一番下に追加されます。
# iptables -A INPUT -s 172.16.0.22/32 -p tcp -m multiport --dports 9292 -j ACCEPT

ルールは上部からマッチしたところで解釈されてしまうため、チェーンの一番最後に追加されると不都合が生じることがあります。
追加する行番号を指定する場合は以下のようにすればよいでしょう
# iptables -I INPUT 3 -s 172.16.0.22/32 -p tcp -m multiport --dports 9292 -j ACCEPT

不要なルールを削除するときは「-D」を入れて実行します。
# iptables -D INPUT -s 172.16.0.22/32 -p tcp -m multiport --dports 9292 -j ACCEPT

完了したら保存し、サービスを再起動します。
/etc/init.d/iptables save
service iptables restart


OpenStackのようにiptablesが書き込まれているときはエディタで「/etc/sysconfig/iptables」を直接編集した方が早いし楽かもしれません。
保存したらiptablesのサービス再起動です。

【OpenStack】 Python SDK コーディング #4

先日肩をもうれつに痛めてしまい四十肩疑惑をもたれているまつぼっくりです。

最近気温が急激に下がったためか、運動不足がたたったのか判りませんが、
毎日鎮痛剤の貼り薬を付けながら我慢して仕事に向かっています。

さて、前回のOpenStackのスクリプトの続きです。
残っているネットワーク機能のneutronとブロックストレージのcinderについての動作確認です。

ネタバレをすると2つのサービスともiptablesでブロックされているため、
glanceの時同様エラーとなり、ポートの開放をしております。

OpenStackコントローラーの/etc/sysconfig/iptablesに以下2つを追加しました。
RDOではneutron、cinder共に自分自身のIPアドレスのフィルタールールがあると思いますので、そちらのすぐ後にそれぞれ挿入して下さい。

-A INPUT -s 172.16.0.22/32 -p tcp -m multiport --dports 9696 -m comment --comment "002 neutron server incoming neutron_server_172.16.0.22_172.16.0.22" -j ACCEPT
-A INPUT -s 172.16.0.22/32 -p tcp -m multiport --dports 3260,8776 -m comment --comment "002 cinder incoming cinder_172.16.0.22" -j ACCEPT


$ cat neutron_netlist.py
#!/usr/bin/python
from open_conn_demo import neutron

nnet = 'demo_private'

for nets in neutron.list_networks(name=nnet):
        print nets

実行結果
$ ./neutron_netlist.py
networks


$ cat cinder_vollist.py
#!/usr/bin/python

from open_conn_demo import cinder

for vol in cinder.volumes.list():
        print vol

実行結果
$ ./cinder_vollist.py
<Volume: 1a8650be-36d1-4e52-a12b-6c885da3b521>


おそらくneutron、cinderの2つとも情報を取得できているはずです。
一旦はAPI取得スクリプトの動作検証は終わりです。

これら以外にもOpenStackにはswiftやceilometerなどの機能があるのですが、
おいおいやっていきましょう!(あまり検証できていなかったりする)
これからの記事このAPIを使ってOpenStackを操作したいと考えております。


マイクロソフトのセミナーに行ってきました。

先日マイクロソフトのmstepセミナーに行ってきました。
品川で降りてマイクロソフトに向かいます。

品川駅もすごくきれいになりましたよね。
駅の通路に液晶ディスプレイがたくさん並んでいます。



会場には結構早く着いたので朝食の時間が取れました。
コンビニでサンドイッチを買って広い中庭で過ごせました。

今回のセミナーはAzure ActiceDirectory(AzureAD)とSaaSの連携の話でした。

恥ずかしながら私はAzureADというのを知らずに受講してしまったのですが、
Azure ADはクラウド上にオンプレミスで作っていたActiveDirectoryをたてると
いうのでは無く、Office365やSalesForce、GoogleAppsなどのSaaSアプリケーションに対するID認証(Identity)を行える全く異なるものとの事でした。

これまでのOUのような階層構造は取っておらずフラット構造を取り、
グループポリシーなどもありません。

これまでの企業組織のADとAzureADは連携することもできるので、その連携方法によってはADFS(フェデレーションサービス)を使って、認証を企業のオンプレミスADにて行い、認可をクラウド上のAzureADにて行うといったことも出来ます。

※認証認可を簡単に説明すると認証はパスワード等によるログオン、認可は権限付与という意味になります。

認証部分をオンプレミスにすることによりパスワードをクラウドに持たせない運用が行えます。

しかしこれではオンプレミスADの障害時にクラウドのサービスが認証できなくなるので、
パスワードのハッシュのみをAzureADに持たせる事が可能との事です。
パスワード自体はクラウドにコピーせずともオンプレミスのADの障害時は認証にて
入力したパスワードのハッシュ値とAzureAD上に保存されたハッシュパスワードを
比較し、ログオンが可能という仕組みです。

一日コースだったので他にもたくさんの機能の説明があったのですが、クラウド分野の
MSの本気を感じました。Azure関連の検証も今後やってみたいと思っております。

さて、少し寄り道となりましたが次回はOpenstackのneutron、cinderの残りの動作確認を書きたいと思います。

読んでいただきありがとうございました。