45
中井悦司 Twitter @enakai00 オープンクラウド・キャンパス Eucalyptusに学ぶ IaaSクラウドを支えるインフラ技術

IaaSクラウドを支える基礎技術 v1_0

Embed Size (px)

Citation preview

Page 1: IaaSクラウドを支える基礎技術 v1_0

中井悦司Twitter @enakai00

オープンクラウド・キャンパス

Eucalyptusに学ぶIaaSクラウドを支えるインフラ技術

Page 2: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus2

IaaSクラウドを支えるインフラ技術

自己紹介

好評発売中

中井悦司(なかいえつじ)– Twitter @enakai00

日々の仕事

– Senior Solution Architect and

Cloud Evangelist at Red Hat K.K.

企業システムでオープンソースの活用を希望される

お客様を全力でご支援させていただきます。

昔とった杵柄– 素粒子論の研究(超弦理論とか)

– 予備校講師(物理担当)

– インフラエンジニア(Unix/Linux専門)

Page 3: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus3

IaaSクラウドを支えるインフラ技術

目次

クラウドの概要とEucalyptus

マシンイメージとVMインスタンス起動プロセス

クラウドネットワークとLinuxのネットワーク機能

Elasitic Block Storage(EBS)とLinuxのiSCSI機能

クラウドセキュリティと公開鍵認証

まとめ

(付録)GlusterFSについて

Page 4: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus4

IaaSクラウドを支えるインフラ技術

クラウドの概要とEucalyptus

Page 5: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus5

IaaSクラウドを支えるインフラ技術

企業向けのクラウドに求められる5つの鍵

5つの鍵 内容 Linux/OSSの優位性

柔軟なサービス お客様の必要に応じて自由にリソースの追加、変更ができる環境を提供

Linux/OSSは、ライセンスの制約に縛られずにリソースの追加が可能

適切なサービスレベル お客様が必要とするサービスレベルとそれに見合った価格のサービスを提供

Linux/OSSベースのソリューションでサービス管理機能の実装が可能

可搬性のある環境 お客様のビジネス要件に応じて、様々なクラウドサービスの選択・移行が可能な環境を実現

Linux/OSSにより、特定ベンダに依存しないオープンスタンダード技術が活用可能

セキュリティと    コンプライアンス

社内データセンターと同等の安全で管理された環境を実現

企業システムに求められるセキュリティ品質を満たすOSとしての実績を持つLinux

パートナーエコシステム 複数の企業が連携してクラウドサービスを提供する環境を確立

Linux/OSSは、クラウドサービス提供企業の共通基盤技術としてのデファクト・スタンダード

(出典)Linux and Commercial Software: Combining to Support the Cloud Environment http://www.dbta.com/downloads/Hurwitz-IBM_Linux_Cloud.pdf

さまざまな技術やサービスが連携するクラウド環境では、標準技術としてのLinux/OSSの価値が発揮されます。

Page 6: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus6

IaaSクラウドを支えるインフラ技術

利用者とサービス内容でクラウドを分類

複数企業のユーザーが共同利用

アプリケーション環境を提供 = SaaS (エンドユーザーがすぐに使えるアプリケーション・サービス)

OS + Middleware 環境を提供 = PaaS (プログラマがアプリケーションを開発できる環境)

OS 環境を提供 = IaaS (管理者がシステムを構築・運用できる環境)

Privateクラウド Publicクラウド

企業内のユーザーのみが利用

Eucalyptus Amazon EC2/S3

Page 7: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus7

IaaSクラウドを支えるインフラ技術

パブリック ネットワーク

クライアント 

クラスタコントローラ

ストレージコントローラ

ノードコントローラ

Warlus

仮想マシン イメージ

EBSイメージ

プライベート ネットワーク

iptables(NAT/パケットフィルタリング)

VLAN / 仮想ブリッジ

ネットワーク技術

X.509 証明書

SSH 鍵認証

認証技術

iSCSI

ディスクイメージ

ストレージ技術

ノードコントローラ

・・・・

サーバ仮想化(KVM/Xen)

カーネル起動プロセス

仮想化技術 OS 基礎技術

クラウドコントローラ

さまざまなインフラ技術の 集大成がクラウドなのです。

Eucalyptusを実現するインフラ技術

API プログラミング

自動化技術

Page 8: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus8

IaaSクラウドを支えるインフラ技術

マシンイメージとVMインスタンス起動プロセス

Page 9: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus9

IaaSクラウドを支えるインフラ技術

パブリック ネットワーク

クライアント 

クラスタコントローラ

ストレージコントローラ

ノードコントローラ

Warlus

仮想マシン イメージ

EBSイメージ

プライベート ネットワーク

iptables(NAT/パケットフィルタリング)

VLAN / 仮想ブリッジ

ネットワーク技術

X.509 証明書

SSH 鍵認証

認証技術

iSCSI

ディスクイメージ

ストレージ技術

ノードコントローラ

・・・・

サーバ仮想化(KVM/Xen)

カーネル起動プロセス

仮想化技術 OS 基礎技術

クラウドコントローラ

さまざまなインフラ技術の 集大成がクラウドなのです。

Eucalyptusを実現するインフラ技術

API プログラミング

自動化技術

Page 10: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus10

IaaSクラウドを支えるインフラ技術

VMインスタンスの起動に必要な3種類のイメージ

ユーザ・プロセス

システムコール

ユーザ空間

カーネル空間(Linuxカーネル)カーネル

イメージ

マシンイメージ

リソース割り当て

デバイスドライバ

(仮想)ハードウェア

ラムディスクイメージ

Linux起動時に必要な デバイスドライバを提供

ディスクアクセス

(仮想)ディスク 

EucalyptusがVMインスタンスを起動する際は、マシンイメージ(OS領域のディスクイメージ)とは別に、カーネルイメージとラムディスクイメージをWalrusからダウンロードします。

– マシンイメージは、VMインスタンスに接続される仮想ディスクの中身そのもの。– カーネルイメージは、メモリ(カーネル空間)に読み込まれるLinuxカーネルのバイナリコード。– ラムディスクイメージは、カーネルの起動に必要な初期ラムディスクを提供。

Page 11: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus11

IaaSクラウドを支えるインフラ技術

Linuxカーネルの起動プロセス 物理サーバ環境や通常のサーバ仮想化環境では、Linuxカーネル(vmlinuz-*)と初期ラムディ

スク(initrd-*、initramfs-*)は、/bootファイルシステムに保存されています。

ブートローダ(GRUB)はこれらをメモリに読み込んだ後に、Linuxカーネルを起動します。– ブートローダはBIOSの機能で/bootファイルシステムにアクセスします。BIOSの機能制限によ

り、/bootファイルシステムのディスク上の配置に制限が出たりします。(いわゆる「XXGBの壁」)

Linuxカーネルは、メモリを利用したラムディスク領域をマウントして、初期ラムディスクの内容を展開した後に、そこに含まれる「initスクリプト」を実行します。

– initスクリプトは、ディスクアクセスに必要なデバイスドライバをロードして、OS領域(ルートファイルシステム)をマウント後、最初のプロセス/sbin/initを実行します。

物理メモリ

ラムディスク領域

・デバイスドライバ・initスクリプト

ブートローダ (GRUB)

/bootファイルシステム

起動ディスク

Linuxカーネル

初期ラムディスク

ブートローダが読み込み

ラムディスク領域に展開

※参考資料プロのためのLinuxシステム構築・運用技術「6.4.1 Linuxのブートプロセス」

Linuxカーネル

初期ラムディスク

Page 12: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus12

IaaSクラウドを支えるインフラ技術

Eucalyptusにおけるイメージ管理

カーネルイメージと初期ラムディスクは、原理的にはOS領域(ルートファイルシステム)とは独立して提供されるものです。

– 例えばPXEブート環境では、tftpでカーネルと初期ラムディスクをメモリに読み込んで起動します。– その昔、BIOSからアクセスできないディスクにLinuxをインストールした環境では、フロッピーディ

スクにカーネルイメージと初期ラムディスクを入れて起動していた事も・・・。

Eucalyptusでは、マシンイメージ(ルートファイルシステム)とカーネルイメージ、ラムディスクイメージを明示的に分離することで、不適切なカーネルの使用に伴う問題の発生を防止しています。

カーネルイメージ、ラムディスクイメージは管理者のみが新規登録可能。– 管理者は使用する仮想化ハイパーバイザに適合したイメージを事前に用意する。

一般ユーザはマシンイメージのみを編集、新規登録可能。– 一般ユーザには、ルートファイルシステムに導入されたアプリケーションが重要。

Page 13: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus13

IaaSクラウドを支えるインフラ技術

仮想ディスクイメージの構成

ノードコントローラは、次の手順でVMインスタンスを起動します。– 必要なマシンイメージ、カーネルイメージ、ラムディスクイメージをWalrusからダウンロード– 指定サイズの仮想ディスクイメージ・ファイルを新規作成して、3つのパーティションを構成

• 第1パーティションは、マシンイメージの内容をコピーしてルートファイルシステムにする• 第2パーティションは空のファイルシステムを作成して、エフェメラル領域にする• 第3パーティションはSwap領域としてフォーマットする• 第1パーティションをループマウントして、/root/.ssh/authorized_keysにユーザの公開鍵を登録する

– 仮想ディスクイメージ・ファイルをVMインスタンスの仮想ディスクとして接続– カーネルイメージとラムディスクイメージを使用してVMインスタンスを起動

新規仮想ディスクイメージ

OS領域 エフェメラル領域 Swap領域

マシンイメージをコピー

空のファイルシステムを作成

Swap領域としてフォーマット

マシンイメージ

VMインスタンスに接続

Page 14: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus14

IaaSクラウドを支えるインフラ技術

(参考)ループマウントの利用方法

仮想ディスクイメージは、ループバックデバイス/dev/loopXに紐付けることで、通常のブロックデバイス(/dev/sdX)と同様にマウントすることが可能です。

– 例:isoイメージファイルをループマウント• loopオプションを指定すると自動的にループバックデバイスに紐付けられます。

– 例:パーティションを含むディスクイメージをマウント• losetupコマンドで紐付けた後に、kpartxコマンドで各パーティションを/dev/mapper/loopXpYにマッピングし

ます。

volume01.img

 物理ディスク 

 仮想ディスクイメージ 

/dev/sdX

/dev/loopX

ループバック・デバイス

# mount -o loop hoge.iso /mnt/hoge# df | grep loop/dev/loop0 3351190 3351190 0 100% /mnt/hoge

# losetup -fv volume01.imgLoop デバイス は /dev/loop0 です# kpartx -av /dev/loop0add map loop0p1 (253:0): 0 208782 linear /dev/loop0 63add map loop0p2 (253:1): 0 8193150 linear /dev/loop0 208845add map loop0p3 (253:2): 0 1044225 linear /dev/loop0 8401995# mount /dev/mapper/loop0p2 /mnt/image# ls -l /mnt/image/

合計 184drwxr-xr-x. 2 root root 4096 2 月 14 11:56 2011 bindrwxr-xr-x. 2 root root 4096 2 月 14 09:57 2011 bootdrwxr-xr-x. 2 root root 4096 2 月 14 09:57 2011 devdrwxr-xr-x. 74 root root 4096 3 月 4 08:56 2011 etc(以下略)# umount /mnt/image# kpartx -d /dev/loop0# losetup -d /dev/loop0

Page 15: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus15

IaaSクラウドを支えるインフラ技術

クラウドネットワークとLinuxのネットワーク機能

Page 16: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus16

IaaSクラウドを支えるインフラ技術

パブリック ネットワーク

クライアント 

クラスタコントローラ

ストレージコントローラ

ノードコントローラ

Warlus

仮想マシン イメージ

EBSイメージ

プライベート ネットワーク

iptables(NAT/パケットフィルタリング)

VLAN / 仮想ブリッジ

ネットワーク技術

X.509 証明書

SSH 鍵認証

認証技術

iSCSI

ディスクイメージ

ストレージ技術

ノードコントローラ

・・・・

サーバ仮想化(KVM/Xen)

カーネル起動プロセス

仮想化技術 OS 基礎技術

クラウドコントローラ

さまざまなインフラ技術の 集大成がクラウドなのです。

Eucalyptusを実現するインフラ技術

API プログラミング

自動化技術

Page 17: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus17

IaaSクラウドを支えるインフラ技術

Eucalyptusのネットワーク構成

Managedモードネットワークでは、各VMインスタンスはプライベートIPとパブリックIPがアサインされます。

– プライベートIPはVMインスタンス間の通信に使用– パブリックIPは外部からの接続に使用

• パブリックIPをアサインしないことで、外部から接続できないVMインスタンスを作成することも可能

VMインスタンスは、どれか1つのセキュリティグループに属します。

– 同一のセキュリティグループのVMインスタンスのみプライベートネットワーク通信が可能→ LinuxのVLAN機能でネットワークを分離

– セキュリティグループごとに、パブリックネットワークからのアクセスを制限(指定のアドレスから、指定のポートに対してのみ接続を許可)→ Linuxのパケットフィルタリング機能(iptables)を利用

パブリック ネットワーク

クライアント 

・・・・

クラスタコントローラ

ノードコントローラ ノードコントローラ

プライベートネットワーク用ネットワークスイッチ

Page 18: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus18

IaaSクラウドを支えるインフラ技術

基本的なVLANの仕組み

VLANとは、L2スイッチ内部に複数のネットワークセグメントを作成する機能です。– ポートごとに、内部でどのVLANに接続するかを指定するのが「ポートVLAN」です。– 「ポートVLAN」に設定されたポートに接続する機器は、VLAN用の特別な設定は不要です。

スイッチ間をカスケード接続する際は、接続するポートを「タグVLAN」に設定します。– このポートを出入りするパケットには、どのVLANに行くのかを示す「VLANタグ」が付けられます。

1

ポートVLAN100

VLAN100 VLAN200

2 3

ポートVLAN200

4 5

スイッチ#1

1

VLAN100 VLAN200

2 3 4 5

スイッチ#2

この部分には、VLANタグ(VLAN100、もしくはVLAN200)付きのパケットが流れる

ポートVLAN100 ポートVLAN200

タグVLAN タグVLAN※参考資料プロのためのLinuxシステム構築・運用技術「4.1.1 IPネットワークの基礎」

Page 19: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus19

IaaSクラウドを支えるインフラ技術

サーバ仮想化環境でのVLANの利用

サーバ仮想化環境では、VLANを利用することで、仮想マシンごとに異なるサブネットに接続することができます。

– ホストLinux上でVLANタグの処理を行うので、仮想マシン内部(ゲストOS)ではVLANの存在を意識する必要がありません。

※参考資料

プロのためのLinuxシステム・ネットワーク管理技術「5.3.3 VLANデバイスのブリッジ接続」

eth0.100 eth0.200

br100 br200

タグ付きパケット

タグ無しパケット

仮想マシン#1 仮想マシン#2

ホストLinux

物理サーバ 

eth0

仮想ブリッジ

VLANデバイス

1

ポートVLAN100

VLAN100 VLAN200

2 3

ポートVLAN200

4 5

スイッチ#1

タグVLAN

Page 20: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus20

IaaSクラウドを支えるインフラ技術

VLANによるプライベートネットワークの構成

VLAN11

2 3 4

 プライベート・ネットワーク用 ネットワーク・スイッチ

タグVLAN 

ノードコントローラ#1

VLAN10

ノードコントローラ#2

VMインスタンス#1

VMインスタンス#2

eth0.11

eucabr11

VMインスタンス#3

VMインスタンス#4

eth0.10

eucabr10

eth0

VMインスタンス#5

VMインスタンス#6

eth0.11

eucabr11

VMインスタンス#7

VMインスタンス#8

eth0.10

eucabr10

eth0

Eucalyptusでは、セキュリティグループごとに異なるVLANを用意することで、プライベートネットワークを分離します。

– プライベートネットワーク用スイッチのポートは「タグVLAN」に設定する必要があります。

1 5

タグVLAN 

Page 21: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus21

IaaSクラウドを支えるインフラ技術

NATによるパブリックネットワーク接続 VMインスタンスに付与されたパブリックIPは、実際にはクラスタコントローラの物理NICに

アサインされます。– クラスタコントローラがパブリックネットワークから受信したパケットをDNATでプライベートIPに

変換して、VMインスタンスに転送します。逆に、VMインスタンスからパブリックネットワークに送信したパケットは、SNATでパブリックIPに変換して送出します。

• VMインスタンスは、クラスタコントローラの仮想ブリッジのIPアドレス(この例では10.1.2.1)をデフォルトゲートウェイに指定します。

– セキュリティグループごとのパケットフィルタリングもこの部分で行います。

ノードコントローラ

VMインスタンス#1

VMインスタンス#2

eth1.10

eucabr1010.1.2.1

192.168.32.20192.168.32.21

SNAT

DNAT

プライベートネットワーク用ネットワークスイッチ

クラスタコントローラ

パブリック ネットワーク

10.1.2.2

10.1.2.3

eth0

eth0

eth0.10

eucabr10パケットフィルタリング

eth1

Page 22: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus22

IaaSクラウドを支えるインフラ技術

パケット転送におけるチェーンとテーブル

iptablesでNATやパケットフィルタリングの設定を行う際は、チェーンとテーブルを指定する必要があります。

– パケット転送時のNATとフィルタリングの設定は、次のチェーンとテーブルで行います。• FORWARDチェーンのfilterテーブル:パケットフィルタリング処理• PREROUTINGチェーンのnatテーブル:DNAT処理• POSTROUTINGチェーンのnatテーブル:SNAT処理

ネットワーク#1ネットワーク#2

natテーブル(DNAT処理)

filterテーブル(パケットフィルタリング処理)

natテーブル(SNAT処理)

パケット受信パケット送信

PREROUTINGチェーン

FORWARDチェーン

POSTROUTINGチェーン

※参考資料プロのためのLinuxシステム・ネットワーク管理技術「2.4.1 チェーンとテーブルの全体像」

Page 23: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus23

IaaSクラウドを支えるインフラ技術

Eucalyptusのiptables自動設定例

# iptables -t nat -nL PREROUTINGChain PREROUTING (policy ACCEPT)target prot opt source destinationDNAT tcp -- 10.1.0.0/16 169.254.169.254 tcp dpt:80 to:169.254.169.254:8773DNAT all -- 0.0.0.0/0 192.168.32.20 to:10.1.2.2DNAT all -- 0.0.0.0/0 192.168.32.21 to:10.1.2.3

# iptables -t nat -nL POSTROUTINGChain POSTROUTING (policy ACCEPT)target prot opt source destinationSNAT all -- 10.1.2.2 !10.1.0.0/16 to:192.168.32.20SNAT all -- 10.1.2.3 !10.1.0.0/16 to:192.168.32.21MASQUERADE all -- !127.0.0.0/8 !10.1.0.0/16

# iptables -nL FORWARDChain FORWARD (policy DROP)target prot opt source destinationACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate ESTABLISHEDACCEPT all -- 0.0.0.0/0 !10.1.0.0/16ACCEPT all -- 10.1.2.0/27 10.1.2.0/27admin-default all -- 0.0.0.0/0 0.0.0.0/0

# iptables -nL admin-defaultChain admin-default (1 references)target prot opt source destinationACCEPT tcp -- 0.0.0.0/0 10.1.2.0/27 tcp dpt:22

DNATの設定

SNATの設定

パケットフィルタリングの設定(adminユーザのdefaultセキュリティグループ)

これらは、クラスタコントローラ上のiptablesで設定されます。

Page 24: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus24

IaaSクラウドを支えるインフラ技術

 Elasitic Block Storage(EBS)と LinuxのiSCSI機能

Page 25: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus25

IaaSクラウドを支えるインフラ技術

パブリック ネットワーク

クライアント 

クラスタコントローラ

ストレージコントローラ

ノードコントローラ

Warlus

仮想マシン イメージ

EBSイメージ

プライベート ネットワーク

iptables(NAT/パケットフィルタリング)

VLAN / 仮想ブリッジ

ネットワーク技術

X.509 証明書

SSH 鍵認証

認証技術

iSCSI

ディスクイメージ

ストレージ技術

ノードコントローラ

・・・・

サーバ仮想化(KVM/Xen)

カーネル起動プロセス

仮想化技術 OS 基礎技術

クラウドコントローラ

さまざまなインフラ技術の 集大成がクラウドなのです。

Eucalyptusを実現するインフラ技術

API プログラミング

自動化技術

Page 26: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus26

IaaSクラウドを支えるインフラ技術

Elastic Block Storageの仕組み

Elastic Block Storage(EBS)は、ストレージコントローラ上の仮想ディスクイメージをネットワーク経由でVMインスタンスの仮想ディスクとして割り当てたものです。

– EBSの実体はストレージコントローラ上に存在するので、VMインスタンスを停止してもEBSは削除されません。新しいVMインスタンスに接続して再利用できます。

– ネットワーク経由で書き込みするので、エフェメラル領域よりIOパフォーマンスは劣ります。

一方、エフェメラル領域を含むデフォルトの仮想ディスクの実体は、ノードコントローラ上の仮想ディスクイメージで、VMインスタンスを停止すると破棄されます。

デフォルトの仮想ディスク

ノードコントローラ

Walrus

VM インスタンス

仮想ディスクイメージダウンロード

ストレージコントローラ

iSCSI接続仮想ディスクイメージ

EBS

マシンイメージ

Page 27: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus27

IaaSクラウドを支えるインフラ技術

EBS接続の詳細

EBSボリュームは次の手順で構成されます。– ストレージコントローラに新規仮想ディスクイメージを作成した後、これを擬似的な物理ボリュー

ム(PV)として、論理ボリューム(LV)を作成する。これをiSCSI LUNとして公開する。• 仮想ディスクイメージを直接iSCSI LUNとして公開することも可能ですが、LVMスナップショットを利用するた

めに、あえて、一度、論理ボリュームを作成してから公開しています。

– ノードコントローラの外部接続ディスクとして、iSCSI LUNを接続した後に、ノードコントローラ上のVMインスタンスに仮想ディスクとして割り当てる。

iSCSI接続には、Linuxが提供するターゲットとイニシエータの機能を利用します。– 一般に、iSCSI LUNを提供する機器を「ターゲット」、iSCSI LUNを利用する機器を「イニシエー

タ」と呼びます。

イニシエータ

ストレージコントローラ

ターゲット

仮想ディスクイメージ

論理ボリューム

ノードコントローラ

※参考資料プロのためのLinuxシステム構築・運用技術「3.3.2 iSCSI」

iSCSI接続LVMスナップショット

EBSスナップショット

Page 28: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus28

IaaSクラウドを支えるインフラ技術

(参考)EBSと同等のiSCSI接続を実現する手順

# yum install scsi-target-utils

# dd if=/dev/zero of=/opt/volume02.img bs=1M count=576# losetup -fv volume02.imgLoopデバイス は /dev/loop0 です# pvcreate /dev/loop0 Physical volume "/dev/loop0" successfully created# vgcreate vg01 /dev/loop0 Volume group "vg01" successfully created# lvcreate -L 512M -n lv01 vg01 Logical volume "lv01" created

# cat <<EOF >> /etc/tgt/targets.conf<target iqn.2011-06.com.example.server01:tgt01> backing-store /dev/vg01/lv01</target>EOF

# service tgtd start

ターゲット側の設定

下記は、EBSと同等のiSCSI接続を手動で行う手順の例です。– ターゲット側では、仮想ディスクイメージ・ファイルをループバック・デバイスに紐付けることに

より物理ボリュームとして扱っています。

# yum install iscsi-initiator-utils# service iscsi start# iscsiadm -m discovery --type sendtargets --portal <ターゲットのIPアドレス># service iscsi restart

イニシエータ側の設定

Page 29: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus29

IaaSクラウドを支えるインフラ技術

 クラウドセキュリティと公開鍵認証

Page 30: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus30

IaaSクラウドを支えるインフラ技術

パブリック ネットワーク

クライアント 

クラスタコントローラ

ストレージコントローラ

ノードコントローラ

Warlus

仮想マシン イメージ

EBSイメージ

プライベート ネットワーク

iptables(NAT/パケットフィルタリング)

VLAN / 仮想ブリッジ

ネットワーク技術

X.509 証明書

SSH 鍵認証

認証技術

iSCSI

ディスクイメージ

ストレージ技術

ノードコントローラ

・・・・

サーバ仮想化(KVM/Xen)

カーネル起動プロセス

仮想化技術 OS 基礎技術

クラウドコントローラ

さまざまなインフラ技術の 集大成がクラウドなのです。

Eucalyptusを実現するインフラ技術

API プログラミング

自動化技術

Page 31: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus31

IaaSクラウドを支えるインフラ技術

鍵ペアによる認証の基礎

ネットワーク上の認証には、ユーザ認証とサーバ認証があります。– ユーザ認証:接続を許可するサーバから見て、本物のユーザであることを確認する。– サーバ認証:接続するユーザから見て、本物のサーバであることを確認する。

これらの認証には、主に非対称鍵暗号を利用した方法が用いられます。– 非対称鍵暗号では、暗号化に使う鍵と復号化に使う鍵が異なります。– 非対称鍵暗号では、鍵の所有者だけが保管するべき秘密鍵と、万人に配布しても構わない公開鍵を

利用します。秘密鍵は誤って他人の手に渡らないように管理する必要があります。• 下図は、事前に配布した公開鍵で暗号化したメッセージを送ってもらう例です。このメッセージは、秘密鍵を持

つ自分だけが復号化して読むことができます。

秘密鍵

公開鍵

公開鍵

Aさんにもらった公開鍵で暗号化して送るよ

僕の秘密鍵がないと誰にも復号化できないから安心だ

Aさん

Page 32: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus32

IaaSクラウドを支えるインフラ技術

Eucalyptus環境で使用する鍵ペアの例

Eucalyptusの利用者は、次のような場面で自分だけの秘密鍵を入手します。これらの秘密鍵に対応する公開鍵はクラウドコントローラに保存されます。

– Eucalyptusユーザを作成した際に、Web管理画面からユーザ証明書をダウンロード(ユーザ証明書の中に秘密鍵が含まれる。)

– SSH接続用の鍵ペアを作成した際に、秘密鍵ファイルをクライアントに保存

ユーザがEucalptusのSOAP APIを使用する際、ユーザ証明書に含まれる秘密鍵を利用して、ユーザ認証が行われます。

– 詳細は次ページを参照

ユーザがVMインスタンスにSSH接続する際、事前に作成した秘密鍵を利用して、ユーザ認証が行われます。

– 対応する公開鍵は、ノードコントローラがクラウドコントローラから入手して起動するVMインスタンス内に保存します。

Page 33: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus33

IaaSクラウドを支えるインフラ技術

ユーザA公開鍵ユーザA秘密鍵

ユーザAの証明書

暗号化

ハッシュ値ハッシュ値

復号化

リクエストメッセージ

ハッシュ値

比較

ユーザ情報データベース

リクエストメッセージと暗号化ハッシュ値(署名)を管理サーバに送付

ハッシュ値計算

ハッシュ値計算

クライアントEucalyptus管理サーバ(クラウドコントローラ)

ユーザ証明書の鍵ペアによるSOAP APIユーザ認証の例

クライアントは、リクエストメッセージのハッシュ値を秘密鍵で暗号化して送ります。サーバは、対応する公開鍵で復号化して正しいハッシュ値であることを確認します。

– ユーザAの公開鍵で復号化できる暗号を生成できるのは、対応する秘密鍵を持ったユーザAだけなので、メッセージの送信元が本物のユーザAであることが分かります。

– メッセージの暗号化ハッシュ値を添付することを「メッセージに署名する」と言います。メッセージが改竄されるとハッシュ値が合わなくなるので、メッセージ改竄を防止する効果もあります。

リクエストメッセージ

※実際の処理内容を簡略化して説明しています。

Page 34: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus34

IaaSクラウドを支えるインフラ技術

ユーザASSH 公開鍵

ユーザASSH 秘密鍵

復号化

乱数乱数

暗号化

ハッシュ値

ハッシュ値計算

SSH クライアントVM インスタンス ハッシュ値

ハッシュ値計算

比較

鍵ペアによるSSHユーザ認証

公開鍵認証でSSH接続する際は、次の流れでユーザ認証が行われます。– SSH接続を受け付けたサーバ(SSHデーモン)は、乱数を発生してユーザの公開鍵で暗号化したもの

をクライアント(SSHクライアント)に送信します。– クライアントは対応する秘密鍵で復号化して、そのハッシュ値を返答します。– サーバは、元の乱数のハッシュ値を計算して、クライアントの返答と一致することを確認します。

※参考資料プロのためのLinuxシステム構築・運用技術「2.3.3 SSHの利用方法」

VMインスタンス起動時にノードコントローラが保存

Page 35: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus35

IaaSクラウドを支えるインフラ技術

サーバ証明書秘密鍵

サーバ証明書公開鍵

暗号化

乱数乱数

復号化

ハッシュ値

ハッシュ値計算

SSH クライアントVM インスタンス ハッシュ値

ハッシュ値計算

比較

鍵ペアによるSSHサーバ認証

SSH接続の際は、ユーザから見て接続先のサーバが本物であることを確認する、サーバ認証も行われます。

– クライアントはサーバからサーバ証明書の公開鍵を受け取って保存します。– クライアントは乱数をサーバの公開鍵で暗号化してサーバに送り、サーバは対応する秘密鍵で復号

化して、そのハッシュ値を返送します。– クライアントは元の乱数のハッシュ値を計算して、サーバの返答と一致することを確認します。

※参考資料プロのためのLinuxシステム構築・運用技術「2.3.3 SSHの利用方法」

初回接続時にダウンロード(known_hostsに保存)

Page 36: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus36

IaaSクラウドを支えるインフラ技術

SSHサーバ認証に伴う注意点

新しいサーバに初めて接続する際は、サーバ証明書の受け入れ確認メッセージが表示される場合があります。

以前に接続したことのあるサーバで、前回と異なる公開鍵を受け取った場合、偽者のサーバの可能性があるためにクライアントは接続を拒否します。

– 何らかの理由で、公開鍵が変更されたことがわかっている場合は、~/.ssh/known_hostsの該当のエントリを削除して、再度、SSH接続します。

# ssh root@server01The authenticity of host 'server01 (XXX.XXX.XXX.XXX)' can't be established.RSA key fingerprint is 7c:e6:a3:78:a6:54:a8:4b:f2:87:0b:d5:5d:66:9c:d9.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'server01' (RSA) to the list of known hosts.

# ssh root@server01@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host ise3:d4:87:e2:5b:34:21:8b:7b:40:7a:41:93:91:06:d0.Please contact your system administrator.Add correct host key in /root/.ssh/known_hosts to get rid of this message.Offending key in /root/.ssh/known_hosts:1RSA host key for server01 has changed and you have requested strict checking.Host key verification failed.

新しいサーバ証明書の 受け入れ確認メッセージ

サーバ証明書が前回と異なる 場合の警告メッセージ

Page 37: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus37

IaaSクラウドを支えるインフラ技術

まとめ

Page 38: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus38

IaaSクラウドを支えるインフラ技術

Eucalyptusを実現するインフラ技術

パブリック ネットワーク

クライアント 

クラスタコントローラ

ストレージコントローラ

ノードコントローラ

Warlus

仮想マシン イメージ

EBSイメージ

プライベート ネットワーク

iptables(NAT/パケットフィルタリング)

VLAN / 仮想ブリッジ

ネットワーク技術

X.509 証明書

SSH 鍵認証

認証技術

iSCSI

ディスクイメージ

ストレージ技術

ノードコントローラ

・・・・

サーバ仮想化(KVM/Xen)

カーネル起動プロセス

仮想化技術 OS 基礎技術

クラウドコントローラ

さまざまなインフラ技術の 集大成がクラウドなのです。

API プログラミング

自動化技術

Page 39: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus39

IaaSクラウドを支えるインフラ技術

IaaSクラウドインフラは、『単純なものを組み合わせて 複雑なものを創り上げていく』と言うUnix/Linuxの思想にとてもよく適合する仕組みです。

まずは個々の基礎技術を根本から理解して、その上で、『これらをどのように組み合わせれば最適なクラウドインフラが実現できるのか』というクラウドアーキテクチャの追求を行うことが大切です。

まとめ

Page 40: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus40

IaaSクラウドを支えるインフラ技術

(付録)GlusterFSについて

Page 41: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus41

IaaSクラウドを支えるインフラ技術

GlusterFSとは

コモディティ・ハードウェアを利用して、スケールアウト型の分散ファイルシステムを構築するソフトウェア

元々は、Lawrence Livermore National LabsのHPC(High Performance Computing)クラスタで使用するために開発された分散ファイルシステム

石油・ガスなどの資源開発企業からの要望で、大規模ストレージ・ソリューションとしてGluster社が製品化、オープンソースとして開発を継続

Red Hatは、クラウド向けのストレージ・ソリューションに戦略的に投資を行うという判断の下、2011年にGluster社を買収

今後は、Amazon S3互換API、Hadoop MapReduce API(HDFSの代替)、 OpenStack SWIFT互換APIなどのAPIを実装予定※ Red Hatによる買収前のGluster社による開発意向表明であり、Red Hatとしての計画は未定です。

Page 42: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus42

IaaSクラウドを支えるインフラ技術

GlusterFSのアーキテクチャ

分散ストレージを構成する各ノードの通常のファイルシステムをバックエンドデバイスとして使用します。

– GlusterFSに保存したファイルの実体は、どこかのノードのファイルシステムに保存されます。

ファイル名のハッシュ計算で保存するノードを決定します。– 各ファイルの保存ノードの情報を別途、どこかにメタデータとして保存しておく必要がありません。

file01 file02 file03

・・・ GlusterFSクラスタ

file01, file02, file03

GlusterFSクライアント

クライアントからは1つのファイルシステムに見える

実際には各ノードのファイルシステムに分散して保存されている

ボリューム

Page 43: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus43

IaaSクラウドを支えるインフラ技術

GlusterFSの利用手順

GlusterFSが提供する、クライアントからマウント可能な仮想ファイルシステムを「ボリューム」と呼びます。次の手順でボリュームを作成して利用します。

– GlusterFSクラスタの各ノードに「ブリック」と呼ばれるディレクトリを用意します。– 各ノードが使用するブリックを指定して、ボリュームを作成します。– GlusterFSクライアントは、任意の1つのノードとボリューム名を指定して、ボリュームをマウント

して使用します。• どのノードを指定してもその後の動作に変わりはありません。実際のデータのやり取りは、ハッシュ計算に基づ

いて、該当ファイルを保存するノードと行われます。• マウントに使用するプロトコルは、GlusterFS独自プロトコル、もしくはNFSプロトコルが利用可能です。• GlusterFSクラスタを構成するノード自身の上でマウントして使用することもできます。

各ノードに複数のブリックを用意して、複数のボリュームを作成することもできます。

各ノードの複数のブリックを使用するボリュームを構成することもできます。–各ノードが複数のローカルディスクを持つ場合、ディスクごとにブリックを分けること

で、ディスクI/Oの負荷分散が実現できます。

同じファイルを複数のブリックに保存する「レプリケーション構成」、1つのファイルを一定サイズで分割して複数のブリックに保存する「ストライピング構成」なども可能です。

Page 44: IaaSクラウドを支える基礎技術 v1_0

Open Cloud Campus44

IaaSクラウドを支えるインフラ技術

/brick01

/brick02

/brick03

/brick04

/brick01

/brick02

/brick03

/brick04

/brick01

/brick02

/brick03

/brick04

ボリュームの構成例

/brick01

/brick02

/brick03

/brick04

GlusterFSクラスタ

ファイル単位で各ブリックに分散保存(1つのファイルはどれか1つのブリックに存在)

node01-node02、node03-node04でそれぞれレプリケーション

1つのファイルを各ブリックに分散保存

レプリケーションレプリケーション

ストライピング

レプリケーションレプリケーション

ストライピング

レプリケーションとストライピングの組み合わせ

node01 node02 node03 node04

Page 45: IaaSクラウドを支える基礎技術 v1_0

中井悦司Twitter @enakai00

オープンクラウド・キャンパス

これからもクラウドを支えるインフラ技術を学びましょう