Kubernetes Meetup Tokyo #16 まとめ

# Kubernetes Meetup Tokyo #16 まとめ

## 

[Kubernetes Meetup Tokyo #16](https://k8sjp.connpass.com/event/116799/)  に参加して得た知見を共有します。
なお、著者の知識レベルは `チュートリアルで pod を起動してみたりしたくらい` なので、技術的な説明が正確でないところがあるかもしれません。もし明らかに間違っている記載を見つけた場合はコメントで教えていただけますと幸いです。 :bow: 

## 参加の目的

* k8sの運用事例を知りたい
* どういう課題を解決するためにk8s使うのか知りたい
* k8sのセキュリティの脆弱性の話を聞きたかった

## スピーカーセッション

### Z氏は、Kubernetesクラスタを手中に収めることができたのか

登壇者: 大塚 元央 (@yuanying), ゼットラボ株式会社

#### スピーチの内容

* 最近出た Kubernetes の脆弱性（runc の権限昇格の脆弱性）についての話
    * https://kubernetes.io/blog/2019/02/11/runc-and-cve-2019-5736/
* どういう脆弱性か？
    * すべての通信の流れは、原則すべてのサービスから API Server に向かって行われる
        * c.f. セントラルドグマ（生物学）
            * 遺伝子が転写される情報の流れは原則一方向で、逆流することはない
                * 例外: ウィルス
    * ただし、例外もある
        * Aggregated API Server
            * もともとあるAPI Serever とカスタムAPI Serverとをまとめているサーバ
        * 今回はこの例外に脆弱性があった
* 実際に脆弱性を利用してどういうことができるのかデモを作ってみた
    * 利用者 =(A)=> Aggregated API Server =(B)=> API Server という通信の流れ
        * 最初の認証(A)を通過した後、(B)で認証に成功しなかった場合、利用者がAPI Server に対して権限がなくてもエンドポイントを叩いて結果を得ることができる
            * c.f. Proxyを介した WebSocket通信
                * 最初は、 ユーザ => Proxy => エンドポイント という通信の流れ
                * ユーザとProxy間で認証が通った場合、あとはユーザがエンドポイントに対して直接通信を行う
    * この脆弱性を使ってできること
        * dev環境のみの権限をもっている人がprodの権限でしかアクセスできない API のエンドポイントに対してクエリを投げられる
        * デフォルトで全APIのエンドポイントのリストを確認するエンドポイントは全公開になっている。ここを絞ってない場合は、全く権限をもってない人でも Aggregated API Server にクエリが投げられる権限昇格が可能になる
* 結論
    * 権限をもたない利用者が無条件にK8sクラスタを乗っ取れるわけではない
        * デフォルトの権限設定のまま絞ってない環境に限られる
        * APIを叩けるからといってクラスタを自由に操れるとは限らない
    * 脆弱性が自分の運用環境に対して本当に影響があるのか確認してみるのも大事
        * 通常はパッチを当てるだけですむことが多いが。

#### 思ったこと

* k8sのアーキテクチャ難しそうだな。。
* わりと簡単に脆弱性をつけるんだな。
* K8sのアーキテクチャに関する知識がゼロの状態だったが、具体的な攻撃の方法をデモで示してくれたのでなんとなく概要はつかめた
* 普段脆弱性が出たときは、パッチ適用後のサーバイメージと交換するだけ。実際にどういう影響があるかまできちんと理解することがないので勉強になった。また、K8Sのアーキテクチャの一部を知れた。

### CNI 入門（Line）

登壇者: Hirofumi Ichihara (@rafiror), LINE Corporation

#### スピーチの内容

* CNIとは?
    * k8s が採用しているネットワーク構築ツール
        * ただし、K8S とは無関係
    * Docker における CNM に相当するもの
    * クラスタ管理ツールが k8s 1強になっている状況をみると、今後はCNIが主流になるのでは?
    * 自作のプラグインを作って機能拡張できる
        * 環境変数と標準入力の値を処理して標準出力に結果を出力
    * プラグインのチェインができる
        * Linuxのパイプみたいな感じでプラグインどうしを繋げられる
* サンプルでCNIのプラグインを作ってみた

#### 思ったこと

* いい質問してた人がいた
    * Q. 実際に運用でCNIプラグイン作ってるか？
        * => A. 作ってない。
    * Q. CNIのプラグイン自作が必要になるような技術的な課題とは？
        * => A. のちのサイボウズの人の話で具体的な運用について聞ける。

#### 参考

* CNI
    * https://github.com/containernetworking/cni
    * https://qiita.com/hichihara/items/54ff9aeff476bf463509


### 大規模Kubernetesクラスタ向けにCNIプラグインを自作した話（サイボウズ）

登壇者: 池添 明宏 (@zoetro), サイボウズ株式会社

#### スピーチの内容

* 自前でCNIプラグインを作ってみた
* Necoプロジェクト
    * ソースコードをオープンソースで公開している
* もともとVMベースの基盤を使って自社オンプレミス環境でインフラを運用していたが、さまざまな技術的課題を解消するためにK8Sベースの基盤に移行した
    * Neco Project
        * https://blog.cybozu.io/entry/2016/03/11/080000
    * CNIのプラグインを自社開発した
        * https://blog.cybozu.io/entry/2018/12/20/080000
* 具体的な構築内容の話もされてましたが、著者の知識ではほとんど理解できませんでした。。

#### 思ったこと

* サイボウズってAWSとか使わずに自社のオンプレ環境で仮想化プラトッフォームを構築してるのか。
* CNIってけっこう低レイヤ（BGP）の構築に使うんだな。
    * L3以下のレイヤにあまり詳しくない、クラウドネイティブなエンジニアにとってはこのへんの知識がなくても使えるようなツールが出てこないかぎりは厳しいかな。
    * Q. お手軽に必要最低限なネットワーク構築ができるツールって現状ないのか？
* Q. 移行前はどんなアーキテクチャ／運用フローだった？
    * => Neco Projectのリンクに記載があるかも
* Q. なぜk8sのデプロイツールを使わずに自前でデプロイツールを開発したのか？
* ガチL3レイヤの話だったので、クラウドネイティブなスキルセットの身にとっては難しかった。。

### LTセッション

* 猫でもわかる Scheduling Framework（仮）@y_taka_23
* intelのdevice pluginを試してFPGAリソースとして使えるようにした話 @khrd
* EKS後の世界とeksctlについて @mumoshu
* Kubernetesを使った機械学習基盤に必要なもの @FKuro_
* AKS,EKS,GKEコマンド比較してみた話 @yuta

#### 思ったこと

* 会場でアンケートをとったらk8sで運用してる人が3-40%程度割いた。
* そのうちGKEの割合が95%で、AKSとEKSが数人いた。
* AKSでk8sの機能がすべて使えるわけではない
* 思ったよりEKSで運用してる人少ない

## 参考

Youtube で録画が上がってます
https://www.youtube.com/watch?v=mAGmmeylj_4

スピーチの資料はこちら
https://k8sjp.connpass.com/event/116799/presentation/