pasta (Pack A Subtle Tap Abstraction)
Podmanのrootlessコンテナ向けに使われる、ユーザー空間ネットワークツール。「Pack A Subtle Tap Abstraction」の略で、passtプロジェクト(Plug A Simple Socket Transport)が提供する。旧来のslirp4netnsの後継として位置づけられ、Podman 4.4.1から利用可能になり、Podman 5.3以降はrootlessコンテナのデフォルトネットワークツールになっている。 #container #linux #network
仕組み
対象のnetwork namespace内にtapデバイスを作り、そこへの入出力をホスト側のL4ソケット(TCP/UDP)にマッピングすることで通信を成立させる。CAP_NET_RAWのようなケーパビリティを必要としない。
ローカルのTCP/UDP通信については、tapデバイスを経由せず直接L4ソケット同士をsplice(2)(TCP)やrecvmmsg/sendmmsg(UDP)でつなぐバイパス経路を持ち、パフォーマンスを稼いでいる。対応プロトコルはTCP・UDP・ICMP/ICMPv6 echo。
slirp4netnsとの違い
slirp4netnsはNAT越しに独自のネットワーク設定を作るのに対し、pastaはホストのIPアドレス・ルート・MTUをそのままコンテナのnamespaceに反映する(ホストのL2/L4状態をコンテナのL3 namespaceに「貼り付ける」イメージ)。NATを挟まない分パフォーマンスが高く、IPv6サポートや設定のシンプルさでも優位とされる。
設定
containers.conf(5)の[network]セクションのpasta_optionsキーでデフォルトオプションを設定できる。
出典
- passt - Plug A Simple Socket Transport
- passt(1) manpage
- Podman 5.8: Rootless Networking with Pasta
- Use Pasta Networking with Podman on Oracle Linux
- podman-network — Podman documentation