先日、Windows版のPodman.exeでポッドを起動してみました。
ポッドで動かしているWebアプリにアクセスするには、podmanのネットワークを使用する必要があると思いますが。
Windows版の場合、WSLを通じてアクセスする必要があるため、ベアメタルであるPodmanマシンのIPアドレスを調べる必要がある感じです。(他の方法は未調査
まあ勉強も兼ねて、PodmanマシンのIPアドレスを調べる方法を記録したいと思います。
Podmanマシンのコンソールで調べる場合
ベアメタルとして、Fedora Version 36が動いているのは、前回確認済みです。※22.10.27現在
podman machine ssh
Fedoraということで、ipコマンドで調べられそうですが。
どうもインストールされていないようです。
dnfでnet-toolsをインストールすれば、ifconfigコマンドで調べられそうです。
sudo dnf update
sudo dnf install -y net-tools
ifconfig
こちらの実行例では、eth0のIPアドレスとして、172.18.200.46が割り当てられていることがわかります。
Podmanマシンはその名の通り、Podmanが管理する仮想マシンということで、削除して作り直したり、動的に生成する場合があります。よって、手動でツールをインストールするのは、手間がかかり、問題があります。
またIPアドレスの抽出を自動化したい場合、オーバーヘッドが生じてしまいます。
独自に、何か別の手を考えてみました。
/proc/net/fib_trieファイルからIPアドレスを得る
ifconfigコマンドを使用して、正解のIPアドレスがわかりましたので。
net-toolsをインストールしなくても、なんとかIPアドレスを取る方法を考えてみたいと思います。
Linuxカーネルの状態が格納された、procファイルシステムから、IPアドレスが得られないかどうか、試してみました。
cat /proc/net/fib_trie
ふむふむ。この中に、IPアドレスが隠れていそうです。
WSLで使用するIPアドレスは、第1オクテットが172で始まるプライベートアドレス
という特徴があります。この特徴を利用して、fib_trieテキストの各行をパターンマッチングして、IPアドレスを抽出するコマンドを作ってみようかと。
・・・・
すこし違うかも
・・・・
結果的に私が作成したコマンドは、このような感じです
cat /proc/net/fib_trie | sed -e 's/^[ \-\|\+]*[ \-]*//' | grep '[\d]*\.' |grep -v -e '0.0.0.0' -e '^127\.[\d]*' -e '\/' -e '\.0$' -e '\.255$'
※22.11.25修正:IPアドレスを取り出す構文に不具合がありましたので修正しました。不具合の内容:IPアドレスが0で終わる場合、正しく取り出せませんでした。構文に\.を追加しました。
パイプで連結してあるため長いですが。ざっとご説明しますと
- sedコマンドで、行頭の +– や|–を除去
- grepコマンドで、数字のみ抽出
- grep -vコマンドで、ネットワークアドレス(~.0)とブロードキャストアドレス(~.255)を除外
正解の値が抽出されていますが、2行あるのは、MainとLocalの2つのセクションに、それぞれ入っているためだと思います。
値が同一ですので、問題ないものとして、最後に抽出されたものを正解の値として使用したいと思います。
Windows側からPodmanマシンのIPアドレスを得るには
Podmanの仕様上、inspectコマンドでIPアドレスを得られるらしいのですが。Windows版は実装されていない感じでした。
よって、実装されるまでの間のつなぎとして、別の方法を考えてみます。
先程の手段で、Podmanマシンのコンソール内でIPアドレスを取り出す事ができました。次のステップとして、Windowsのコマンドラインで取り出してみます。
コマンドプロンプトを実行
cmd.exe
FOR構文を使って、コマンドの実行結果を抽出しようと思います。
podman machineコマンドでsshを起動し、先程作成したIPアドレスの抽出コマンドを実行、環境変数にセットします。
FOR /F %i in ('podman.exe machine ssh "cat /proc/net/fib_trie | sed -e 's/^[ \-\|\+]*[ \-]*//' | grep '[\d]*\.' |grep -v -e '0.0.0.0' -e '^127\.[\d]*' -e '\/' -e '\.0$' -e '\.255$'"') DO set IPADR=%i
FOR構文を使用する都合上、podman.exeコマンドのパスは、環境変数PATHに追加しておく必要があります。
Podman Ver.4.3.0をインストールした場合、自動的にPATHが追加されるため、特になにかする必要はありません。
実行結果を見ますと、ベアメタルのコンソールで実行した時と同様、MainとLocal分の2回、IPアドレスが抽出されて、環境変数IPADRにセットされました。
ふう。
とりあえずこれで完成とさせて頂きます。
お疲れ様でした!
Windows版のPodman.exeにて、ベアメタルであるPodmanマシンのIPアドレスを抽出してみました。
inspectコマンドで調べられない状況のため、苦肉の策ですが。
procファイルシステムからIPアドレスを取り出したため、Linuxカーネルの仕様が変わらない限り、ベアメタルであるFedoraのバーションが今後変わっても、抽出できると思います。
またWSLでは172から始まるプライベートアドレスが使用されていますが、作成したスクリプトは、ネットワークアドレスとブロードキャストアドレスを除外することで、結果的に172で始まるIPアドレスを取り出せている感じです。
次回は、取り出したIPアドレスを使用して。
WSL越しに、スマートフォンからPodmanのWebアプリケーションにアクセスできるようにしてみたいと思います。
ではまた!
※22.10.27追記:
記事の続きが御座います。
こちらのバッチファイルで、ポッドの起動・ポートフォワード・ファイアウォールの開放が可能になりました。