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
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
Deep Data Security 機能解説
oracle4engineer
PRO
2
280
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
1
560
Oracle AI Databaseデータベース・サービスのメンテナンス(BaseDB/ExaDB-D/ExaDB-XS)
oracle4engineer
PRO
4
1.9k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.6k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2.1k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3.2k
CrossplaneによるCloud Native Control Plane
oracle4engineer
PRO
0
130
Other Decks in Technology
See All in Technology
地域 SRE コミュニティ最前線 / SRE NEXT 2026 Discussion Night Track C
muziyoshiz
0
180
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
330
グローバルチームと挑むプロダクト開発
sansantech
PRO
1
170
テスト設計の本質を改めて考えてみる~生成AIを活用する時代だからこそ、作ったテストの説明性を高めよう~
yamasaki696
1
400
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
280
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
560
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
190
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
8.1k
Claude Code 珍プレー好プレー
shinyasaita
0
300
金融の未来を考える / Thinking About the Future of Finance
ks91
PRO
0
180
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
580
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
140
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Chasing Engaging Ingredients in Design
codingconduct
0
230
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
330
Test your architecture with Archunit
thirion
1
2.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Code Review Best Practice
trishagee
74
20k
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