ビビリフクロウの足跡

とあるインフラSEの勉強&備忘ブログ

kata containers + firecrackerを試してみた

コンテナのセキュリティレベルを上げるためにホストOSとの分離レベルをあげようというモチベーションで開発されたプロダクトがいくつかあります。gVisorやrunV、kata containersなどがそれです。今回はその中のkata containersを検証してみました。kata containersはfirecrackerというAWSがFargateやLambdaの実行環境として利用しているVMMを利用することもできるので、合わせて使ってみたいと思います。

前提

  • Ubuntu 18.04 LTS のCloud image

検証手順

まず、docker ceをインストールします。kata containersのマニュアルに従い、バージョンは最新ではなく、18.06を用います。

sudo apt-get update
sudo apt-get -y install apt-transport-https \
                        ca-certificates \
                        curl \
                        software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable"
sudo apt-get install docker-ce=18.06.3~ce~3-0~ubuntu

次にkata containersとfirecrackerのバイナリをDLし、展開します。

wget https://github.com/kata-containers/runtime/releases/download/1.5.0/kata-static-1.5.0-x86_64.tar.xz
sudo tar -xvf kata-static-1.5.0-x86_64.tar.xz -C /

Dockerのデフォルトruntimeの設定をkata containers + firecrackerとします。

sudo su -
cat <<EOF > /etc/docker/daemon.json
{
  "default-runtime": "kata-fc",
  "runtimes": {
    "kata-fc": {
      "path": "/opt/kata/bin/kata-fc"
    }
  },
  "mtu": 1450,
  "storage-driver": "devicemapper"
}
EOF
exit
sudo systemctl daemon-reload
sudo systemctl restart docker

最後に必須カーネルモジュールの読み込み設定をしてインストールは完了です。

sudo su -
cat <<EOF > /etc/modules-load.d/vhost_vsock.conf
vhost_vsock
EOF
exit
sudo modprobe vhost_vsock

ではnginxを起動して、ホストからnginxプロセスが見えるか確かめてみましょう。

sudo docker run -d nginx
sudo ps -ef | grep nginx

grepコマンドの結果のみになっているはずです。ちなみに、containerdで同じことをやると以下のようになりました。

root      8216  8194  0 22:02 ?        00:00:00 nginx: master process nginx -g daemon off;
systemd+  8275  8216  0 22:02 ?        00:00:00 nginx: worker process
tatsuno+  8278  5237  0 22:02 pts/0    00:00:00 grep --color=auto nginx