RubyMine 他 JetBrains IDE を k8s の Pod に対して接続する


VSCode Remote Containers ならば kubectl exec できる状況なら VSCode を簡単に attach することができるが、RubyMine 他 JetBrains IDE だとどうやら SSH 越しでしか方法がないようだ。
そこで、kubectl port-forward を利用して、k8s の Pod に SSH 越しに接続する方法を試してみたので備忘録として記録する。

といっても、SSH 接続さえできればあとは単に IDE で SSH 接続情報を入力するだけなので、実質 k8s の Pod に対して SSH できるようにする方法の記録となる。

当然ながら Image によってパッケージマネージャや存在するユーザなどが異なるため、適宜読み替える必要がある。
以下は ghcr.io/mtsmfm/devfiles/ruby:3.1 の Image を利用している例となる。

1. ssh-keygen して GitHub に登録

Pod への受け渡しが GitHub 越しのほうが楽なので登録する。
既に SSH 公開鍵を登録している場合はスキップしてよい。

ssh-keygen -t ed25519 -C "メールアドレス" -f ~/.ssh/id_k8s_test

その後、cat ~/.ssh/id_k8s_test.pub の結果を https://github.com/settings/ssh/new から登録する。

2. sshd を Pod 上にインストールする

sudo apt-get update
sudo apt-get install openssh-server -y

3. ~/.ssh/authorized_keys の準備をする

kubectl port-forward するので、別にパスワードなしでログインを許可してもいい気はするが、一応 SSH key を利用することとする。

mkdir ~/.ssh
curl https://github.com/<github user 名>.keys > ~/.ssh/authorized_keys
chmod 750 ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4. sshd を起動する

-e で標準出力にエラーが出るので、デバッグ用に便利かもしれない。

sudo mkdir /var/run/sshd
sudo /usr/sbin/sshd -D -e

5. port-forward する

kubectl port-forward <pod 名> 2222:22

ローカル側のポート番号 (今回は 2222) は、何かと重複しているようであれば変更してもよい。

6. SSH できることを確認する

ssh user@localhost -p 2222 -i ~/.ssh/id_k8s_test

これが疎通しないようではどうしようもない。
逆にこれがうまくいっていれば JetBrains IDE の接続でエラーになることはないと思われる。たぶん。

7. JetBrains IDE から SSH する

Remote Development -> SSH -> Connect via SSH から接続。

詳細は公式ドキュメントを参照。

https://www.jetbrains.com/help/idea/2021.3/remote-development-a.html#launch_gateway