Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oracle Cloud Hangout Cafe - Kubernetesのネットワーク

Oracle Cloud Hangout Cafe - Kubernetesのネットワーク

140494d272a4d89883a94fdfdb29dea2?s=128

oracle4engineer
PRO

May 12, 2021
Tweet

Transcript

  1. Kubernetesのネットワーク Oracle Cloud Hangout Cafe 4 #2 Takuya Niita Oracle

    Corporation Japan May 12, 2021 コンテナネットワークの総復習
  2. 2 Copyright © 2021, Oracle and/or its affiliates. 1. Dockerネットワークの基礎

    2. Kubernetesにおけるネットワークの仕組み 3. CNI(Container Network Interface)の代表的なプラグイン 4. NetworkPolicyとPod間通信のセキュリティ 5. デモ 6. まとめ アジェンダ
  3. • 仁井⽥ 拓也 • ⽇本オラクル株式会社 • テクノロジー・クラウド・エンジニアリン グ本部 • 前職は某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
  4. Dockerネットワークの基礎 Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright

    © 2021, Oracle and/or its affiliates. 4 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
  5. Dockerネットワークの構成要素 • 仮想ブリッジ • Linux上に仮想的なL2スイッチを構成する機能 • ホストOSと仮想マシンが通信するためのインタフェースなどで利⽤ • veth •

    仮想的なL2のネットワークインターフェース(仮想NIC) • 2つのインタフェースがペアとして作成され、インタフェース間での通信が可能 • iptables • Linuxに実装されたパケットフィルタリング/ネットワークのアドレス変換機能 • ファイアウォール/NAT(SNAT/DNAT/Masquerade)等の機能を提供 Dockerネットワークを構成する主な要素 Copyright © 2021, Oracle and/or its affiliates. 5
  6. 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
  7. 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
  8. 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
  9. noneネットワーク • コンテナにnoneネットワークを利⽤すると ループバックデバイス(localhost)のみが残存 • 上記以外のネットワークインタフェースは なし • 主にコンテナのネットワークを無効化した場 合に利⽤

    Dockerのネットワークを俯瞰してみる(none) Copyright © 2021, Oracle and/or its affiliates. 9 ホスト側のネットワーク(192.168.1.0/24) eth0 仮想ブリッジとの接続はなし 外部ネットワークとの接続はなし
  10. 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
  11. 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 <作成したネットワーク名> <コンテナ名>
  12. 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 ・ ・ ・
  13. Kubernetesにおけるネットワークの仕組み Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright

    © 2021, Oracle and/or its affiliates. 13 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
  14. 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 ① ② ③
  15. 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/
  16. ネットワーク名前空間 • 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
  17. CNI(Container Network Interface) • コンテナネットワークを構築するプラグイン を作成するための仕様(ライブラリ) • https://github.com/containernetworking/cni • CoreOS社によって提唱

    • 現在はCNCFに移管され管理 • CNIが求めている実装すべき操作は以下。 • コンテナをネットワークへ追加/削除 • コンテナが動作しているかの確認 • バージョン情報の返却 ② kubelet-Pod間通信(1) Copyright © 2021, Oracle and/or its affiliates. 17
  18. 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 接続
  19. 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
  20. 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へ参加
  21. 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
  22. 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 プラグイン
  23. 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
  24. 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/
  25. 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のネットワーク
  26. 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
  27. 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
  28. 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という⽅式もある
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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のネットワーク
  36. 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
  37. NetworkPolicyで設定する項⽬(.spec配下のフィールド) Copyright © 2021, Oracle and/or its affiliates. 37 設定項⽬

    備考 ポリシーの⽅向 Ingress/Egress/両⽅ 設定対象のPod セレクタで定義。 省略した場合はNamespace内の全てのPodを対象。 許可するIPアドレス(CIDR形式) CIDRで指定。 CIDR範囲内のIPアドレスを除外することも可能。 許可するNamespace セレクタで指定。 省略した場合は全てのNamespaceを対象。 許可するPod セレクタで指定。 省略した場合は全てのPodを対象。 許可するポート ポート番号とプロトコルを指定。 ポート番号を省略した場合は全てのポートを対象。
  38. 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からの接 続を許可 この”–”の有無だ けでポリシーが ⽢々に!!
  39. 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
  40. 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
  41. 外部クライアントからのネットワークトラフィックを制御 NetworkPolicyのユースケース(1) Copyright © 2021, Oracle and/or its affiliates. 41

    role:frontend role:cache role:db 通信許可 通信拒否 NetworkPolicy role:frontendのPod のみを許可 全ての通信を 許可 role:frontendのPod のみを許可
  42. 各コンテナアプリケーション間で受信可能なポート番号を制御 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番ポートの通信 のみ許可
  43. デモ Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright

    © 2021, Oracle and/or its affiliates. 43 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
  44. デモシナリオ • 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
  45. WordPress構築完了時の状態 Copyright © 2021, Oracle and/or its affiliates. 45 tier:frontend

    tier:mysql Load Balancer TCP:3306 WordPressサイトが 表⽰される 通信許可 通信拒否 NetworkPolicy
  46. シナリオ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
  47. シナリオ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
  48. シナリオ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
  49. まとめ Takuya Niita Oracle Corporation Japan May 12, 2021 Copyright

    © 2021, Oracle and/or its affiliates. 49 Oracle Cloud Hangout Cafe 4 #2 – Kubernetesのネットワーク
  50. 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
  51. デモ • デモで利⽤した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
  52. 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
  53. 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. ご清聴ありがとうございました 54 Copyright © 2021, Oracle and/or its affiliates.

  55. None