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に接続できなくなったという際にはネットワーク設定をご確認ください。