前回のレポート
KubeCon NA 2019 レポート 第1回目はこちらをご参照ください。
https://www.valinux.co.jp/technologylibrary/eventreport/20191203/
Cloud Native Security Day
時系列は前後するが、ここで KubeCon の前日に行われた Cloud Native Security Day の内容に触れたい。
当日のスケジュールおよび資料は https://cloudnativesecurityday2019.sched.com/ にある。スポンサーが何社かついていたが、あまりスポンサー色のないイベントであった。
参加者はざっと 100人くらいであった。オープニングでは、午後にやる “open spaces” がどういうものかの説明があり (簡単にいうと structured hallway track だと言っていた)、話したいことがあれば post-it に書いて貼っておくようにと言っていた。
The Path Less Traveled: Abusing Kubernetes Defaults
Kubernetes のデフォルト設定でどんな攻撃ができるかのデモであった。冒頭で Kubernetes はデフォルトではセキュアではなく、その上で動くアプリケーションも同様であると言っていた。
Kubernetes のデフォルト設定といっても 1つに定まらないので kubeadm のデフォルト値を使っていた。kubeadm のデフォルト値はましなほうだそうである。
以下のような攻撃ができるとデモしていた。
- static pod で etcd を実行するときと同様に secrets を hostPath でマウントして etcdctl を Pod で実行して etcd から Kubernetes の認証トークンを抜き出す。強いトークンを抜き出せば何でもできる。namespace 分離は admission control なしでは不十分で、etcd は kubelet の動くノードとは違う所で動かして回避せよと言っていた。
- hostPath は公式ドキュメントでも “powerful escape hatch” と書いてあるが本当なので気を付けろと言っていた。(escape hatch は非常脱出口のことで、セキュリティバリアを回避してしまうことの比喩)
– 例として docker in docker を Pod として動かして、ノードの docker.sock を hostPath でマウントして他のコンテナをいじるなど、ノードのファイルシステムは全部アクセスできるとデモしていた。 - コンテナから抜け出す例として hostPID を有効にして privileged コンテナから nsenter で PID 1 のネームスペースに抜け出していた。
これらは当然といえばそうなのだが、これらはデフォルト設定では制限されてないというのがポイントである。結局のところ admission control でどうにかするしかないと話していた。ただ static pod には admission control が効かないからどうにかしなきゃというようなことを言っていた。
Kubernetes はセキュリティに本気で取り組み始めている。git.io/k8s-audit を見てほしい。Kubernetes はデフォルトではセキュアではないので、admission control をうまく使えといった感じでまとめていた。
MLGuard — Detecting Malicious Web Requests using a Serverless-based Machine Learning System
Frame.io の Abhinav Srivastava 氏。MLGuard というのはサーバレスの機械学習システムでウェブサイトへの攻撃を検出するものである。
このサイトは AWS の上につくったビデオを共同編集するためのサービスのようである。このサイトのために MLGuard を作ったということのようである。
WAF (web application firewall) は簡単に回避されてしまうので Anomaly Detection でやっているとのことである。サーバレスとしては AWS Lambda を使っているようだ。
アルゴリズムの話も簡単にあって、unsupervised でやっているとのこと。source IP address 毎に HTTP response コードの統計を取ったりしている。機械学習には AWS Sagemaker を使っていると言っていた。
先月報告された 527 の IP address のうち、339 がブロックされたと話していた。
open spaces
提案セッションはこんな風 (以下画像) に post-it に書かれていた。
決定されたものは各自がスマホで見れるように以下のようにツイートされていた。6部屋で各4セッションなので結構な数である。
https://twitter.com/mfdii/status/1196539279255560192
- Container Isolation runtime
最初は gVisor とか kata の話のところに行ってみたが、作る側ばかりでユーザーがいなかった。たまたまこの場にいなかっただけならよいのだが、Secure container は盛り上がらないのかもと心配になった。Cornell 大学の人は Xen ベースの何かを作っていると言っていた。 - Performance/Cost on False Positives
前のセッションにいた人 (たぶん Justin Cappos 氏) が Kernel のどの行を実行してるかプロファイルしたら何割かのコードはまったく実行されていなかったという話をまたしていた。Sysdig の人は falco などでの経験を元に話していると思われたが、セキュリティのためならユーザーは 5% くらいの性能低下は気にしないよと言っていたが、聞いてた人達は必ずしも同意してる感じでもなかった。false positive で警告を出すのは大丈夫だが protection を実行しちゃう (プロセスを止めることや通信を遮断すること) のはちょっと許されないよねと言っていた。
モニタリングしていると、1ヶ月間に 1度しか起きないような正当な動作があるそうである。確かにそういうのを Anomaly Detection で正常ケースに振りわけるのは難しいだろうなと思った。
The Devil in the Details: Kubernetes’ First Security Assessment
CNCF がスポンサーになって Kubernetes の audit (セキュリティ監査) を今年やっていると言っていた。ワーキンググループもできた (ちなみに昨年は CoreDNS, Prometheus, Envoy の監査をやったとのこと)。
Kubernetes のセキュリティを大多数の人が気にしているというサーベイ結果を示した後具体的な話になった。attacker (攻撃者) はクラスタ外部かもしれないし、既にコントロールプレーンを乗っ取って内部に入ってきているかもしれないし、攻撃コードの含まれるコンテナ経由で入ってきているかもしれないと話していた。
Threat Model 分析では、Kubernetes を p0 components (構成する各プロセス)、control families (ネットワーク、認証など)、trust zones (インターネット、etcd、worker など) といった切り口で捉え直して分析していた。ハイライトを以下のように述べていた。
- 無効なセキュリティ設定をしたユーザに warning を出すべき
- 通信を暗号化して証明書を確認するべき
- ノードがやられてもクラスタ全体に拡大しないようにするべき
- 監査に必要な情報を統一的に提供するべき
- コントローラごとの特権レベルを分離するべき
source assessment で見つかった問題のハイライトに例の kubectl cp の脆弱性 (CVE-2019-11249) も載っていた。
最後に call for action のリストが出てきた。監査で見つかった問題点が細かいアクションリストに分解されていて、なるほどこうやるのねと感心した。なお、セキュリティ監査の結果の資料は以下にある。
https://github.com/kubernetes/community/tree/master/wg-security-audit#published-documents
キーノート
キーノートセッションについては、印象に残ったもののみ簡単に紹介する。
CNCF project updates
今や数えきれないくらいある CNCF プロジェクトの最近の出来事をまとめて話す恒例のセッションである。
データベースクラスタの Vitess の人がきて Graduation Process 等を説明していた。丁度 Vitess は Graduated プロジェクトになった。
大きなユーザとして Slack と JD.com が紹介されていた。JD.com は中国の EC サイトで、Vitess で毎秒 35M クエリ出ていると言っていた。
Vitess は大規模ユーザ専用というわけではなく、例えば Nozzle というスタートアップ企業は Vitess を使ってベンダーロックインを回避した (から大規模じゃなくても使ってね) と話していた。
OPA (Open Policy Agent) は 4月に CNCF Sandbox から Incubation に昇格していたが、これもプロジェクトの人がでてきて説明していた。ポリシー制御に OPA を使うようにすることで、ポリシー記述言語が統一されるというメリットがあり、OPA は 20 のプロジェクトで使われていると言っていた。最近の OPA では、Rego というポリシー記述言語を wasm 形式 (参照: https://webassembly.org/) にコンパイルできるようになったと説明していた。
Reflections
Kelsey Hightower 氏 による初日のほぼ最後のセッションである。セッションの題名を訳するなら「回想」といったものである。Kelsey はコペンハーゲン (2018年春) の KubeCon で引退したと言いつつ毎回登場している。
いつもの様に軽妙な話術で昔話をして盛り上がっている。と思ったら、最初の KubeCon でおまえは唯一の黒人だがどう思うかと言われたという話になって急に真面目な話になった。
性別や人種でハラスメントをしてはいけないというのは KubeCon の Code of Conduct にもはっきり書かれているし、キーノートでどの会社が ダイバーシティプログラムのスポンサーになりましたといったアナウンスがされるのも恒例ではあるが、KubeCon のキーパーソンが当事者のエピソードは、はっきりとしたメッセージとして伝わったのではないかと思う。
技術イベントでなんでこんなことを言われないといけないんだという Kelsey の戸惑い (あるいは怒り) を伝えつつ、皆で協力していいものを作っていこうという話にうまくまとめていた。
E2E 5G Cloud Native Network
最初に Heather Kirksey 氏が 20年以上通信業界にいたとか自己紹介していた。NFV の展開で 2015 年頃は OpenStack で、2019年からは Kubernetes であるという図や、OpenAirInterface のロゴも出てきた。
次に China Mobile の Fu Qiao 氏が 10月31日に 50都市で 5G サービス始めたと話していた。
Edge Computing で 3rd Party App が動いているような絵が示された。
最後に Azhar Sayeed 氏 (Red Hat) がデモの構成を説明していた。モントリオールに Core control plane があって、200+ pods 動いている。
どんな感じで動いているかを grafana で説明していた。
最後に 5G のビデオ通話のデモをしていた。繋がりはしたが、とても音声といえるようなレベルではなくノイズにしか聞こえなかったが “excellent we can hear something” と言っていた。
その他セッション
Low Latency Multi-cluster Kubernetes Networking in AWS
Lyft の Paul Fisher 氏。
Lyft が AWS 用の CNI を ipvlan を使って作ったという話である。OSSになっている。
(https://github.com/lyft/cni-ipvlan-vpc-k8s)
ipvlan というのは元々 Google が作って Linux Kernel に入れたものである.トンネリング等をしないから性能的に有利といったことを言っていた。
やってることは非常にシンプルだが 、kube-proxy とか Kubernetes services を使わない等の工夫が見られる。Envoy は使ってるとのことである。AWS の NIC である ENI 毎にいくつ IP address を設定できるからインスタンスに ENI がいくつ必要であるといった話もしていた。
性能について質問があって、ipvlan の性能に関する資料があるから見てくれと答えていた。後日探してみて特にこれというものは見つからなかったが、以下では ipvlan を含む性能評価をしている。
http://machinezone.github.io/research/networking-solutions-for-kubernetes/
NHD – A Topology-Aware Scheduler for K8s for Low-Latency & HPC Applications
Viasat の Cliff Burdick 氏による発表で、HPC/NFV requirement の話から始まった。要求を満たすためにトポロジーを意識する必要があって、発表はトポロジーを意識したスケジューラが本題である。
- トポロジーの話として、NUMA の話とか core 間は QPI の帯域しかないといった話
- node matching の説明が難しい。
- 1.16 で一部がアップストリームされた。
- コードは、github.com/Viasat/nhd にある。
- NVLink もやるそうだ。
どのような用途のために NHD を開発しているのか説明がなかったが、同じ部屋で次に Telco UG の BoF があったようなので、そういうことかもしれない。
Is There a Place for Performance Sensitive Workloads in Kubernetes?
Nokia の Gergely Csatari 氏と Levente Kale 氏の発表である。5G の基地局に Edge Cloud も入れてやっている。Kubernetes の入った基地局で 5G の Radio Access Network を動かすんだと言っている。Akraino もやっている。
ノードの全部の CPU を使って、25Gbps+ の帯域が必要で、レイテンシ (RTT) が 1us 未満じゃないといけないワークロードが Kubernetes で動かせるのかという課題で、いくつか拡張を加えればできるという発表の流れだった。
こんなのを組み合わせて使ってますよといった説明をしていた。前のセッションの Topology Manager もでてきた。
CNI の話は長々とやっていた。Kubernetes の標準 CNI では Telco の要求を満たせず、Multus や Network service Mesh という選択肢もあるが、 DANM (https://github.com/nokia/danm) というのを作ったみたいでそれをお勧めしていた。
A Toolkit for Simulating Kubernetes Scheduling at Scale
JD.com の Yuan Chen 氏の発表である。JoySim というシミュレータの話で、本物のKubernetes クラスタのイベントを記録して再現することで Kubernetes クラスタの新しい設定をデプロイする前に評価できる。
最初に JD.com のアクティブユーザが 3億人だとか、今年の Singles Day には 2000億元の売り上げがあったといった規模の説明をしていた。
JoySim では master は本物を動かして、ノードは MockNodes という軽量のものでシミュレーションしているそうである。構成図を出して作りを説明していた。
シミュレータで動かしたスケジューラの応答時間のグラフが示された。シミュレータを使った改善として、etcd クラスタを pod リソース用とそれ以外の 2つに分けたとか、Scheduler を改良したという話をしていた。また、next-peak prediction (次にくるピーク負荷の予測だと思われる) をして Scheduler のメモリ効率を改善したと言っていた。
SIG-scheduling と話して成果を OSS にしたいそうでだ。シミュレーションに実時間かかるが、もっと速く流せないのかとの質問があった。
Envoy on Fire: A Practical Look at Debugging a Service Mesh
Lyft の Lita Cho 氏と Ryan Cox 氏。Ballroom 20AB という (今まで参加したセッションの 3倍くらいあると思われる) 巨大な部屋に最終日になって初めて行った。後日スケジュールを確認したところ、特定のトラックを割り振っている感じではなかったが、ケーススタディやオペレーションに分類されるセッションが多く、やはりそのような実運用に近い話題が人気なのかと思った。
預けたスーツケースを受けとって帰ろうとしている参加者も多く、スポンサーブースも片付けのため閉鎖されていて会場に辿りつくのに苦労した。スピーカーは最後のセッションにきてくれてありがとうみたいなことをいってから発表を始めた。
Lyft で何年も Envoy を大規模運用している経験をもとに云々とプログラムには書いてあったが、以下のようなトピックを淡々と説明していた。
- 設定のデバッグ方法
envoy:admin_port/config_dump と trace logging がツールとして使えると言っている。 - External Service のログの取り方
external traffic も Envoy を介することで情報を取ったりリトライさせたりできる。1% だけとかエラーだけログをとるやりかたを説明していた。ログの出力を gRPC を使って外部のサービスに流すこともできる。 - 統計情報の話
どんなのが取れるとか説明していた。最後に統計情報を一覧できる Dashboard もあると紹介していた。
まとめ
7年前に同地で開催された OpenStack Summit の参加者は 1,500人で、それでも当時は大きなイベントだと思ったのだが、今回の KubeCon はその8倍の規模であった。
ソフトウェアの種類も違うので単純比較はできないが、OSS のイベントでここまで人が集まるとは当時は想像できなかったと思う。
KubeCon 0日目に参加した日本人会も 140人ほど集まり大盛況で、Kubernetes は日本国内での浸透も進んできているようである。
次回の KubeCon は (日本の年度末である)来年3月30日からオランダのアムステルダムで開催される予定だ。
https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/