オンプレミスkubernetes - janog...•dockerホストをノードとしてクラスタリング...
TRANSCRIPT
![Page 1: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/1.jpg)
オンプレミスKubernetes
のネットワーク
![Page 2: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/2.jpg)
目次
• 自己紹介
• Kubernetesについて
– Kubernetesとは
– オンプレミスにしたい理由
• ノード間のネットワーク (CNI)
• ノード外のネットワーク (外部ロードバランサー)
© 2019 J-Stream Inc. All Rights Reserved. 2
![Page 3: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/3.jpg)
自己紹介
• 城田 雅水 (しろた まさみ)
• 高専では寮の情シス
• 新卒から今までJストリーム
– 2013/04 – 2014/09: ライブ配信
– 2014/10 – 2018/03: ネットワーク・サーバー運用
– 2018/04 - : 開発 (ruby, go)
© 2019 J-Stream Inc. All Rights Reserved. 3
![Page 4: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/4.jpg)
会社について
• 動画に関するいろいろなこと
– CDNによる配信
• 自社設備だけでなくマルチCDNも
– ライブストリーミング
• この中継もやってます!
– 動画配信プラットフォーム
• ブラウザで配信する動画を管理
– 映像制作
© 2019 J-Stream Inc. All Rights Reserved. 4
![Page 5: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/5.jpg)
CDNの仕組み
© 2019 J-Stream Inc. All Rights Reserved. 5
![Page 6: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/6.jpg)
Kubernetesについて
© 2019 J-Stream Inc. All Rights Reserved. 6
![Page 7: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/7.jpg)
Kubernetesとは
• コンテナを便利に扱うためのシステム
• Dockerホストをノードとしてクラスタリング
– コンテナを適当に分散配置
– 死んだノードにいたコンテナを立ち上げ直す
• リソースという名前でいろいろ抽象化
© 2019 J-Stream Inc. All Rights Reserved. 7
![Page 8: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/8.jpg)
Kubernetesのリソース
• Pod (Pod of whales, クジラの群れ)
– コンテナの集まり (1~数個)
– この単位でIPアドレスがつく
• Service
– Podを束ねるロードバランサー
– 内部用のVIPとFQDNがつく
© 2019 J-Stream Inc. All Rights Reserved. 8
![Page 9: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/9.jpg)
Kubernetesを使う動機
• Podのデプロイが簡単
– サーバーを増やすのは面倒
• IPアドレスの空きを確認
• 仮想ならホストリソースの空きを確認
• ロードバランサーを設定
• これらの自動化も大変
– これらを全部やってくれる
– アプリケーションからコンテナをデプロイすることも
© 2019 J-Stream Inc. All Rights Reserved. 9
![Page 10: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/10.jpg)
オンプレミスにしたい理由
• トラフィックが高い!
• コンテナをオリジンサーバーとして使うとしても、
結構な量が流れる。
• CDNを使えない非HTTPなプロトコルも
© 2019 J-Stream Inc. All Rights Reserved. 10
![Page 11: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/11.jpg)
オンプレミスにしたい理由
© 2019 J-Stream Inc. All Rights Reserved. 11
![Page 12: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/12.jpg)
オンプレミスにしたい理由
• トラフィックが高い!
• 月平均:1.5Gbpsのとき
– 30日で総量は452,622GiB
– Googleだと4,042,282円
• 95%ile:2Gbpsのとき
– 400円/Mbpsなら800,000円
© 2019 J-Stream Inc. All Rights Reserved. 12
![Page 13: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/13.jpg)
ノード間のネットワークContainer Network Interface
© 2019 J-Stream Inc. All Rights Reserved. 13
![Page 14: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/14.jpg)
ノード間のネットワーク
• ノード同士を結ぶネットワークが必要
– Pod同士の通信
– Service(ノード)から他ノードPodへ転送
• Kubernetes本体ではネットワークを提供しな
い
© 2019 J-Stream Inc. All Rights Reserved. 14
![Page 15: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/15.jpg)
ノード間のネットワーク
• Container Network Interface
– Podに仮想NICとIPアドレスを提供
– Kubernetes以外でも使われている
• Flannel
• Project Calico
• kube-router
© 2019 J-Stream Inc. All Rights Reserved. 15
![Page 16: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/16.jpg)
Flannel
© 2019 J-Stream Inc. All Rights Reserved. 16
![Page 17: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/17.jpg)
Flannel
• ユニキャストなVXLANを構築
– ノード間のルーティングに使うだけ
– 全Podが1つのブリッジにのるわけではない
• 日本語の記事が多い
– 4年前から最近まで
© 2019 J-Stream Inc. All Rights Reserved. 17
![Page 18: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/18.jpg)
Flannelの仕組み
• 各ノードにflanneldプロセスが常駐
© 2019 J-Stream Inc. All Rights Reserved. 18
![Page 19: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/19.jpg)
Flannelの仕組み
• インターフェース作成
© 2019 J-Stream Inc. All Rights Reserved. 19
![Page 20: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/20.jpg)
Flannelの仕組み
• Podはcni0にぶらさがる。
© 2019 J-Stream Inc. All Rights Reserved. 20
![Page 21: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/21.jpg)
Flannelの仕組み
• Pod同士の通信はブリッジを使う
© 2019 J-Stream Inc. All Rights Reserved. 21
![Page 22: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/22.jpg)
Flannelの仕組み
• 他ノードへの通信はブリッジではない
© 2019 J-Stream Inc. All Rights Reserved. 22
![Page 23: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/23.jpg)
Flannelの仕組み
• まずはPodからノードへルーティング
© 2019 J-Stream Inc. All Rights Reserved. 23
![Page 24: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/24.jpg)
Flannelの仕組み
• flannel.1から他ノードへ
© 2019 J-Stream Inc. All Rights Reserved. 24
![Page 25: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/25.jpg)
Flannelの仕組み
• Flanneldが転送に必要な情報を教える
– 宛先ノードの(flannel.1)MACアドレス
– 宛先ノードの(eth0)IPアドレス
© 2019 J-Stream Inc. All Rights Reserved. 25
![Page 26: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/26.jpg)
Flannelの仕組み
• VXLANにくるんで他ノードへ
© 2019 J-Stream Inc. All Rights Reserved. 26
![Page 27: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/27.jpg)
Flannelの特徴
• ノード同士がUDPで通信できればクラスタリン
グできる
• VXLAN以外も扱える
– ipip, ipsec (experimental)
– 全ノードが同一セグメントにいればトンネルなしも
可能 (host-gw)
© 2019 J-Stream Inc. All Rights Reserved. 27
![Page 28: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/28.jpg)
Flannelの特徴
• 更新が鈍ってきた?
– 2017/1/11 : 0.7.0
– 2017/4/19 : 0.7.1
– 2017/7/12 : 0.8.0
– 2017/9/23 : 0.9.0
– 2017/11/17 : 0.9.1
– 2018/1/24 : 0.10.0
– 2019/1/25 : 1年リリースなし
© 2019 J-Stream Inc. All Rights Reserved. 28
![Page 29: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/29.jpg)
Project Calico
© 2019 J-Stream Inc. All Rights Reserved. 29
![Page 30: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/30.jpg)
Project Calico
• すべてL3で疎通させる
• NetworkPolicyも実装
– Podに対してファイアウォールを設定できる
• Calico = 三毛猫
© 2019 J-Stream Inc. All Rights Reserved. 30
![Page 31: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/31.jpg)
Project Calicoの仕組み
• いっぱいプロセスが上がる
– etcd (設定保持)
– felix (インターフェースの管理など)
– BIRD (BGPの処理)
– confd (etcdからBIRDのコンフィグを生成)
© 2019 J-Stream Inc. All Rights Reserved. 31
![Page 32: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/32.jpg)
Project Calicoの仕組み
• ブリッジは作成しない
© 2019 J-Stream Inc. All Rights Reserved. 32
![Page 33: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/33.jpg)
Project Calicoの仕組み
• BIRDでノード同時をBGPピアリング
– デフォルトはフルメッシュ
• 各ノードで使うPod用のサブネットを広報
© 2019 J-Stream Inc. All Rights Reserved. 33
![Page 34: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/34.jpg)
Project Calicoの仕組み
• Pod間の通信はノードがルーティングする
© 2019 J-Stream Inc. All Rights Reserved. 34
![Page 35: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/35.jpg)
Project Calicoの仕組み
• Pod間の通信はノードがルーティングする
© 2019 J-Stream Inc. All Rights Reserved. 35
![Page 36: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/36.jpg)
Project Calicoの仕組み
• ノード間はBGPで得た経路でルーティング
• ノード間にルーターがある場合、そのルーターと
もBGPピアリングすることで疎通させる。
© 2019 J-Stream Inc. All Rights Reserved. 36
![Page 37: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/37.jpg)
Project Calicoの特徴
• 設定にcalicoctlというコマンドを使う
– kubectl風の操作感
– 設定内容はYAMLで表現
© 2019 J-Stream Inc. All Rights Reserved. 37
![Page 38: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/38.jpg)
Project Calicoの特徴
• IPIPトンネリングも対応
– 最近はデフォルトでトンネルに
– 別ネットワークのノード宛てのみIPIPとすることも
© 2019 J-Stream Inc. All Rights Reserved. 38
![Page 39: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/39.jpg)
kube-router
© 2019 J-Stream Inc. All Rights Reserved. 39
![Page 40: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/40.jpg)
kube-router
• 1つのgoバイナリでKubernetesのネットワーク
まわりを全部処理する
• NetworkPolicyの実装に加えてServiceの
実装置き換えもできる
© 2019 J-Stream Inc. All Rights Reserved. 40
![Page 41: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/41.jpg)
kube-routerの仕組み
• ノード内はFlannelのようにブリッジ
• ノード間はBGPを使ったルーティング
– GoBGPのライブラリを利用
© 2019 J-Stream Inc. All Rights Reserved. 41
![Page 42: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/42.jpg)
kube-routerの特徴
• BGPの設定はノードのアノテーションとして
Kubernetesクラスタに書いていく
– Calico用etcdのように冗長性を考えなくていい
© 2019 J-Stream Inc. All Rights Reserved. 42
![Page 43: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/43.jpg)
kube-routerの特徴
• クラスタ内からルートリフレクタを選出できる
© 2019 J-Stream Inc. All Rights Reserved. 43
![Page 44: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/44.jpg)
ノード外のネットワーク外部ロードバランサーとの連携
© 2019 J-Stream Inc. All Rights Reserved. 44
![Page 45: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/45.jpg)
ノード外のネットワーク
• Kubernetesクラスタ外からPodへはどうやっ
てアクセスする?
– PodもServiceもクラスタ内でしか通用しない
• クラウドにはLoadBalancerタイプのService
がある
– クラウドのロードバランサーをServiceに自動連携
© 2019 J-Stream Inc. All Rights Reserved. 45
![Page 46: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/46.jpg)
ノード外のネットワーク
• NodePortタイプのService
– いわゆるポートフォワード
– 全ノードが対象ポートをリッスン
– ポート443をリッスンできるServiceは1クラスタにつ
き1つだけ
© 2019 J-Stream Inc. All Rights Reserved. 46
![Page 47: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/47.jpg)
ノード外のネットワーク
• Ingress
– HTTPロードバランサー
– VirtualHost/SNIで複数サイトに対応
– 実装はnginxがメイン
– NodePortタイプのServiceに加えて使う
– 非HTTPだと結局ポートの取り合いに
© 2019 J-Stream Inc. All Rights Reserved. 47
![Page 48: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/48.jpg)
ノード外のネットワーク
• Kubernetesと連携するロードバランサーを用
意しないといけない
• MetalLB
• F5 Container Connector
© 2019 J-Stream Inc. All Rights Reserved. 48
![Page 49: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/49.jpg)
MetalLB
© 2019 J-Stream Inc. All Rights Reserved. 49
![Page 50: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/50.jpg)
MetalLB
• Kubernetesノードで動くロードバランサー
• 外部からの接続方法によって2つモードがある
• 公開に使うIPアドレス帯を与えると適宜払い
出してくれる。
© 2019 J-Stream Inc. All Rights Reserved. 50
![Page 51: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/51.jpg)
MetalLBの仕組み
• Layer2モード
• Proxy ARPで1台のノードが代表して受ける
• 代表ノードからPodへロードバランス
© 2019 J-Stream Inc. All Rights Reserved. 51
![Page 52: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/52.jpg)
MetalLBの仕組み
© 2019 J-Stream Inc. All Rights Reserved. 52
![Page 53: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/53.jpg)
MetalLBの仕組み
• BGPモード
• ルーターに各ノードがホストルートを広報
• ルーターがECMPでロードバランス
© 2019 J-Stream Inc. All Rights Reserved. 53
![Page 54: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/54.jpg)
MetalLBの仕組み
© 2019 J-Stream Inc. All Rights Reserved. 54
![Page 55: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/55.jpg)
MetalLBの仕組み
• ルーターとServiceで二重にロードバランス
• 設定でやめさせることができるが
© 2019 J-Stream Inc. All Rights Reserved. 55
![Page 56: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/56.jpg)
MetalLBの仕組み
© 2019 J-Stream Inc. All Rights Reserved. 56
![Page 57: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/57.jpg)
MetalLBの仕組み
© 2019 J-Stream Inc. All Rights Reserved. 57
![Page 58: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/58.jpg)
MetalLBの特徴
• Layer2モードは手軽に使える
– PC内でVM-ホスト間を繋ぐ時など
– トラフィックが1つのノードに集まってしまう
© 2019 J-Stream Inc. All Rights Reserved. 58
![Page 59: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/59.jpg)
F5 Container
Connector
© 2019 J-Stream Inc. All Rights Reserved. 59
![Page 60: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/60.jpg)
F5 Container Connector
• KubernetesからBIG-IPを自動設定する
• 既存サーバー群といっしょに扱える
© 2019 J-Stream Inc. All Rights Reserved. 60
![Page 61: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/61.jpg)
F5 Container Connectorの仕組み
• Kubernetes APIを叩いて情報収集
– ノード
– Pod
– Service
– VIPの設定
© 2019 J-Stream Inc. All Rights Reserved. 61
![Page 62: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/62.jpg)
F5 Container Connectorの仕組み
• BIG-IPのAPIを叩いて転送ルールを書き込み
• NodeやPodの増減があればBIG-IPの設定
をアップデート
© 2019 J-Stream Inc. All Rights Reserved. 62
![Page 63: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/63.jpg)
F5 Container Connectorの仕組み
• NodePortモード
– NodePortタイプのServiceに向けてBIG-IPが転
送する
– F5 CCの設定だけで動く
– BIG-IPとノードで2回ロードバランスする
© 2019 J-Stream Inc. All Rights Reserved. 63
![Page 64: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/64.jpg)
F5 Container Connectorの仕組み
© 2019 J-Stream Inc. All Rights Reserved. 64
![Page 65: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/65.jpg)
F5 Container Connectorの仕組み
• Clusterモード
– BIG-IPをKubernetesのネットワークに組込む
• 公式にはFlannelとCalicoについて触れられている
– Podに向けて直接ロードバランスする
© 2019 J-Stream Inc. All Rights Reserved. 65
![Page 66: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/66.jpg)
F5 Container Connectorの仕組み
© 2019 J-Stream Inc. All Rights Reserved. 66
![Page 67: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/67.jpg)
F5 Container Connectorの特徴
• LoadBalancerタイプのServiceとしては動か
ない
– IPアドレスの払い出しは手動
– JSONでBIG-IPのコンフィグを書く
• やろうと思えばIPv6->IPv4の変換も
© 2019 J-Stream Inc. All Rights Reserved. 67
![Page 68: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/68.jpg)
自社の構成
• kube-router+F5 CC(Cluster)で構築中
• FlannelとBIG-IPの組合せが面倒
– VXLANの設定を全部手で移す
– host-gwならスタティックルートをノード数ぶん
© 2019 J-Stream Inc. All Rights Reserved. 68
![Page 69: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/69.jpg)
自社の構成
• kube-router+F5 CC(Cluster)で構築中
• FlannelにはNetworkPolicyがない
– CalicoなどのNetworkPolicyだけ借りることもで
きるが、それならFlannelでなくても。
© 2019 J-Stream Inc. All Rights Reserved. 69
![Page 70: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/70.jpg)
自社の構成
• kube-router+F5 CC(Cluster)で構築中
• BGPフルメッシュだとノード追加の度にBIG-IP
にピアリング設定が必要
– Calicoはルートリフレクタが別途必要
– kube-routerはクラスタ内からルートリフレクタを
用意できる
© 2019 J-Stream Inc. All Rights Reserved. 70
![Page 71: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/71.jpg)
議論したいこと
• どんな構成で使っているか– 流行りはCalico?
– ロードバランサーを自前で実装?
• IPv6対応するには– IPv4を捨てると今でも動くらしいが………
– もうすぐデュアルスタックサポートがくる?
• 運用するときに考えること– iptables地獄のデバッグ?
© 2019 J-Stream Inc. All Rights Reserved. 71
![Page 72: オンプレミスKubernetes - JANOG...•Dockerホストをノードとしてクラスタリング –コンテナを適当に分散配置 –死んだノードにいたコンテナを立ち上げ直す](https://reader033.vdocuments.site/reader033/viewer/2022060900/609df11d302d6254630fdb2a/html5/thumbnails/72.jpg)
IPv6 onlyの夢
• クラスタで使用するIPアドレスを全てグローバル
に
• BGP対応のCNIでルーターに広報
• Podへのアクセス制限はNetworkPolicyで
© 2019 J-Stream Inc. All Rights Reserved. 72