「NAT環境にいるCloudStack管理GUIでWebコンソールへのアクセスを可能にする」

補欠だったのですが急遽参加する事になったCloudStack Advent Calendar(http://atnd.org/events/34309)

人身事故で家に帰れなくなった僕がこれから12/07分を書くよ\(^o^)/

 

内容は「NAT環境にいるCloudStack管理GUIでWebコンソールへのアクセスを可能にする」です。

内容は「NAT環境にいるCloudStack管理GUIでWebコンソールへのアクセスを可能にする」です。

 

みなさんCloudStack 4.0(http://incubator.apache.org/cloudstack/)を動かしてますか?

 
僕は検証の時間がやっと作れたので環境を構築しています。
環境としては以下
 
  1. CloudStack環境は独立したネットワークに閉じ込める(10.10.0.0/16のBasic Network環境)
  2. CloudStack環境へのアクセスには境界ルータを用いる( IIJ製SEIL)
  3. Management WebUIには、境界ルータのNAT/NAPT機能を用いてアクセスする(SEILのNAT機能)
みなさんまさかオフィスのネットワークに「直に」CloudStack環境つないでたりしませんよね?
境界ルータ置きますよね?
SEILとかSEILとかSEIL/x86とか
 
ここで問題が...
Management WebUIまでのブラウザアクセスは、境界ルータのNAT設定だけで行けるのですが、
インスタンスのWebコンソールへのアクセスは実はあっさりは成功しません
# 最終的にはVMへのVNC
# VNCのお話は今回は割愛(まだソースコードをちゃんと読んでいないので)

ということで

「NAT環境にいるCloudStack管理GUIでWebコンソールへのアクセスを可能にする」

を目的に話しを進めたいと思います。

 

環境イメージ

 

f:id:hirolovesbeer:20121207165338p:plain

問題点

  1. realhostip.comが使われている
  2. Ajaxが使われている
  3. httpsが使われている
  4. NATが挟まっている

解決策

「ReverseProxyを間に挟む」

 

ReverseProxy環境イメージ

f:id:hirolovesbeer:20121207165439p:plain

ReverseProxy設定

 

  1. CentOS 環境なので、yum install httpdとかはapacheを入れる
  2. /etc/httpd/conf.d/rproxy.confとかに以下を記述
  3. 10.10.0.10
  4. cloud-gate.hogefuga.jp
  5. 10.10.0.151

 

Listen 10.10.0.10:8888
<virtualhost 10.10.0.10:8888="">
  ServerName    10.10.0.10
  ErrorLog      logs/ssl_error_log
  Customlog     logs/ssl_access_log combined

  ProxyPass /client http://10.10.0.10:8080/client     <- 10.10.0.10:8888/clientへのアクセスを8080へと飛ばす
  ProxyPassReverse /client http://10.10.0.10:8080/client

  SSLProxyEngine On     <- ConsoleProxyへのアクセスがhttpsの為にSSLProxyEngineをonする
  SSLProtocol all -SSLv2

  ProxyPass /ajaximg https://10.10.0.151/ajaximg
  ProxyPassReverse /ajaximg https://10.10.0.151/ajaximg
  ProxyPass /resource https://10.10.0.151/resource
  ProxyPassReverse /resource https://10.10.0.151/resource
  ProxyPass /ajax https://10.10.0.151/ajax
  ProxyPassReverse /ajax https://10.10.0.151/ajax

  ExtFilterDefine console_proxy mode=output cmd="/bin/sed -e 's,https://10-10-0-151.realhostip.com/,http://cloudstack-gate.hogefuga.jp:8888/,g'" <- 表示されるHTMLを無理矢理書き換えるフィルタ

  <location>
    AddOutputFilterByType console_proxy text/html
  </location>
</virtualhost>

NATの設定

 

SEILの設定に以下を追加
# nat snapt add protocol tcp listen 8888-8888 forward 10.10.0.10 8888-8888 enable interface lan1
 
 

設定の結果

http://cloud-gate.hogefuga.jp:8888へとアクセスするとManagementサーバのReverseProxyへとアクセスし、
さらに8080ポートへと通信が転送され、管理WebUIへとアクセスができます。
「ReverseProxyの設定」と「NATの設定」でNAT環境かのホストに対するWebコンソールがつかめました。
 
過去のMLの内容などをみると、VPN張ればいいじゃんとか言う案もある様ですが、それはそれは敷居が高いので今回は割愛。
ApacheのReverseProxy設定なので、敷居は下がるのじゃないかと思う次第。
 
ちなみに参考にさせていただいたのはこちら
 
 
ちなみに、ソースコード(ConsoleProxy.java)を読むと
/getscreen
/resource/
/ajaximg
の4つに対するハンドラが登録されているので、「/getscreen」もケアしてあげた方がいいかもですが時間ができたら検証します。

 

CentOS6.2でLXC

昨年末にCentOS6.2でLXCを動かしたので、そのメモ。

 

参考にさせていただいたのは、こちらのサイト。

http://d.hatena.ne.jp/enakai00/20110529/1306658627

 

 

$ uname -a

Linux cent-6.2 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux

 

+ 必要な物のインストール

# yum groupinstall "Development Tools" 
# yum install libcap-devel 
# yum install docbook-utils-pdf

 

+ LXCの入手

# wget http://lxc.sourceforge.net/download/lxc/lxc-0.7.5.tar.gz 
# tar -xvzf lxc-0.7.4.5.tar.gz 
# cd lxc-0.7.5 
# ./configure 
# make 
# make install 
# mkdir -p /usr/local/var/lib/lxc


+ lxc-checkconfig

[root@cent-6 lxc-0.7.5]# which lxc-checkconfig
/usr/local/bin/lxc-checkconfig
[root@cent-6 lxc-0.7.5]# lxc-checkconfig
Kernel config /proc/config.gz not found, looking in other places...
Found kernel config file /boot/config-2.6.32-220.el6.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/local/bin/lxc-checkconfig

 

+ まとめ

CentOS 6.2だとあっさり入りました

設定などは別にまとめましょうかねぇ