📶
k9sでEKSノードへSession Manager接続する
まずはこちらをご覧ください

このようにk9sから直接EKSノードへSession Manager経由で接続できる仕組みを作りました
Ctrl+Nを押すだけでノードへ接続できるため、とても快適です
動機
EKSノードの内部を調査したいとき、以下のようなステップを踏んでいました
- kubectlやk9sで異常なノードの情報を調べる
- 得られた情報をコピー、EC2コンソールで貼り付け
- Session Manager接続
この一連の動作が手間なので、k9sのノード一覧から接続できるようにしました
前提条件
- k9sがインストールされていること(筆者環境は
v0.50.15) - Session Manager経由でEKSノードへ接続できること
プラグイン
k9sのプラグイン機能を使っています
~/.config/k9s/plugins/ssm-node.yaml
plugins:
session-manager-connect:
shortCut: Ctrl-N
description: Session Manager Connect to EKS Node
scopes:
- nodes
command: bash
background: false
args:
- -c
- |
NODE_DNS="$NAME"
PRIVATE_IP=$(echo "$NODE_DNS" | sed 's/ip-//' | cut -d'.' -f1 | tr '-' '.')
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=private-ip-address,Values=$PRIVATE_IP" \
--query 'Reservations[].Instances[].InstanceId' \
--output text)
aws ssm start-session --target "$INSTANCE_ID"
ポイントは以下
- 以下のフローで接続しています
-
$NAMEでノード名を取得 - ノード名からprivate ipを取得
- private ipからインスタンスIDを取得
- 取得したインスタンスIDからSession Manager接続
-
-
$NAMEで選択したノード名を利用できます - Ctrl+Nキーで接続出来ます
helpページ
にキーバインドとdescriptionが表示されます

最後に
EKSノードへの接続が楽になってよかったです
プラグインといっても裏でスクリプトを実行しているだけなので、汎用性はとても高いと思いました
Q&A
プラグインはどこに配置すればいい?
こちらを参照ください
どうやら以下のようです
$XDG_CONFIG_HOME/k9s/plugins$XDG_DATA_HOME/k9s/plugins$XDG_DATA_DIRS/k9s/plugins
またk9s infoでプラグインやその他諸々の配置を確認することができます

プラグインはどうやって作成すればいい?
こちらを参照ください
ノード名などを変数として利用できるのが便利ですね
Discussion