CoreOSにはパスワードをつけておくのが良さそうですという話

Dockerを操作するのに便利なLinuxディストリビューションのCoreOSですが、操作している途中でNICの名前が変わる現象に出くわします(私だけかも知れませんが…)。そうした時に公開鍵設定だけですと、シングルユーザモードで立ち上げる必要があるので多少不便です(CoreOSでシングルユーザモードに入る方法が掴めていないのですが…)。

ということでCoreOSを立ち上げる際にはパスワード設定も行っておくと便利かと思います。

もしCoreOSに接続できなくなった場合は、さくらのクラウドのサーバ>コンソールタブを開きます。

ここでユーザ名はcore、パスワードはあらかじめ指定したものを使います。

ログインしたら、cloud-config.yml を編集します。

$ sudo vi /usr/share/oem/cloud-config.yml

cloud-config.yml の内容は次のようになっています。

$ cat /usr/share/oem/cloud-config.yml
#cloud-config

coreos: 
  (略)
users: 
  - 
    name: core
    passwd: PASSWORD # 実際にはハッシュ化された文字列が入っています

write_files: 
  - 
    content: "[Match]\nName=en*\n\n[Network]\nAddress=133.242.55.185/24\nGateway=133.242.55.1\nDNS=133.242.0.3\nDNS=133.242.0.4\n"
    path: /etc/systemd/network/10-static.network

なお、デフォルトのネットワーク設定は次のようになっています。

$ ifconfig 
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 153.120.83.34  netmask 255.255.255.0  broadcast 153.120.83.255
        inet6 fe80::9ea3:baff:fe2c:3bc  prefixlen 64  scopeid 0x20<link>
        ether 9c:a3:ba:2c:03:bc  txqueuelen 1000  (Ethernet)
        RX packets 192  bytes 24518 (23.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 82  bytes 13175 (12.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 79  bytes 7898 (7.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 79  bytes 7898 (7.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

cloud-config.yml を見て分かる通り、write_files(ファイル書き込み指定)として、/etc/systemd/network/10-static.network に書き込みを行っています。内容としては、

$ cat /etc/systemd/network/10-static.network
[Match]
Name=en*

[Network]
Address=133.242.55.185/24
Gateway=133.242.55.1
DNS=133.242.0.3
DNS=133.242.0.4

のようになっていて、en*というNIC名に対してIPアドレス、DNSの設定を行うようになっています。これがネットワークが切れる時には次のようになっています。

en3がeth0に変わったために、IPアドレス設定がなくなっています。なので先ほどのcloud-config.ymlの

content: "[Match]\nName=en*\n\n[Network]\nAddress=xxx.xxx.xxx.xxx/24\nGateway=133.242.55.1\nDNS=133.242.0.3\nDNS=133.242.0.4\n"

content: "[Match]\nName=e*\n\n[Network]\nAddress=xxx.xxx.xxx.xxx/24\nGateway=133.242.55.1\nDNS=133.242.0.3\nDNS=133.242.0.4\n"

と変更(enをeだけにする)して、サーバを再起動するとまた接続できるようになります。変更して再起動すると次のようにネットワークが設定が適用されます。

$ ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 133.242.55.185  netmask 255.255.255.0  broadcast 133.242.55.255
        inet6 fe80::9ea3:baff:fe2a:914f  prefixlen 64  scopeid 0x20<link>
        ether 9c:a3:ba:2a:91:4f  txqueuelen 1000  (Ethernet)
        RX packets 268  bytes 32915 (32.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 66  bytes 11242 (10.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 79  bytes 7975 (7.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 79  bytes 7975 (7.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

筆者の環境だけかも知れませんが、もしCoreOSに接続できなくなったという際にはネットワーク設定をご確認ください。

おしらせ