0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure Kubernetes Service(旧Azure CNIネットワークモデル)の内部構造について

Posted at

はじめに

4回に分けてDockerとAzure Kubernetes Service(以下、AKS)の内部ネットワーク構造に注目し、深堀りしていきます。最終回では、両者を比較し共通点・相違点についてまとめます。
第3回目は、AKSのAzure CNIネットワークモデルにおける内部構造について整理していきます。
なお、検証環境は以下の通りです。

検証環境(Azure VM)

OS:Linux (ubuntu 20.04)
Size:Standard D2s v3 (2 vcpus, 8 GiB memory)

前回の記事

注意点

この記事の検証時点でのAKSのネットワークモデルは「kubenet」と「Azure CNI」の2つでしたが、それぞれ2024年6月頃に名称が変更になり技術要素も(微妙に)変わりました。それぞれ現在では「Azure CNIオーバーレイ」と「フラットネットワーク」という名前になりました。
image.png

よって「Azure CNI」ネットワークモデルはレガシなモードとなりましたが、根本的な考え方は同じですし、Dockerとの比較という意味で検証内容自体は参考になると思いますので、以下に整理していきます。

参考

Kubernetesとは

  • コンテナ化されたアプリケーションのデプロイメント、スケーリング、および管理を自動化するオープンソースのコンテナオーケストレーションプラットフォームです。以下、k8sと記載します。
  • クラウドではサーバ機器や回線など物理的な要素が抽象化されていますが、kubernetesでは負荷分散やIaaSとしてのサーバ、ルーティングテーブルなどのコンポーネントが抽象化されています(ServiceやNode、Podなど)。
  • AKSの裏ではAzure Load Balancer、仮想マシンスケールセット(VMSS)、OSのiptablesなどのコンポーネントが組み合わさってk8sの機能が実装されています。

image.png

詳しくは以下の以前の記事を参考にしてください。

AKSとは

AKSはフルマネージドKubernetesサービスです。AKSは、Kubernetesクラスタのデプロイ、管理、スケーリングを簡素化することを目的としています。

詳しくは以下の以前の記事を参考にしてください。

AKSにおけるネットワークモデル

AKSには2つのネットワークモデルがありました(先述の通り下記の画像は検証時点でのものです)。

image.png

Azure CNIとは

image.png
image.png

元々CNIという標準的なContainer Networkのモデルがあり、k8sはこれに対応しています。CNIはサードパーティ製のものが割りと多くあり、これはAzure版のCNIというイメージです。
NodeのサブネットとPodのサブネットが同じです(Podが直接VNetに接続されているイメージ)。
図にすると以下のようなイメージです。
image.png

ポイント

  1. Dockerのbridgeネットワークモデルやkubenetネットワークモデルにはあった仮想ブリッジが存在しません。 詳しくは後述します
  2. Podごとに異なるネットワーク名前空間が割り当てられます。これにより、Pod間やPod‐Node間のネットワークを隔離しています
  3. PodのサブネットとNodeのサブネットはレンジが同じです

実際に情報を取得して上記が本当か、検証してみます。

検証

AKSをkubenetネットワークモデルで作成します。

az aks create --name azfooaks03 --resource-group AZ-foo --node-count 2 --kubernetes-version 1.26.3 --node-vm-size Standard_DS2_v2 --generate-ssh-keys --service-principal $APP_ID --client-secret $SP_PWD --network-plugin azure --vnet-subnet-id [事前に作成したsubnetのリソースID] --dns-service-ip [“service-cidr”オプションで指定する範囲内でDNSサーバのIPアドレスを指定] --service-cidr [他のVNet/subnetと重複しないCIDR]

色々と情報を取得すると以下のようになりました。
image.png

1~3のポイントについて全てその通りになっていますね。
次にホスト間通信について見てみます。

ホスト間通信

image.png
前回までと同様に左から右へpingをしてみると、NATされていないことがわかりますね

解決

ブリッジが存在しない件ですが、Azure CNIには2つのモードが関わっています。
image.png

  • bridge mode
  • transparent mode

bridge mode

“azure0”というbridgeがNode内に作成され、Node内のPodはこのbridgeによってL2ブリッジングされる
Kubernetesバージョン1.2.0以降、選ぶことのできないモード

transparent mode

bridgeは作成されず、L3ルーティングされる(Azure VNetのSDNの世界)
Kubernetesバージョン1.2.0以降、Azure CNIにおける唯一のモード
image.png

デフォルトではtransparent modeが選択されていたためにブリッジが存在しなかった、ということになります。
また、NATされていなかったのも、transparent modeの仕様でSDNの世界でL3ルーティングされていたのです。

まとめ

Azure CNIネットワークモデルにおける特徴をまとめると以下の通りとなります。

  1. bridgeモードの場合、Node内にbridgeが作られる
    transparentモードの場合、bridgeは作成されない。
  2. PodごとにNW namespaceが異なる
  3. PodのサブネットとNodeのサブネットは、レンジが同じ
  4. bridgeモードの場合、bridgeからNodeのeth0に転送されるときにNATされる
    transparentモードの場合、L3ルーティングされる

次回は最終回でDocker、AKSのネットワークモデルについて比較した結果をまとめます。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?