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
Oracle Cloud Hangout Cafe - Kubernetesのネットワーク
Search
oracle4engineer
PRO
May 12, 2021
Video
Technology
1.4k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Oracle Cloud Hangout Cafe - Kubernetesのネットワーク
oracle4engineer
PRO
May 12, 2021
Video
More Decks by oracle4engineer
See All by oracle4engineer
OracleTechnologyNight101_Oracle_Backup_Recovery_Strategy_from_REDO_UNDO
oracle4engineer
PRO
1
180
Oracle Cloud Infrastructure:2026年7月度サービス・アップデート
oracle4engineer
PRO
0
130
Lakehouseの要!Open Table Format深掘り(OCHaCafe Season 11 #6)
oracle4engineer
PRO
1
51
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
[JPOUG Tech Talk Night #16]1歩踏み込むSQLの結合方法
oracle4engineer
PRO
3
200
『モデル + ハーネス』で読み解く AIエージェント入門
oracle4engineer
PRO
2
230
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.5k
Deep Data Security 機能解説
oracle4engineer
PRO
2
370
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
1
790
Other Decks in Technology
See All in Technology
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
8
1.8k
運用を犠牲にせずコストを制御し事業成長を支える B2B SaaS ID管理基盤におけるS3 Tableのログストレージ活用
kaminashi
1
110
「休む」重要さ
smt7174
7
1.8k
StepFunctionsとGraphRAGを活用した暗黙知活用のためのRAG基盤
yakumo
0
190
データベース研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
710
AIエージェントに財布を渡す日 ― 承認付き"買い物エージェント"を作って実演
yama3133
0
110
13年運用タイトルのサーバーサイドが辿り着いた現在地 ― モンスターストライクにおける技術・組織・AI活用から得た知見
mixi_engineers
PRO
1
340
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
2
220
データ活用研修 データマネジメント【MIXI 26新卒技術研修】
mixi_engineers
PRO
4
800
WEBフロントエンド研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
760
脱Jenkins、インターン生が挑んだCIツールGitHubActions移行
mixi_engineers
PRO
1
270
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
130
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
160
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Chasing Engaging Ingredients in Design
codingconduct
0
240
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
sira's awesome portfolio website redesign presentation
elsirapls
0
310
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
My Coaching Mixtape
mlcsv
0
180
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
560
Typedesign – Prime Four
hannesfritz
42
3.1k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
190
Transcript
Kubernetesのネットワーク Oracle Cloud Hangout Cafe 4 #2 Takuya Niita Oracle
Corporation Japan May 12, 2021 コンテナネットワークの総復習
2 Copyright © 2021, Oracle and/or its affiliates. 1. Dockerネットワークの基礎
2. Kubernetesにおけるネットワークの仕組み 3. CNI(Container Network Interface)の代表的なプラグイン 4. NetworkPolicyとPod間通信のセキュリティ 5. デモ 6. まとめ アジェンダ
• 仁井⽥ 拓也 • ⽇本オラクル株式会社 • テクノロジー・クラウド・エンジニアリン グ本部 • 前職は某SIer
• Oracle歴:2年1か⽉ • Cloud Native歴:2年 • Kubernetesもここ2年で触り始めました • ジブリ⼤好き • OCHaCafeは5回⽬の登壇(R:4回/P:1回) ⾃⼰紹介 Copyright © 2021, Oracle and/or its affiliates. 3 @takuya_0301
Dockerネットワークの基礎 Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright
© 2021, Oracle and/or its affiliates. 4 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
Dockerネットワークの構成要素 • 仮想ブリッジ • Linux上に仮想的なL2スイッチを構成する機能 • ホストOSと仮想マシンが通信するためのインタフェースなどで利⽤ • veth •
仮想的なL2のネットワークインターフェース(仮想NIC) • 2つのインタフェースがペアとして作成され、インタフェース間での通信が可能 • iptables • Linuxに実装されたパケットフィルタリング/ネットワークのアドレス変換機能 • ファイアウォール/NAT(SNAT/DNAT/Masquerade)等の機能を提供 Dockerネットワークを構成する主な要素 Copyright © 2021, Oracle and/or its affiliates. 5
Dockerのデフォルトネットワーク( で表⽰されるネットワーク) • bridge • Linux bridge機能を利⽤してLinux上に別ネットワークを構築する⽅式 • Linux bridgeで仮想インタフェースを作成(仮想ブリッジとvethを利⽤)
• コンテナ側のvethでDockerコンテナと接続(≠Dockerホスト側のネットワーク) • 外部とはNAT形式で通信(iptablesを利⽤) • host • Dockerホストと同じネットワークを利⽤するするドライバ • Dockerホストマシンと同じネットワークインタフェース/IPアドレスを保持 • none • nullなネットワークドライバの実装 • ネットワーク接続を必要としないコンテナを作成する場合に使⽤ Dockerのネットワークを俯瞰してみる Copyright © 2021, Oracle and/or its affiliates. 6 $ docker network ls
bridgeネットワーク • Dockerデーモンはデフォルトでこのネットワー クにコンテナを接続 • Dockerが”docker0”という名前のbridge networkを作成 • コンテナそれぞれにIPアドレスを割当 •
Dockerのネットワークで最もよく利⽤される形 式 • ホストの任意のポートをコンテナの任意の ポートにマッピング可能(“-p”オプション) • 独⾃のbridge networkの作成も可能 • docker runした際に作成したコンテナに対 して、ネットワークを割当 Dockerのネットワークを俯瞰してみる(bridge) Copyright © 2021, Oracle and/or its affiliates. 7 ホスト側のネットワーク(192.168.1.0/24) docker0(仮想ブリッジ) Docker Network(172.17.0.0/16) eth0 Dockerホストとは異なるネット ワークを構築し、vethを利⽤し て接続 veth veth veth veth 172.17.1.2 172.17.1.3 192.168.1.2
hostネットワーク • ホスト側のネットワークインタフェースに接続 • ネットワーク設定はホスト側と同⼀ • ポートマッピングは不可(“-p”オプションは利⽤ 不可) • 80番ポートで起動するnginxコンテナを1つ
のホストで2つ以上動作させることは不可 • bridgeネットワークであれば、ポートフォ ワードにより2つのnginxを起動可能 Dockerのネットワークを俯瞰してみる(host) Copyright © 2021, Oracle and/or its affiliates. 8 ホスト側のネットワーク(192.168.1.0/24) eth0 Dockerホストと同⼀のネット ワークインタフェースと同⼀ のIPアドレスを保持。 192.168.1.2 192.168.1.2 192.168.1.2
noneネットワーク • コンテナにnoneネットワークを利⽤すると ループバックデバイス(localhost)のみが残存 • 上記以外のネットワークインタフェースは なし • 主にコンテナのネットワークを無効化した場 合に利⽤
Dockerのネットワークを俯瞰してみる(none) Copyright © 2021, Oracle and/or its affiliates. 9 ホスト側のネットワーク(192.168.1.0/24) eth0 仮想ブリッジとの接続はなし 外部ネットワークとの接続はなし
overlay network • 異なるホスト上に存在するコンテナに対して、 透過的にアクセス可能にする仕組み • VXLAN(L2 over L3)の技術を利⽤して実現 •
Dockerホストが異なる拠点やデータセンタ に存在しても、同じネットワーク上に存在 しているものとしてアクセス可能 • “--link”オプションもあるが、異なるDocker ホストに跨ってアクセスすることは不可能 • Key-Valueストアが必須 • Dockerホストのディスカバリなどに利⽤ • Consul/etcd/Zookeeperをサポート 参考:Dockerのoverlay network Copyright © 2021, Oracle and/or its affiliates. 10 host(192.168.1.1) docker0 Docker Network(172.17.0.0/16) eth0 host(192.168.1.2) docker0 Docker Network(172.17.0.0/16) eth0 VXLANによるカプセル化/アンカプセル化。 同⼀ネットワーク内のコンテナとしてアク セス Key-Value Store
bridgeネットワークの作成と利⽤ • Dockerネットワークの作成(bridgeネットワークの場合) • Dockerネットワークの詳細確認 • 作成したbridgeネットワークの利⽤(1) • 作成したbridgeネットワークの利⽤(2) Dockerネットワークの利用
Copyright © 2021, Oracle and/or its affiliates. 11 $ docker network inspect <作成したネットワーク名> $ docker network create --driver bridge <ネットワーク名> $ docker run --net=<作成したネットワーク名> --name=<コンテナ名> image名 $ docker network connect <作成したネットワーク名> <コンテナ名>
NATの管理や制御がボトルネックに… • Dockerネットワーク(bridge)では、iptableによる NAT形式での通信を利⽤(overlay networkは除く) • コンテナが増えるたびにiptable(NATテーブ ル)に追記していくことに・・・ • コンテナが増えれば増えるほどNATテーブ
ルの管理が⼤変・・・ Dockerネットワークの課題 Copyright © 2021, Oracle and/or its affiliates. 12 ホスト側のネットワーク docker0(仮想ブリッジ) Docker Network eth0 veth veth veth veth veth veth ・・・ overlay networkのようなNAT不要のテクノロ ジーを利⽤してフラットなネットワークを構 築しよう=Kubernetesのネットワークの世界観 変換前 変換後 aaa.bb.c.dd:ee fff.g.hh.ii:jjjj kkk.lll.m.nn:oooo pp.qqq.r.sss:tt uuu.v.www.xx:yy zzz.a.bb.ccc:ddd ・ ・ ・
Kubernetesにおけるネットワークの仕組み Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright
© 2021, Oracle and/or its affiliates. 13 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
Kubernetesが求めるネットワークモデル • ①Pod内通信(※) :すべてのPodは⾃分⾃⾝の IPアドレスを持ち、Podの中のコンテナはIPを 共有していてlocalhost経由で相互に通信可能 • ②kubelet-Pod間通信:systemdやkubeletなど ノード上にあるエージェントが、そのノード 上のすべてのPodと通信可能
• ③Pod間通信(Node跨ぎも含む):ノード上の Podが、NATなしですべてのノード上(クラスタ 内)のすべてのPodと通信可能 (※)ネットワークモデルとしては定義されていないが、 全体を俯瞰する意味で取り上げる Kubernetesが求めるネットワーク要件/モデル Copyright © 2021, Oracle and/or its affiliates. 14 参考:https://kubernetes.io/ja/docs/concepts/cluster-administration/networking/ NIC NIC VNIC kubelet + CNI プラグイン kubelet + CNI プラグイン VNIC VNIC VNIC ① ② ③
Kubernetesが求めるネットワークモデル • ①Pod内通信(※) :すべてのPodは⾃分⾃⾝の IPアドレスを持ち、Podの中のコンテナはIPを 共有していてlocalhost経由で相互に通信可能 • ②kubelet-Pod間通信:systemdやkubeletなど ノード上にあるエージェントが、そのノード 上のすべてのPodと通信可能
• ③Pod間通信(Node跨ぎも含む):ノード上の Podが、NATなしですべてのノード上(クラスタ 内)のすべてのPodと通信可能 (※)ネットワークモデルとしては定義されていないが、 全体を俯瞰する意味で取り上げる Kubernetesのネットワークを実現する⼿段 Copyright © 2021, Oracle and/or its affiliates. 15 ネットワーク名前空間での実現 CNIプラグインでの実現 参考:https://kubernetes.io/ja/docs/concepts/cluster-administration/networking/
ネットワーク名前空間 • Linuxカーネルの機能で実現 • ネットワーク名前空間(=Pod)ごとにIPアドレス を付与 • IP:ネットワーク名前空間(Pod)=1:1 • “IP-per-Podモデル”
• Pod内のコンテナは同⼀ネットワーク名前空間 上で実⾏されるため、お互いはlocalhostでアク セス可能 ① Pod内通信 Copyright © 2021, Oracle and/or its affiliates. 16 ネットワーク名前空間A ネットワーク名前空間B localhost localhost 10.10.0.1 10.10.0.2
CNI(Container Network Interface) • コンテナネットワークを構築するプラグイン を作成するための仕様(ライブラリ) • https://github.com/containernetworking/cni • CoreOS社によって提唱
• 現在はCNCFに移管され管理 • CNIが求めている実装すべき操作は以下。 • コンテナをネットワークへ追加/削除 • コンテナが動作しているかの確認 • バージョン情報の返却 ② kubelet-Pod間通信(1) Copyright © 2021, Oracle and/or its affiliates. 17
CNI(Container Network Interface)プラグイン • CNIが求める仕様を満たしたプラグイン • https://github.com/containernetworking/cni • 実体はバイナリで、kubeletがコンテナ起動時 にバイナリを実⾏
• 適切なネットワーク設定を適⽤したり、割 り当てるIPアドレスを返却 • CNIプラグインによって、クラスターを任意の Network上に構築可能 • 複数のプラグインを組み合わせることで、網 羅的に機能を提供 ② kubelet-Pod間通信(2) Copyright © 2021, Oracle and/or its affiliates. 18 NIC NIC VNIC kubelet + CNI プラグイン kubelet + CNI プラグイン 接続 VNIC VNIC VNIC 接続
Cluster Networking • Nodeのネットワーク上に構成される論理的な ネットワーク • 公式ドキュメントでも”Cluster Networking” と表現されている •
flannelやCalicoなどを利⽤して構築 • NAT(Dockerネットワークでの課題)を利⽤ しないネットワーキングの構築の実現 • 具体的にはLinux Bridge/VXLAN/BGPなど 様々なレイヤー/ソリューションを利⽤し て実現 • 採⽤するソフトウェア(CNIプラグイン)に よっては、オーバヘッドが⾼い場合もある ので、注意が必要 ③ Pod間通信(Node跨ぎも含む) Copyright © 2021, Oracle and/or its affiliates. 19 NIC NIC kubelet + CNI プラグイン kubelet + CNI プラグイン VNIC VNIC VNIC VNIC
CNIプラグインの関連コンポーネント • kubelet • クラスタの各Worker Nodeに常駐するエー ジェント • 設定ファイルの内容に基づいてCNIプラグ インを実⾏
• CNIプラグイン • PodがCluster Networkに参加するために必要 な処理を実⾏ • 実体はバイナリで、kubeletがコンテナ起動 時にバイナリを実⾏ CNIプラグインの動き Copyright © 2021, Oracle and/or its affiliates. 20 NIC VNIC VNIC CNIプラグイン kubelet 設定ファイル 読み込み 実⾏ PodをCluster Networkへ参加
OKE上のCNI設定ファイル • /etc/cni/net.d/10-flannel.conflict • OKEはCNIプラグインとしてflannelを利⽤ • “delegate”フィールドに委任先へ渡すパタ メータを設定 • デフォルトではbridge
CNI Pluginへ譲渡 • bridge CNI Plugin • https://github.com/containernetworking/plugins • flannelが利⽤するCNIプラグイン • PodにNICを払い出し、Linux Bridgeにアタッチ • IPAM(IP Address Management) pluginを呼び 出し、IPアドレスを割り当て CNIプラグインの設定ファイル例 – OKEの例 – Copyright © 2021, Oracle and/or its affiliates. 21 参考: https://speakerdeck.com/hhiroshell/kubernetes-network- fundamentals-69d5c596-4b7d-43c0-aac8-8b0e5a633fc2
Node Network • Kubernetesクラスタを構成するWorker Nodeが 接続するネットワーク • Kubernetesクラスタを構築する環境によっ て実現形態は異なる •
ベアメタルやVM/クラウドプロバイダーが 提供する仮想ネットワークなど • Amazon VPC • Azure Virtual Network • Google Cloud VPC • Oracle Cloud Infrastructure VCN • 各種SDNサービス 参考:Node Network Copyright © 2021, Oracle and/or its affiliates. 22 NIC NIC VNIC VNIC VNIC VNIC ・ ・ ・ kubelet + CNI プラグイン kubelet + CNI プラグイン
Service Network • Podの論理的なセットを管理する抽象的なネッ トワーク • 複数のPodをまとめて単⼀のエンドポイント で管理(Node/Podを抽象化) • Podは複数のNodeに散らばり、IPアドレス
も⼀定ではないため • Podへの通信について以下の機能を提供 • Podの論理的なセットに対するサービス ディスカバリ • Podの論理的なセットに対する負荷分散 • Service NetworkのバックエンドとなるPodが変更 されても、呼び出し元が意識する必要はなし 参考:Service Network Copyright © 2021, Oracle and/or its affiliates. 23 kubelet + CNI プラグイン kubelet + CNI プラグイン VNIC VNIC VNIC NIC NIC Service Network Podの論理的なセット のいずれかに到達 VNIC
Kubernetesが求めるネットワークモデル • ①Pod内通信(※) :すべてのPodは⾃分⾃⾝の IPアドレスを持ち、Podの中のコンテナはIPを 共有していてlocalhost経由で相互に通信可能 • ②kubelet-Pod間通信:systemdやkubeletなど ノード上にあるエージェントが、そのノード 上のすべてのPodと通信可能
• ③Pod間通信(Node跨ぎも含む):ノード上の Podが、NATなしですべてのノード上(クラスタ 内)のすべてのPodと通信可能 (※)ネットワークモデルとしては定義されていないが、 全体を俯瞰する意味で取り上げる Kubernetesのネットワークを実現する⼿段 Copyright © 2021, Oracle and/or its affiliates. 24 ネットワーク名前空間での実現 CNIプラグインでの実現 参考:https://kubernetes.io/ja/docs/concepts/cluster-administration/networking/
CNI(Container Network Interface)の代表的なプラグイン Takuya Niita Oracle Corporation Japan May 12,
2021 Copyright © 2021, Oracle and/or its affiliates. 25 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
Overlay • ホスト間にトンネルを作成 • パケットは下層レイヤーでホスト間のパケッ トにカプセル化 Routing • ホスト間通信をルーティングを介して実施 •
部分的に下層ネットワークに依存 Underlay • コンテナとホストのネットワークセグメント は同⼀ • 下層ネットワークに強く依存 CNIプラグインの3つのパターン Copyright © 2021, Oracle and/or its affiliates. 26 参考:https://www.alibabacloud.com/blog/getting-started-with-kubernetes- %7C-kubernetes-cnis-and-cni-plug-ins_596330
Overlay • ホスト間にトンネルを作成 • パケットは下層レイヤーでホスト間のパケッ トにカプセル化 Routing • ホスト間通信をルーティングを介して実施 •
部分的に下層ネットワークに依存 Underlay • コンテナとホストのネットワークセグメント は同⼀ • 下層ネットワークに強く依存 CNIプラグインの3つのパターン Copyright © 2021, Oracle and/or its affiliates. 27 参考:https://www.alibabacloud.com/blog/getting-started-with-kubernetes- %7C-kubernetes-cnis-and-cni-plug-ins_596330
flannel Copyright © 2021, Oracle and/or its affiliates. 28 flannel
• https://github.com/flannel-io/flannel • 最新0.13.0(2021/5現在) • CoreOS社(Red Hat社)が主体で開発 • 開発が若⼲停滞気味…?? • Linux BridgeとVXLANを組み合わせて実現するシン プルなネットワーク構成を実装 • VXLANデバイスとして”flannel.1”(VLAN構成時 の”eth0.100”のようなデバイスを構築するイメー ジ)が⽤意される • このデバイスによってパケットのカプセル化 を実施(オーバヘッドの原因) • NetworkPolicyには⾮対応 • Calicoと組み合わせたCanalという⽅式もある
Calico • https://github.com/projectcalico/calico • 最新3.18.3(2021/5現在) • Tigera社が主体で開発 • Overlay networking(VXLAN/IP
in IP)やBGPルー ティングなどを利⽤してネットワークを構成 • カプセル化やオーバレイネットワークは不 要とする⽅式も選択可能 • オーバヘッドも少ない • Pod毎に”Calixxxxx”というvethが構築され、ホス ト側とコンテナ側のペアリングを実施 • NetworkPolicyに対応 • calicoctlというコマンドラインインタフェース を実装 Calico Copyright © 2021, Oracle and/or its affiliates. 29
Weave Net • https://github.com/weaveworks/weave • 最新2.8.1(2021/5現在) • Weaveworks社が主体で開発 • Linuxカーネルの機能を利⽤してL2ネットワー
クを作成 • Daemonがネットワークをセットアップし、 マシン間のルーティングを実施 • Weave Net routerというルータを利⽤し、特 定のMACアドレスが存在するピアホストを 相互にTCP接続 • NetworkPolicyをサポート • NetworkPolicyを利⽤する場合はもう⼀つの Daemonを利⽤ Weave Net Copyright © 2021, Oracle and/or its affiliates. 30
Cilium • https://github.com/cilium/cilium • “eBPF-based Networking, Observability, and Security” •
最新1.9.6(2021/5現在) • Isovalent社が主体で開発 • eBPF(extended Berkeley Packet Filter)をクラウド ネイティブネットワーキングとして利⽤する ⽬的で開発 • カーネル内で実⾏されるプログラムを利⽤し、 IDベースで実⾏されるフィルタリングで実現 • 従来(iptables)よりも⼤幅に性能が向上 • NetworkPolicyをサポート Cilium Copyright © 2021, Oracle and/or its affiliates. 31
kube-router • https://github.com/cloudnativelabs/kube-router • 最新v1.2.2(2021/5現在) • Cloud Native Labsが主体で開発 •
単⼀のDaemonSetやBinaryで構築 • 複数のコンポーネントやソフトウェアなど は不要 • Kubernetes専⽤のソリューション • 他オーケストレーションをサポートするた めオーバーヘッドなし • IPVS/LVS/BGPなどを利⽤ • オーバレイやSDNなどの考え⽅はなし • NetworkPolicyに対応 kube-router Copyright © 2021, Oracle and/or its affiliates. 32
Antrea • https://github.com/vmware-tanzu/antrea • 最新v1.0.1(2021/5現在) • 2021/4/10にGAになったばかり • VMware社が主体で開発 •
データパスにOpen vSwitchを利⽤ • iptableよりもパフォーマンス良 • 既存のOpen vSwitchリソースも利⽤可能 • Open vSwitchのカーネルモジュールが存在 することが前提 • VMware Tanzuにも統合 • Kubernetes v1.16以降でサポート • NetworkPolicyをサポート Antrea Copyright © 2021, Oracle and/or its affiliates. 33
CNIプラグイン名 Network Model NetworkPolicy 通信暗号化 (オプション含) 商⽤サポート flannel • overlay
• (routing(host-gw)) 利⽤不可 (Canalとしては可) あり なし Calico • overlay • routing 利⽤可能 あり あり Weave Net • overlay 利⽤可能 あり あり Cillium • overlay • routing 利⽤可能 あり あり kube-router • overlay • routing 利⽤可能 なし なし Antrea • overlay 利⽤可能 あり あり CNIプラグインまとめ Copyright © 2021, Oracle and/or its affiliates. 34
NetworkPolicyとPod間通信のセキュリティ Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright
© 2021, Oracle and/or its affiliates. 35 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
NetworkPolicy • クラスター内の通信を制限するFWのような機能 を実装(レイヤー3/4で機能) • Podに付与するlabelや送信元/送信先IPアドレ ス・ポートを利⽤して通信を制御(許可ルー ルのみを定義可能) • 許可ルール以外のトラフィックは拒否
• 事前にNetworkPolicyに対応しているCNIプラグイ ンのインストールが必要 • Namespaceごとに作成(適⽤範囲はNamespace) • Policy毎にNamespaceのラベルやPodのラベル などで適⽤する範囲を制御 • 複数のポリシーが存在する場合は、適⽤されて いるルールの和集合で制御(同⼀Podに対して、 NetwokPolicyが複数適⽤される場合は、許可 ルールを優先) NetworkPolicy Copyright © 2021, Oracle and/or its affiliates. 36 Namespace-A NetworkPolicy Namespace-B Namespace-C Namespace-A tier=app tier=app tier=appラベルの Podからの通信は 許可 tier=dbラベルの Podからの通信は 許可 env=devラベルの Namespaceにおける tier=appラベルのPod からの通信は許可 env:dev env=devラベルの Namespaceにおける tier=dbラベルのPodか らの通信は許可 tier=db tier=db
NetworkPolicyで設定する項⽬(.spec配下のフィールド) Copyright © 2021, Oracle and/or its affiliates. 37 設定項⽬
備考 ポリシーの⽅向 Ingress/Egress/両⽅ 設定対象のPod セレクタで定義。 省略した場合はNamespace内の全てのPodを対象。 許可するIPアドレス(CIDR形式) CIDRで指定。 CIDR範囲内のIPアドレスを除外することも可能。 許可するNamespace セレクタで指定。 省略した場合は全てのNamespaceを対象。 許可するPod セレクタで指定。 省略した場合は全てのPodを対象。 許可するポート ポート番号とプロトコルを指定。 ポート番号を省略した場合は全てのポートを対象。
namespaceSelectorとpodSelectorのYAML構⽂の注意点 Copyright © 2021, Oracle and/or its affiliates. 38 “app:helidon”ラベルの付いたNamespace内
の”role:frontend”ラベルの付いたPodからの接続 を許可 “app:helidon”ラベルの付いたNamespace内の全て のPodからの接続、または任意のNamespace内に ある”role:frontend”ラベルの付いたPodからの接 続を許可 この”–”の有無だ けでポリシーが ⽢々に!!
NetworkPolicyのManifest例 Copyright © 2021, Oracle and/or its affiliates. 39 Namespace-A
role:frontend role:app TCP:80 Namespace-B 10.2.3.1 VM 172.31.2.1 クライアント NetworkPolicy TCP:8080 クラスタ外 TCP:8080 project:test-app 定義するアドレスはク ラスタ外のIPアドレス を奨励。 原則、クラスタ外との 通信制御を⾏う場合に 利⽤。 適⽤するNamespace
NetworkPolicyによるアプリケーションの保護(セキュリティ) • コンテナアプリケーションはデフォルトで受信/送信の全ての通信を許可(non-isolated) • Podを隔離した状態(isolated)にすることで、必要な通信のみを許可 • レイヤ3/4レベルのネットワークセキュリティを提供(いわゆるFWのような働き) • Ex)データセンター内の通信は許可/データセンター外から通信は拒否 •
NetworkPolicyはアプリケーション保護のための(あくまでも)⼿段の⼀つ • ネットワークセキュリティの出発点としての機能 • NetworkPolicyはレイヤ7レベル(HTTP/HTTPS/gRPC…)の制御や脅威検出などの機能は提供しない • コンテナアプリケーションを保護する機能は他にもたくさん • NamespaceとRBAC認証 • Pod Security Policy(PSP)/OPA(Open Policy Agent) • TLS Mutual 認証/IstioなどのService Mesh(レイヤ7レベルの制御)…. • 他の機能と組み合わせて利⽤することで、より⾼度なセキュリティを実現 NetworkPolicyのメリットと注意点 Copyright © 2021, Oracle and/or its affiliates. 40
外部クライアントからのネットワークトラフィックを制御 NetworkPolicyのユースケース(1) Copyright © 2021, Oracle and/or its affiliates. 41
role:frontend role:cache role:db 通信許可 通信拒否 NetworkPolicy role:frontendのPod のみを許可 全ての通信を 許可 role:frontendのPod のみを許可
各コンテナアプリケーション間で受信可能なポート番号を制御 NetworkPolicyのユースケース(2) Copyright © 2021, Oracle and/or its affiliates. 42
role:frontend role:monitoring :5000 :8080 Namespace-A Namespace-B role:monitor 通信許可 通信拒否 NetworkPolicy role:frontendからの 5000番ポートの通信 のみ許可
デモ Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright
© 2021, Oracle and/or its affiliates. 43 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
デモシナリオ • Kubernetes上にWordPressをデプロイし、Pod間のアクセス制御をしてみる • ①全てのPod間のトラフィックを拒否 • ②フロントエンドPodのみ、全てのトラフィックを許可 • ③MySQL Podはフロントエンド
PodからのTCP3306ポートのみ通信を許可 環境 • Kubernetes環境:Oracle Container Engine for Kubernetes(OKE) • CNIプラグイン:flannel • NetworkPolicyのサポート:Calico(Canal) • ノード数:3ノード • VMスペック:VM.Standard2.2 • WordPress環境:v5.6(MySQL:v5.6) • それぞれのPodのNamespaceは同⼀(default) デモ概要 Copyright © 2021, Oracle and/or its affiliates. 44
WordPress構築完了時の状態 Copyright © 2021, Oracle and/or its affiliates. 45 tier:frontend
tier:mysql Load Balancer TCP:3306 WordPressサイトが 表⽰される 通信許可 通信拒否 NetworkPolicy
シナリオ1:全てのPod間トラフィックを遮断 Copyright © 2021, Oracle and/or its affiliates. 46 Worker
Node tier:frontend tier:mysql Load Balancer TCP:3306 default-deny-all frontend Podにも到達 しないので、ブラウ ザ上は無応答 通信許可 通信拒否 NetworkPolicy
シナリオ2:フロントエンドアプリへの全てのトラフィックを許可 Copyright © 2021, Oracle and/or its affiliates. 47 Worker
Node tier:frontend tier:mysql Load Balancer TCP:3306 default-deny-all allow-all-frontend Frontend Podには到達で きるが、データベース接 続エラーになる 同⼀Podに対してNetworkPolicyが適 ⽤された場合は、許可ルールが優先 通信許可 通信拒否 NetworkPolicy
シナリオ3:MySQL Podへのアクセスをフロントエンドアプリからのみに制限 Copyright © 2021, Oracle and/or its affiliates. 48
Worker Node tier:frontend tier:mysql Load Balancer TCP:3306 default-deny-all allow-all-frontend allow-ingress-mysql ブラウザ上も正常 にWordPressサイト が表⽰される 通信許可 通信拒否 NetworkPolicy
まとめ Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright
© 2021, Oracle and/or its affiliates. 49 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
Kubernetesにおけるネットワークの仕組み • ネットワーク名前空間を利⽤したPod内通信の実現 • CNIプラグインを利⽤したkubelet-Pod間とNodeを跨ぐPod間通信の実現 • NATなしでフラットなネットワークの構築 Kubernetesのネットワークを実現するCNIプラグイン • CNIプラグインの実装における3つのパターン(overlay/routing/underlay)
• CNIプラグインの特性によって適⽤すべきものを検討 NetworkPolicyの活⽤によるisolated Podの実現 • 各種CNIプラグインによるNetworkPolicyの実装がネットワークセキュリティの出発点 • 外部クライアントからのネットワーク制御やコンテナ間のポート番号による通信制御など • RBAC制御やIstioなどの上位レイヤーのセキュリティ機能を利⽤したより⾼度なセキュリティの実現 まとめ Copyright © 2021, Oracle and/or its affiliates. 50
デモ • デモで利⽤したManifest群 • https://github.com/oracle-japan/oke-networkpolicy-demo Dockerネットワーク関連 • 世界⼀わかりみが深いコンテナ&Docker入門 〜 その5:Dockerのネットワークってどうなってるの?
〜 • https://tech-lab.sios.jp/archives/20179 • Docker network 概論 • https://qiita.com/TsutomuNakamura/items/ed046ee21caca4a2ffd9 Kubernetesのネットワーク関連 • Kubernetesの公式ドキュメント • https://kubernetes.io/ja/docs/concepts/cluster-administration/networking/ • 整理しながら理解するKubernetesネットワークの仕組み • https://speakerdeck.com/hhiroshell/kubernetes-network-fundamentals-69d5c596-4b7d-43c0-aac8- 8b0e5a633fc2 参考情報&Special Thanks!! Copyright © 2021, Oracle and/or its affiliates. 51
CNI関連 • CNI関連 • https://github.com/containernetworking/cni • https://github.com/containernetworking/plugins • 各種CNIプラグイン情報 •
flannel:https://github.com/flannel-io/flannel • Calico:https://github.com/projectcalico/calico • Weave Net:https://github.com/weaveworks/weave • cilium:https://github.com/cilium/cilium • Kube-router:https://github.com/cloudnativelabs/kube-router • Antrea:https://github.com/vmware-tanzu/antrea • NetworkPolicy Editor • https://editor.cilium.io/ 参考情報&Special Thanks!! Copyright © 2021, Oracle and/or its affiliates. 52
KubeCon + #CloudNativeCon Europe 2021(May, 4-7) • https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/ • セッションの中にこんなものが・・・
• “Towards CNI v2.0” - Casey Callendrello, Red Hat • そのうちYouTubeなどで公開される…?? • ざっくりとした概要 • 現状のCNIであるCNI v1.0は⾮常に便利な⼀⽅で、いくつか課題も存在 • プラグイン(バイナリ)のセキュリティリスク… • CNIプラグインのConfigurationを定義しなければならないことによるトラブル… • “CNI v2.0”を進めよう!! 最後に・・・ Copyright © 2021, Oracle and/or its affiliates. 53 検討は始まったばかり・・・実現はまだまだ先・・・
ご清聴ありがとうございました 54 Copyright © 2021, Oracle and/or its affiliates.
None