Windows版Microk8sで作ったk8sノードにssh接続できるようにする

Windows版Microk8sではKubernetesを構築するにあたり、Multipassを使用して仮想マシン上のUbuntu環境を管理する。

通常はMultipassのサブコマンドだけで事足りるのだが、CLIではなくプログラムなどからsshで直接操作したい場合がある。

これには通常sshで公開鍵認証でアクセスできるようにする場合と同様に、仮想マシン上のUbuntu環境に公開鍵を登録するだけで可能になる。

具体的な手順は以下の通り。手順は全てWindows上のPowerShellで行うことができる。

キーペアを作る

暗号化方式やキー長はここではデフォルト値を使用する。差し当たってのpasswordはubuntuとする。

実行時にキーの作成先を問われるがこれもデフォルトの$home\.ssh\id_rsaとする。

ssh-keygen -N 'ubuntu' -q

公開鍵を登録する

鍵の登録先はk8sノードのinstanceであるmicrok8s-vmになる。

multipass transferで公開鍵を送った後にmultipass shellでログオンし手作業でコピペしても良いが、以下の様にPowerShell上から作業した方が面倒がない。

multipass exec microk8s-vm -- sh -c "cat <<EOF >>~/.ssh/authorized_keys
$(Get-Content $home\.ssh\id_rsa.pub)
EOF
"

後は通常通りsshなどでログオンを試す。VM再起動時にIPアドレスが変化する可能性があるため、multipass infoから取得するのが楽だろう。

ssh ubuntu@$($(multipass info microk8s-vm --format=json | ConvertFrom-Json).info."microk8s-vm".ipv4)

以上で完了。必要に応じてscpなどでのアクセスも試す。