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

Kubernetes Networking 101

Kohei Ota
August 25, 2020

Kubernetes Networking 101

Kohei Ota

August 25, 2020
Tweet

More Decks by Kohei Ota

Other Decks in Technology

Transcript

  1. 自己紹介 名前: 太田 航平 (@inductor) 所属: HPE 役職: ソリューションアーキテクト Kubernetes

    SIG-Docs Japanese localization owner Cloud Native Ambassador Docker Meetup Tokyo、CNDT2020運営
  2. アジェンダ • Dockerのネットワーク ◦ コンテナとネットワークの関係 • Kubernetesのネットワーク ◦ DockerとKubernetesのネットワーク要件の違い ▪

    Docker→Kubernetesに思考を引き上げる場合に生まれるネットワークの問題 ▪ Kubernetesでの解決策 • Kubernetesのネットワークを形作るコンポーネントとその役割 ◦ kube-proxy ◦ CNI ▪ よく使われるCNIの特徴
  3. Dockerとネットワーク、ボリューム Volume Volume Volume Docker Volume Docker Container Docker Network

    docker0 bridge ローカルの80 仮想NIC 仮想NIC 仮想NIC 10.0.0.0/24 172.16.0.0/24
  4. ネットワークとボリュームは外部割り当て? Volume Volume Volume Docker Volume Docker Container Docker Network

    docker0 bridge ローカルの80 仮想NIC 仮想NIC 仮想NIC 10.0.0.0/24 172.16.0.0/24
  5. ネットワークとボリュームは外部割り当て Volume Volume Volume Docker Volume Docker Container Docker Network

    docker0 bridge ローカルの80 仮想NIC 仮想NIC 仮想NIC Kubernetes Novice Tokyo #2 のセッション資料が詳しいので 合わせてご覧ください
  6. Dockerネットワークの種類 • bridge - 指定がない場合にデフォルトで使用 ◦ 所属するコンテナが直接通信でき、お手軽 • macvlan -

    macvlanが使える ◦ 仮想NICにMACアドレスが持てる ◦ VMから移行したい場合などに使えるかも?ただし ホストのNICが使えなくなる制限有 • none - 「何も繋がない」ができる ◦ loopback(127.0.0.1)以外に仮想NICが繋がらないモード • Network plugins - その他サードパーティのプラグインを使う場合 ◦ プラグイン自体とても少なく利用例が ほとんどない
  7. コンテナの仕組み / /home /var /tmp /var/a /var/b /var/c /tmp/d /

    / / / pivot_root pivot_root pivot_root pivot_root あるディレクトリをルートに見せかける pivot_root
  8. コンテナの仕組み / /home /var /tmp /var/a /var/b /var/c /tmp/d /

    / / / namespace namespace namespace namespace ユーザーIDやNW、プロセス空間などを分離する namespace root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24
  9. コンテナの仕組み / /home /var /tmp /var/a /var/b /var/c /tmp/d /

    / / / 各領域のCPU、メモリリソースなどを cgroupで制限 root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB
  10. コンテナの仕組み / /home /var /tmp /var/a /var/b /var/c /tmp/d /

    / / / アプリケーションが動作するために必要なファイルたちを tar.gz形式でパッケージングしてこいつらの上にのっけて ... root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian
  11. /var /tmp コンテナの仕組み / /home /var/a /var/b /var/c /tmp/d /

    / / / 展開したファイルシステムの実行ファイルをプロセスとして起動! 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 プロセス起動!
  12. /var /tmp コンテナの仕組み / /home /var/a /var/b /var/c /tmp/d /

    / / / 展開したファイルシステムの実行ファイルをプロセスとして起動! 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 プロセス起動! これ1つ1つがコンテナ
  13. /var /tmp コンテナの仕組み / /home /var/a /var/b /var/c /tmp/d /

    / / / 展開したファイルシステムの実行ファイルをプロセスとして起動! 1CPU 2GB 1CPU 2GB 1CPU 2GB 2CPU 4GB nginx on Ubuntu Node on Alpine Ruby on CentOS Debian root 10.0.0.1/24 root 10.0.0.2/24 root 10.0.0.3/24 root 10.0.0.3/24 プロセス起動! これ1つ1つがコンテナ これがコンテナイメージね
  14. Dockerコンテナとネットワークの関係 • コンテナはさまざまなリソースを隔離した結果生まれるもの ◦ ネットワークもその1要素で、 NICは付けたり付けなかったりできる • Noneドライバーを用いた場合、ネットワーク的に隔離されたコンテナができあが る •

    ブリッジの場合は仮想スイッチにどんどん接続されて相互に接続ができる ◦ Dockerの内部DNSも勝手に参加するので、コンテナ名がついていれば名前で DNSも引ける ◦ 設定ファイルでdb:3306とかweb:80とかapp:3000みたいなことが書けるのはそのおかげ ◦ 簡易的ではあるがいわゆる「サービスディスカバリ」の一種
  15. Kubernetesの仕組み Pod Pod Pod Pod network(overlay) Service Network(overlay) Node Network(not

    overlay) 普通のサーバーがつながる ネットワーク ClusterIPなどサービス間の 通信で使うネットワーク コンテナ(Pod)自体に IPアドレスを持たせるためのネッ トワーク kube-proxy CNI
  16. Kubernetesの仕組み Pod Pod Pod Node Network(not overlay) Pod network(overlay) Service

    Network(overlay) 普通のサーバーがつながる ネットワーク ClusterIPなどサービス間の 通信で使うネットワーク コンテナ(Pod)自体に IPアドレスを持たせるためのネッ トワーク Podが入れ替わっても 同じように動作する Nodeが障害を起こすと Podは自動で退避 kube-proxy CNI
  17. Kubernetesのネットワークコンポーネント • kube-proxy - 各ノードで動作 ◦ 各ノードでコンテナネットワークへの入り口を作る役割 ▪ 無いと、コンテナの外と中の経路が通らない ◦

    Linuxのiptablesやipvsを利用(最近ではeBPFベースの実装もある ) ◦ Serviceの実装 ▪ https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/service.go • CNI(Container Network Interface) - クラスター全体で動作 ◦ Docker network driver相当のプラグイン機構を提供 ◦ Overlay Networkを提供 ◦ 外のネットワーク(プロトコル)とKubernetesのネットワークをつなげる ◦ 無いと、NodeのステータスがReadyにならない
  18. Kubernetesのネットワークコンポーネント • kube-proxy ◦ 各ノードでコンテナネットワークへの入り口を作る役割 ◦ Linuxのiptablesやipvsを利用(最近ではeBPFベースの実装もある ) ◦ Serviceの実装

    ▪ https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/service.go • CNI(Container Network Interface) ◦ Docker network driver相当のプラグイン機構を提供 ◦ クラスター全体のOverlay Networkを提供 ◦ 外のネットワーク(プロトコル)とKubernetesのネットワークをつなげる ◦ 無いと、NodeのステータスがReadyにならない
  19. Kubernetesのネットワークコンポーネント • kube-proxy ◦ 各ノードでコンテナネットワークへの入り口を作る役割 ◦ Linuxのiptablesやipvsを利用(最近ではeBPFベースの実装もある ) ◦ Serviceの実装

    ▪ https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/service.go • CNI(Container Network Interface) ◦ Docker network driver相当のプラグイン機構を提供 ◦ クラスター全体のOverlay Networkを提供 ◦ 外のネットワーク(プロトコル)とKubernetesのネットワークをつなげる ◦ 無いと、NodeのステータスがReadyにならない CNIでアタッチしたNIC kube-proxyでコンテナ外 からの通信を流す
  20. いろいろなCNI • Calico ◦ 最も人気&歴史がある ◦ BGP(L3)ベースのネットワークでスケールしやすい • Cilium ◦

    eBPFを用いた高パフォーマンス &スケーラブルなプラグイン ◦ 最近人気になってきた ◦ GKEでも最近導入がアナウンスされた • Weave Net • Amazon VPC CNI plugin