📶

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のプラグイン機能を使っています
https://k9scli.io/topics/plugins/

~/.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

プラグインはどこに配置すればいい?

こちらを参照ください
https://k9scli.io/topics/plugins/

どうやら以下のようです

  • $XDG_CONFIG_HOME/k9s/plugins
  • $XDG_DATA_HOME/k9s/plugins
  • $XDG_DATA_DIRS/k9s/plugins

またk9s infoでプラグインやその他諸々の配置を確認することができます

プラグインはどうやって作成すればいい?

こちらを参照ください
https://k9scli.io/topics/plugins/

ノード名などを変数として利用できるのが便利ですね

Discussion