Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PFNにある2つのKubernetes
Search
ota42y
November 26, 2019
Programming
10
5.2k
PFNにある2つのKubernetes
Bonfire Backend #4
https://yj-meetup.connpass.com/event/153658/
で発表した内容です。
ota42y
November 26, 2019
Tweet
Share
More Decks by ota42y
See All by ota42y
ゼロから作るDeep Learning 2 3章 word2vec 3.1〜3.2
ota42y
1
430
Q&A for How to use OpenAPI3 for API developer
ota42y
0
2.4k
How to use OpenAPI3 for API developer (RubyKaigi 2019)
ota42y
5
20k
How should we face with microservices (我々はマイクロサービスとどう向き合うべきか)
ota42y
20
4.6k
DeepLearningの本番環境にSageMakerを利用してる話
ota42y
1
6.1k
検索結果の良さを計測して定量的に改善していく
ota42y
3
2.4k
Flutterを広めるために技術同人誌を作った話
ota42y
1
1.5k
何も考えずにCIや継続的デリバリーしたら辛くなった話.pdf
ota42y
0
2.8k
Other Decks in Programming
See All in Programming
Jetpack for KMP
fornewid
1
290
わかりやすい正解を捨てて、コトに向き合う - スクラムフェス金沢2024 スポンサーセッション
yusukekokubo
0
170
ドメイン駆動設計の実践
masuda220
PRO
19
5.2k
HMSコンペ 11th Solution (team : kansai-kaggler)
t88
1
680
AWS CDKにおける「再利用性」を考える / aws-cdk-reusability
gotok365
6
1.3k
コード生成を伴うLLMエージェント - 2024.07.18 Tokyo AI
smiyawaki0820
11
4.1k
入社1ヶ月でここまでやった!Findy Toolsインフラ支援の最適化
rvirus0817
6
1.4k
Exploring the Gradually Lost Technical Skills in the Cloud Native Era
hwchiu
2
3.9k
スクラムマスターって孤独じゃないですか?
yoshitaroyoyo
1
140
CSC307 Lecture 09
javiergs
PRO
1
500
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
0
160
feature環境をGitHub ActionsとCloudFormationでいい感じに管理する
nealle
2
310
Featured
See All Featured
Bash Introduction
62gerente
607
210k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
353
29k
Creatively Recalculating Your Daily Design Routine
revolveconf
214
11k
Music & Morning Musume
bryan
43
5.9k
Typedesign – Prime Four
hannesfritz
37
2.2k
Visualization
eitanlees
139
14k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
44
4.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
YesSQL, Process and Tooling at Scale
rocio
166
14k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
90
47k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
36
9.1k
Transcript
PFNにある2つの Kubernetes 2019/11/26 Bonfire Backend #4 ota42y
⾃⼰紹介 • おおた @ota42y (github/twitter) • Web Application Engineer in
PFN • React〜Go〜インフラまでだいたい全部 • 前世はRuby on Railsでマイクロサービス • 前前世はC++でソシャゲ作ってました • 前前前世は無いです⊂(・8・)⊃
今⽇の話 ⾃社GPUクラスタと Web Application⽤クラスタについて KubernetesのNetwork Isolationについて
今⽇の話 KubernetesのNetwork Isolationについて ⾃社GPUクラスタと Web Application⽤クラスタについて
None
ަ௨γεςϜ ࣗಈӡసٕज़ͳͲ ۀ ϩϘοτೳԽɺ࠷దԽͳͲ όΠΦɾϔϧεέΞ ͕ΜஅɾༀͳͲ ύʔιφϧϩϘοτ ͓ย͚ϩϘοτͳͲ
機械学習がメインなので マシンリソースが 重要な競争⼒
⾃社GPUクラスタ • 息をするように⼤規模計算が出来るように • 2500を超えるGPU • 独⾃チップクラスタも予定 • これらの制御をKubernetesで⾏っている
https://www.slideshare.net/pfi/tech-inmlcluster20180729-julytechfesta2018
None
https://martinfowler.com/articles/cd4ml.html
https://martinfowler.com/articles/cd4ml.html
https://martinfowler.com/articles/cd4ml.html
研究結果を お客様に 使って頂く モデルだけ の提供 推論ライブ ラリの提供 システムの 提供
研究結果を お客様に 使って頂く モデルだけ の提供 推論ライブ ラリの提供 システムの 提供
Web Application 展開 • 研究結果をお客様に実使ってもらう⽅法の⼀つ • インターネットアクセスできるなら 最も容易な⽅法 • 提供や拡張もやりやすい
Web Applicationの 要求 機密情報の暗号化 ユーザ管理 個⼈情報管理 ネットワーク分離 リソースの増減 SLA
GPUクラスタ とは 要求内容が 異なる • リソースガンガン使いたい • アクセス増に備えたい 要求が背反する •
GPUが不要な場合も 推論がメイン • データの信頼性が凄く重要 • S3やRDSなどを利⽤したい サービス⾃体の信頼性・安定性
Amazon Elastic Kubernetes Serviceで Web Application⽤ クラスタを構築
Why not ECS ? 規模的にはECSで⼗分まかなえる • まだイメージの数が少ないので運⽤負荷は低い • 値段が安い •
EKSはコントロールプレーンにも課⾦ • AWSの各サービスと連携しやすい 社内の知⾒はKubernetesのほうが多い • みんなKubernetesに慣れている • 内部のツールやフローをそのまま載せられる • リサーチャーが直接モデル更新も可能に
Why not ECS ? 規模的にはECSで⼗分まかなえる • まだイメージの数が少ないので運⽤負荷は低い • 値段が安い •
EKSはコントロールプレーンにも課⾦ • AWSの各サービスと連携しやすい 社内の知⾒はKubernetesのほうが多い • みんなKubernetesに慣れている • 内部のツールやフローをそのまま載せられる • リサーチャーが直接モデル更新も可能に
今⽇の話 KubernetesのNetwork Isolationについて ⾃社GPUクラスタと Web Application⽤クラスタについて
Kubernetesの Network Isolation
Network Isolationが重要になる 相互通信しないようにNetwork Isolationが重要 同じお客様内でもNetwork Isolationが必要になる場合も ⼀つのEKSクラスタに 関係ないアプリが複数同居する
Network Policies Pod Pod Pod Pod Pod Pod Namespace A
Namespace B • PodやNamespace単位で通信を制御できる標準機能
Network Policies Pod Pod Pod Pod Pod Pod Namespace A
Namespace B • 1 アプリケーションにつき1 Namespace • Namespaceごとに世界を分けて相互にアクセスを禁⽌
具体的な設定
Kubernetesは デフォルトで 相互通信許可 • 明⽰的な禁⽌が必要 • Network PoliciesはNamespaceに紐付く • 新しいNamespaceごとに設定が必要
• 設定を忘れる・間違える可能性が⾼い • デフォルトで相互通信を抑制したい • Network Policiesにはそういう機能は無い
Calico • ネットワークやセキュリティポリシーを 実現するソフトウェア • VMやOpenStackに対応 • Kubernetesにも対応 (CNIプラグインとして利⽤できる) •
EKS上でも動作する (AWS公式ドキュメントに載ってる) • Global network policyという設定 • Network Policiesより低優先度にできる • デフォルトルールとして使える https://github.com/projectcalico/calico
あらゆる 相互通信の 禁⽌ UDPも同様にやります
Namespace 設定 • Namespace側で 内部のpodの相互通信を許可 • Calicoの設定より優先される • Namespace内は許可、それ 以外は⾮許可が実現できる
Tips: kube-system への許可 kube-dnsなどが使えなくなる kube-systemだけは特別に許可
IngressとAWSの相性問題 • アクセスはVPCの外からくる • ALBを⽴ててそこからEKSにアクセスさせている • TLS終端 • ALB ingress
controllerを利⽤ • Network PoliciesはPod/Namespace/CIDRのみ • ALBを対象にできない
ALBだけをネットワーク分割 • Subnet構成で回避する • ALBのみのPublic Subnetを作る • Public Subnetからの通信は全許可 •
ALBの設定次第で別Namespaceにアクセスできるが… • IngressはNamespaceに紐づくので⼿動変更しない限りは⼤丈夫 • EKSとSecurity Groupとの相性が悪いので良い解決⽅法が欲しい…
まとめ • PFNには2種類のKubernetesがある • Web Application⽤にはEKSを利⽤している • この使い⽅ではNetwork Isolationが重要になる •
KubernetesのNetwork Policiesは便利 • Calicoを利⽤するとより⾼度なことができる • ただしAWSの世界とのつなぎ部分はまだ難しい部分がある…
Appendix • Kubernetes logo • https://github.com/kubernetes/kubernetes/tree/master/logo • Calico • https://github.com/projectcalico/calico
完全隔離VPC • 特定のお客様⽤に完全に別のVPCを作る場合もある • Kubernetesの設定を間違えても確実に外に漏れない • 内部でさらに細かく隔離が必要になる場合もありえる • 開発環境での問題 •
機密情報はそもそもコンテナに⼊れない • S3やRDSに⼊れる