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 から接続。
詳細は公式ドキュメントを参照。
Discussion