仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Multipassをもう少し深掘り(公開鍵認証編)

前回、Multipassを使って手元の環境でKubernetesを動かすという記事を書きました。

tech.virtualtech.jp

今回は作ったクラスターをログインせずに使えたら便利だよねという小ネタです。

Multipass VMにssh公開鍵認証

MultipassでVMを作るには次のような感じでコマンドを実行します。 イメージは指定しない場合、LTSタグが指定されたUbuntuイメージが使われます(現在はUbuntu 20.04LTS)。

% multipass launch -n foo
(基本のVM作成方法)

% multipass launch -c2 -m4G -d16G -n foo 20.04
(VMに任意のvCPU、メモリー、ストレージ、イメージを設定して起動)

現在のUbuntu Serverはデフォルトでcloud-initがインストールされているので、これを応用するとVMにsshコマンドを使って接続できます。これを設定する利点としてはVMへのファイルのやり取りがしやすくなるという点です。

実はこれ、launchコマンドを説明するドキュメントには載っていません。でも、上手く動きます。

% multipass launch -n foo --cloud-init - <<EOF   
ssh_authorized_keys:
  - $(cat ~/.ssh/id_rsa.pub)
EOF

multipass launchコマンドを実行してから数十秒程度待ってから、VMが起動したか確認してみます。問題なく起動したようです。

% multipass list
Name                    State             IPv4             Image
foo                     Running           192.168.205.31   Ubuntu 20.04 LTS

sshコマンドを使って、VMにアクセスしてみましょう。デフォルトユーザーは他のクラウドイメージと同様、ubuntuユーザーです。

% ssh -i ~/.ssh/id_rsa ubuntu@192.168.205.31
...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.205.31' (ED25519) to the list of known hosts.
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-105-generic aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Mar 29 16:41:09 JST 2022

  System load:             0.28
  Usage of /:              8.3% of 15.34GB
  Memory usage:            5%
  Swap usage:              0%
  Processes:               122
  Users logged in:         0
  IPv4 address for enp0s1: 192.168.205.31
  IPv6 address for enp0s1: fd7e:8daa:f56:3f94:5054:ff:fe38:49c0

0 updates can be applied immediately.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@foo:~$ 

Multipass VMでmicrok8sを動かしてホストでクラスタにアクセス

sshができるということは、scpコマンドなども利用できます。 前回のようにmicrok8sを動かしてkubeconfigをエクスポートし、ホストからアクセスしてみましょう。 次のように設定していきます。

% sudo snap install microk8s --classic --channel=1.22/stable
% sudo microk8s enable rbac dns
% sudo microk8s config > /home/ubuntu/microk8s-config

あとは出力したkubeconfigを手元にコピーするだけです。

% scp -i ~/.ssh/id_rsa ubuntu@192.168.205.31:~/microk8s-config /Users/ytooyama/Desktop/

コピーしたkubeconfigファイルを使って、クラスターにアクセスしてみましょう。

% kubectl get no --kubeconfig=/Users/ytooyama/Desktop/microk8s-config

or 

% export KUBECONFIG=/Users/ytooyama/Desktop/microk8s-config:/Users/ytooyama/.kube/config
% kubectl get no
NAME   STATUS   ROLES    AGE   VERSION
foo    Ready    <none>   11m   v1.22.6-3+7e02437f65494f

このような感じです。

Multipass VMはコマンドを使って簡単に停止できますし、WindowsやmacOSの場合はMultipass VMの操作をGUIで行うツールがインストールされます。GUIを使うとMultipass VMの作成はできませんが、VMの停止や起動、シェルへのアクセスが可能になっています。

使う時だけ起動して、使わない時は停止しておけばマシンリソースの節約になります。まさにクラウドっぽい使い方で手元のマシンにVMを作成できるということです。あまり用件が厳しくないアプリを動かすのであれば、わざわざ仮想マシンソフトウェアを開いてVMを作成し、Ubuntuを手動でインストールなんてことをせずに、multipass launchコマンドでVM環境が出来上がります。

Multipassは、入れておくと便利なツールです。