lxc on cloud
IaaS上にプライベート環境を作り
  一部を外部に公開する




           HiganWorks LLC id:sawanoboly
※2012-10-25 18:00∼19:30
ファーストサーバさん社内勉強会向け発表資料
概要
1.グローバルIPが使えるIaaS上にUbuntuの仮想マシンを
 作成する

2.lxcをインストールして、内部にプライベートIPのネッ
 トワークを持つ

3.コンテナを作成して、NAPTネットワークに接続

4.内部コンテナのサービスを外部に公開する

                2
おことわり


大体の質問は『やってみたら?』と回答されますので
ご了承してください。

やってみて、よく分からんといった部分は解説できる
かもしれません。




             3
影響元

Cucumber-chef
http://www.cucumber-chef.org/

Opscode ChefのCookbooksをテストするために
Chefサーバ/クライアント環境を
単一のEC2インスタンス上に作成する



                          4
1. グローバルIPが使えるIaaS上に
Ubuntuの仮想マシンを作成する




         5
UbuntuでGIPなIaaS


Amazon EC2

RackSpace

Linode

etc.... つーか沢山あります



                6
で、今回採用するのは

http://z-cloud.jp/




                     仮想マシンの作成削除が楽ちんで固定GIPだから
                           7
マシン作成&12.04LTSへ




       (do-release-upgrade !)


       8
2. lxcをインストールして、
内部にプライベートIPのネットワークを持つ




           9
lxc導入
Ubuntuのガイド通り
https://help.ubuntu.com/12.04/serverguide/lxc.html




                           10
aptで導入の特徴
ツール完備(/usr/bin/lxc-*)、デーモン自動起動

テンプレートつき(/usr/lib/lxc/templates/lxc-*)

プライベートネットワークNAPT付きがスタート
(lxcbr0 + iptables)

apparmorが コンテナ => 親ホストの干渉を制限
(※動作が妙に遅くなったらappaomorを止めてもOK)

                      11
LXC_BRIDGEを掘り下げる
 ※/etc/default/lxc より

 USE_LXC_BRIDGE="true"

 LXC_BRIDGE="lxcbr0"
 LXC_ADDR="10.0.3.1"
 LXC_NETMASK="255.255.255.0"
 LXC_NETWORK="10.0.3.0/24"
 LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
 LXC_DHCP_MAX="253"




                         12
bridge & iptables
  ブリッジが作成され、仮想スイッチのセグメント作成
  iptablesにマスカレード設定、外部到達OK!

# brctl show
bridge name" bridge id"   "   STP enabled" interfaces
lxcbr0! !    8000.9e5e1368c6aa!o
                              n

# ip addr show dev lxcbr0
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
state UP
    inet 10.0.3.1/24 brd 10.0.3.255 scope global lxcbr0

# iptables -t nat -L POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target     prot opt source                 destination
MASQUERADE all -- 10.0.3.0/24               anywhere


                                      13
だいたいのネットワーク図




     14
この環境を言い換える

自宅に固定IP引いてルータつけた環境に酷似

ルータから自宅サーバに静的ポートフォワード(w) と
かでWEB公開しちゃったりする、あの環境

その自宅サーバが仮想で増やし放題&複製し放題です
よと


            15
3. コンテナを作成して、
NAPTネットワークに接続




      16
コンテナ作成
テンプレートからコマンドひとつ。(CN=コンテナ名)




            17
デフォルトでlxcbr0に参加
/etc/lxc/lxc.conf より
lxc.network.type=veth
lxc.network.link=lxcbr0
lxc.network.flags=up


 起動したコンテナはとりあえずDHCPから 10.0.3.0/24
 内のIPを付与

 lxcbr0を通してホストの”10.0.3.1”と通信可能


                          18
コンテナ内で疎通




   19
4. 内部コンテナのサービスを
   外部に公開する




       20
要は自宅サーバ




   21
iptables設定例
   グローバルIPのTCP/8080をコンテナのNginx(TCP/80)
   にフォワード

   今回のコンテナIPは 10.0.3.172
# iptables -t nat -A PREROUTING -p tcp --dst 210.152.xxx.xxx --dport
8080 -j DNAT --to-destination 10.0.3.172:80

※自分のPCからcurl
$ curl -s http://210.152.xxx.xxx:8080/ | grep title
<title>Welcome to nginx!</title>




                                   22
Nginx設定例
                  upstream chef_server {
バックエンドにChef API   }
                    server 10.0.3.172:4000 fail_timeout=0;


                  server {
親ホストにaptでnginx      listen 80;
                    server_name one.chefserver.net;
                    access_log /var/log/nginx/chef-
                  server.access.log;
名前ベースで別コンテナと        error_log /var/log/nginx/chef-
                  server.error.log warn;
いう制御もOK             root /usr/share/chef-server-webui/public;

                      location @chef_server {
                        proxy_set_header Host $http_host;
SNIで名前ベースSSLもOK         proxy_pass http://chef_server;
                      }
                      location / {
                        try_files $uri @chef_server;
                      }
                  }



                      23
まとめや補足
Ubuntu12.04が作れるIaaSを選びましょう

マシン作成削除が簡単なIaaSで、さらに作成削除が用意なコ
ンテナを作っちゃあ壊しでいろんな構成を試せる

何台コンテナがあっても、お値段はマシン1台の稼働分でOK
終わったらDestroy、500円でお腹いっぱい

でかいDisk容量を生かして普通にホスティング商売してもOK
(※VM1台毎に限界までリソースつかっちゃおう、コンテナ
別のSSLもイケる)

                  24
END
       lxc on cloud
      IaaS上にプライベート環境を作り
        一部を外部に公開する




                 HiganWorks LLC id:sawanoboly
      ※2012-10-25 18:00∼19:30
      ファーストサーバさん社内勉強会向け発表資料

Lxc on cloud