DigitalOcean入門3 Dropletのハードウェアとネットワーク構成

 Cloud, DigitalOcean

ども、takiponeです。DigitalOcean入門の3回目では、Dropletで利用できるハードウェアとネットワーク構成について見ていきます。

おさらい

Dropletのハードウエア構成は、サイズごとにCPU/メモリ/ディスクサイズが定められています。ディスクは現時点では1台につき1本のみ、ネットワークはデフォルトでグローバルIPアドレスを割り当てるNICと、オプションでプライベートIPアドレスを割り当てるNICがあります。

ハードウエアとネットワーク

DropletはKVMベースの仮想マシンなので、VirtIOが有効の場合ディスクのデバイスファイル名は/dev/vda、ネットワークインターフェースは物理マシンと同様eth0(Ubuntu 2013.10の場合)です。

cpuinfolspcihdparm -tの結果を貼っておきます。ごく一般的なKVMゲストですね。

root@web1:~# cat /proc/cpuinfo  
processor    : 0  
vendor_id    : GenuineIntel  
cpu family    : 6  
model        : 2  
model name    : QEMU Virtual CPU version 1.0  
stepping    : 3  
microcode    : 0x1  
cpu MHz        : 1999.998  
cache size    : 4096 KB  
fpu        : yes  
fpu_exception    : yes  
cpuid level    : 4  
wp        : yes  
flags        : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl pni vmx cx16 popcnt hypervisor lahf_lm  
bogomips    : 3999.99  
clflush size    : 64  
cache_alignment    : 64  
address sizes    : 40 bits physical, 48 bits virtual  
power management:  
root@web1:~# lspci  
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)  
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]  
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]  
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)  
00:02.0 VGA compatible controller: VMware SVGA II Adapter  
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device  
00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device  
root@web1:~# hdparm -t /dev/vda

/dev/vda:
 Timing buffered disk reads: 880 MB in  3.00 seconds = 292.85 MB/sec
root@web1:~#  

ネットワーク設定は、Droplet作成時にグローバルIPアドレスが割当られ、静的アドレスとして OSに設定されます。静的アドレスでの設定なので、PowerOff/RebootしてもDropletを破棄するまではIPアドレスが変わることはありません。

/etc/network/interfacesの例

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo  
iface lo inet loopback

# The primary network interface
auto eth0  
iface eth0 inet static  
        address 162.243.XXX.XXX
        netmask 255.255.255.0
        gateway 162.243.XXX.1
        dns-nameservers 8.8.4.4 8.8.8.8 209.244.0.3

静的設定は、AWS EC2とは異なるところ(EC2は一部を除き、DHCPで設定)ですね。スナップショットから新しいDropletをデプロイするときにどのように構成ファイルに手が入るのか気になるところです。ethtool周りなど、手動で追加した設定が消えたりしないかがちょっと心配です。 DNSサーバーは、外部サーバーにお任せのようです(8.8.4.4/8.8.8.8はご存知Googleの公開サーバー、209.244.0.3Level3のDNSサーバー)。
ルーティングは、AWSのメタデータサーバー(169.254.169.254でHTTPアクセスできる特殊な設定)はありません。参考にrouteコマンドの結果を貼っておきます。

root@web1:~# route -n  
Kernel IP routing table  
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
0.0.0.0         162.243.XXX.1    0.0.0.0         UG    0      0        0 eth0  
162.243.XXX.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0  
root@web1:~#  

グローバルIPアドレスが静的NATなしで直にゲストOSから見えるのは分かりやすくていいのですが、AWSのEIPのように、Droplet間での付け外しはできないようです。 そのため、他のホストからの接続先としては、IPアドレスを直接使わずに別途Dropletに手持ちのドメインを割り当てるDNSサービスとの組み合わせが現実的かもしれません。ファイヤーウォールなど、IPベースでしか指定できない機能の運用はそれなりに手間がかかりそうです。DNSサービスも折りをみて触ってみたいと思います。

現時点では2つ目のIPアドレスを付与する機能はないので、バーチャルホストなど一部のサーバー構成を組むときには注意する必要があります。

"共有型"プライベートネットワークの追加

既定の設定では、DropletにつきNIC 1つおよびグローバルIPアドレス1つが付与されますが、オプションでプライベートIPアドレス1つを割り当てるNICを追加することが可能です。 見出しに"共有型"と示した通り、このIPアドレスは同一リージョンの他のDropletと同一のネットワークセグメントで提供されるため、インターネットからは隔離されたという意味で"プライベート"と考えてください。 仮想化/クラウドのマルチテナント環境で言う一般的な"プライベート"で連想されるシングルテナントの独立したネットワークにはなっていません

また、プライベートネットワークの追加は、New York 2リージョンとAmsterdam 2リージョンでのみ設定できます。

プライベートネットワークの追加は、以下の2通りがあります。

  • Droplet作成時のウィザードで有効にする
  • DropletがPowerOffのときに[Settings]タブで有効にする

どちらの場合でも、Dropletからはeth1として認識されますが、Droplet作成後の追加の場合OSの設定ファイルを自分で作成する必要があります(Ubuntu/Debianであれば/etc/network/interfaces、CentOS/Fedoraであれば/etc/sysconfig/network-scripts/ifcfg-eth1)。

Dropletの作成後に追加する画面は、以下になります。

プライベートネットワークのセグメントは、New York 2リージョンでは10.128.0.0/16のアドレス空間から払い出されました。他のリージョンでは試していませんが、同一リージョン内Droplet同士でゲートウェイなしのL2の通信を行う形態です。

root@web1:~# ifconfig  
eth0      Link encap:Ethernet  HWaddr 04:01:0e:71:3b:01  
          inet addr:162.243.XXX.XXX  Bcast:162.243.XXX.255  Mask:255.255.255.0
          inet6 addr: fe80::601:eff:1111:1111/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:352 errors:0 dropped:0 overruns:0 frame:0
          TX packets:194 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:32863 (32.8 KB)  TX bytes:23988 (23.9 KB)

eth1      Link encap:Ethernet  HWaddr 04:01:0e:71:3b:02  
          inet addr:10.128.YY.YY  Bcast:10.128.255.255  Mask:255.255.0.0
          inet6 addr: fe80::601:eff:1111:1111/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:468 (468.0 B)  TX bytes:578 (578.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
root@web1:~# traceroute 10.128.ZZZ.ZZZ  
traceroute to 10.128.ZZZ.ZZZ (10.128.ZZZ.ZZZ), 30 hops max, 60 byte packets  
 1  10.128.ZZZ.ZZZ (10.128.ZZZ.ZZZ)  1.069 ms  0.995 ms  0.981 ms
root@web1:~# ping 10.128.ZZZ.ZZZ  
PING 10.128.ZZZ.ZZZ (10.128.ZZZ.ZZZ) 56(84) bytes of data.  
64 bytes from 10.128.ZZZ.ZZZ: icmp_seq=1 ttl=64 time=0.427 ms  
64 bytes from 10.128.ZZZ.ZZZ: icmp_seq=2 ttl=64 time=0.499 ms  
64 bytes from 10.128.ZZZ.ZZZ: icmp_seq=3 ttl=64 time=0.498 ms  
64 bytes from 10.128.ZZZ.ZZZ: icmp_seq=3 ttl=64 time=0.498 ms  
^C
--- 10.128.ZZZ.ZZZ ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms  
rtt min/avg/max/mdev = 0.427/0.474/0.499/0.042 ms  
root@web1:~#  

Dropletの破棄(Destroy)

Dropletの破棄は、管理メニューの[Destroy]から行います。注意が必要なのは、[Scrub Data]オプションの有無です。有効にすると、Dropletが使っていたディスクがゼロ埋めされます。本番用途や機密性が求められる場合は有効にし、破棄するようにしましょう。

こちらの既定値については、昨年末にちょっと揉めたようです。

Transparency Regarding Data Security | DigitalOcean

また、ユニークな特性として、一度破棄したDropletのデータは破棄後48時間の期限付きでサルベージすることができます。Dropletの作成時のイメージ選択で[Destroyed Images]から選択できます。

まとめ

いかがでしたでしょうか。AWS EC2と比べると、バリエーションが少ないですが、個人的には必要最小限のシンプルな構成という印象を受けました。

次回は、Dropletの運用としてバックアップ周りについて解説します!

おまけ

DigitalOceanのTwitterアカウントから、10ドルのクーポンが発行されています。クレジットカードの登録は必要ですが、DigitalOceanを手軽に始めるにはいい機会なのではないでしょうか。



次の記事 :

DigitalOcean入門4 Dropletの運用 バックアップ編


前の記事 :

DigitalOcean入門2 サインアップとDropletの作成