Oracle Cloud Hangout Cafe Season 4 #2「Kubernetesのネットワーク」(2021年5月12日開催)
はじめに
「Oracle Cloud Hangout Cafe」(通称「おちゃかふぇ」/以降、OCHaCafe)は、日本オラクルが主催するコミュニティの1つです。定期的に、開発者・エンジニアに向けたクラウドネイティブな時代に身につけておくべきテクノロジーを深堀する勉強会を開催しています。
連載第3回の今回は、2021年5月12日に開催された「Oracle Cloud Hangout Cafe Season 4 #2『Kubernetesのネットワーク』」の発表内容に基づいて紹介していきます。
Dockerのネットワークから始まり、Kubernetesクラスタを実現するネットワークや、そのインタフェースであるContainer Network Interface(CNI)の仕組み、代表的なCNIプラグイン、CNIプラグインを使用したファイアウォールの仕組みであるNetworkPolicyを見ていきます。
アジェンダ
今回は、以下のアジェンダの流れに従って、順に解説します。
- Dockerのネットワーク
- bridge、host、none
- Kubernetesのネットワークの仕組み
- ネットワーク名前空間、Container Network Interface(CNI)、Cluster Networking
- Container Network Interface(CNI)の代表的なプラグイン
- flannel、Calico、Weave Net、Cilium、kube-router、Antrea
- NetworkPolicyとPod間セキュリティ
- NetworkPolicy
発表資料と動画については、下記のリンクを参照してください。
【資料リンク】
【動画リンク】
Dockerのネットワーク
まず、Kubernetesのネットワークに入る前に、Dockerのネットワークをおさらいします。Dockerのネットワークには、以下の3つの要素があります。
- 仮想ブリッジ
- Linux上に仮想的なL2スイッチを構成する機能
- 仮想マシンやホスト同士を通信させるために利用
- veth
- 仮想的なL2ネットワークインタフェース(仮想NIC)
- 2つのインタフェースをペアとして作成
- iptables
- Linuxに実装されたパケットフィルタリング/ネットワークアドレス変換の機能
- ファイアウォール/NAT(SNAT/DNAT/Masquerade)などの機能を提供
Dockerがデフォルトで用意しているネットワーク
Dockerのネットワークは、デフォルトで以下の3パターンが実装されています。これらはDockerインストール直後から利用できるネットワークで、docker network ls
で表示できます。
- bridge
- Dockerのデフォルトのネットワークであり、最も利用される仕組み
- Linuxのbridge機能を利用してLinux上にDockerおよびコンテナ用のネットワークを構築
- Dockerが
docker0
(仮想ブリッジ)というbridge networkを作成- コンテナ側とDockerデーモン側のネットワーク(≠ホストネットワーク)をvethペアで接続
docker0
はDockerデーモン側のネットワークとホストネットワークのvethと接続
- コンテナそれぞれにIPを付与
- ホストの任意ポートをコンテナの任意のポートにマッピングできる(
docker run
コマンドの-p
(--publish
)オプションの利用) - 独自のbridge networkも作成できる
- host
- ホスト側のネットワークインタフェースに接続
- ネットワーク設定はホストと同一
- bridgeのようなポートマッピングは不可(
docker run
コマンドの-p
(--publish
)オプションの利用)- 特定のポートで起動するコンテナを2つ以上起動させることはできない
- ホスト側のネットワークインタフェースに接続
- none
- ループバックアドレス(localhost)のみが利用できるネットワーク
- 主にコンテナのネットワークを無効化したい場合に利用
ここまでは同一ホスト上のコンテナネットワークについて見てきましたが、参考として、異なるホスト上に存在するコンテナのネットワークの仕組みであるoverlay networkという仕組みも紹介します。
overlay networkはVXLAN(L2 over L3)の技術を利用して実現するもので、Dockerホストが異なる拠点やデータセンタに存在しても、同じネットワーク上に存在しているものとしてアクセスできます。overlay networkにはKVS(Key-Value Store)が必須になっており、Dockerホストのディスカバリなどに利用します。Key-Value StoreはConsul/etcd/ZooKeeperをサポートしています。
bridgeネットワークの操作
ここでは、Dockerネットワークについて実際にCLIでの操作を見ていきます。今回は先ほど紹介した3パターンの中から、最もよく利用されるbridgeについて解説します。
- Dockerネットワークの作成
$ docker network create --driver bridge <ネットワーク名>
- Dockerネットワークの詳細確認
$ docker network inspect <作成したネットワーク名>
- 作成したbridgeネットワークの利用(1)
$ docker run --net=<作成したネットワーク名> --name=<コンテナ名> image名
- 作成したbridgeネットワークの利用(2)
$ docker network connect <作成したネットワーク名> <コンテナ名>
Dockerのネットワークにおける課題
Dockerのネットワークの仕組みには課題があります。特に最もよく利用されるbridgeネットワークでは、iptablesによるNAT形式での通信を利用(overlay networkは除く)します。この仕組みはコンテナが増えるたびにiptable(NATテーブル)に追記していくことになり、コンテナが増えれば増えるほどNATテーブルの管理が煩雑になります。
この後で紹介するKubernetesは、特にコンテナ間の通信について「NAT不要のテクノロジーを利用してフラットなネットワークを構築しよう」という世界観に基づいて設計されています。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- コンテナとKubernetes作成・運用に関するセキュリティ
- Oracle Cloud Hangout Cafe Season5 #3「Kubernetes のセキュリティ」(2022年3月9日開催)
- コンテナ関連技術の現状を確認しておく
- CNDT2021、HPEのアーキテクトが解説するKubernetesネットワークの最新情報
- Project CalicoをKubernetesで使ってみる:構築編
- Kubernetes環境を構築して、実際にコンテナを動かしてみよう
- Docker1.9のマルチホストネットワーク
- 新しいセキュリティアプローチ、CalicoとIstio、Kubernetesによるゼロトラストネットワークとは
- Kubernetesの基礎
- CNDT 2022、IsovalentのアドボケイトがeBPFを解説