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

Amazon VPC CNIに学ぶCNI-LT版

Avatar for bells17 bells17
September 02, 2025
45

Amazon VPC CNIに学ぶCNI-LT版

Avatar for bells17

bells17

September 02, 2025
Tweet

Transcript

  1. ▶ @bells 1 7 ▶ Software Engineer@ 3 -shake inc.

    ▶ CNCF Ambassadors ▶ Kubernetes Novice Tokyo Organizer ▶ GitHub: @bells 1 7 ▶ @bells 1 7 _
  2. Amazon VPC CNI ▶ Amazon EKSにサポートされている唯 一 のCNIプラグイン ▶ CNIプラグイン本体+aws-k

    8 s-agent(L-IPAMD)+αなどによって構成 ▶ Elastic Network Interface(ENI)をPodに割り当てることでVPC内から Podにリクエストできる構成になっている ▶ Pre fi xモード(pre fi x delegation)により予めNodeに対して /28 ( 1 6 IPアドレス)を割り当てておくことで、 Podに対するIPアドレスの割当を迅速に 行 うことができる ▶ その他様々な設定オプション有り(めっちゃある) 今回の検証バージョンはv 1 . 2 0 . 1 となります
  3. Helm Chart構成 下記の2つにより構成 ▶ aws-vpc-cni ▶ cni-metrics-helper cni-metrics-helperだけ独 立 して

    デプロイ可能 https://github.com/aws/amazon-vpc-cni-k 8 s/tree/v 1 . 2 0 . 1 /charts より
  4. aws-vpc-cni(Chart) ▶ DaemonSetだけが動いてる ▶ 実 行 イメージ 一 覧: +

    aws-vpc-cni-init(init container) + aws-vpc-cni + aws-network-policy-agent(optional) https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0 . 1 /charts/cni-metrics-helper/templates/deployment.yaml より
  5. aws-vpc-cni-init 下記2つを 行 うinit container ▶ https://github.com/ containernetworking/plugins の プラグインバイナリ群を

    ホストマシンにインストール ▶ カーネルパラメータを設定 https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0 . 1 /cmd/aws-vpc-cni-init/main.go より
  6. aws-vpc-cni 下記を 行 うアプリケーション ▶ 独 自 CNIプラグインを ホストマシンにインストール ▶

    CNI con fi gを 生 成を ホストマシンにインストール ▶ aws-k 8 s-agent(L-IPAMD)の起動 https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0 . 1 /cmd/aws-vpc-cni/main.go より
  7. CNI Con fi g このテンプレートから 生 成される 設定ファイルから下記の4プラグイン が利 用

    されていることがわかる ▶ aws-cni(routed-eni-cni-plugin) ▶ egress-cni + host-local ▶ portmap https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0 . 1 /misc/ 1 0 -aws.con fl ist より
  8. aws-k 8 s-agent(L-IPAMD) https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0

    . 1 /docs/cni-proposal.md より ▶ 名前の通りホストマシンに割り当てられたPodのためのIPアドレス 管理を 行 っている ▶ AWSのインスタンスメタデータサービス(IMDS)やAPIを通して現状 の割当状況の管理や把握を 行 っている ▶ aws-k 8 s-agent(L-IPAMD)が 行 っているのはあくまでNode(EC 2 インスタンス)に割り当てられたIPアドレスの管理までで、Podへの 割当作業などはCNIプラグインが 行 っている ▶ ただし、CNIプラグインからのIPアドレスを要求などを受けるため のgRPCが起動している
  9. CNI Con fi g(再掲) このテンプレートから 生 成される 設定ファイルから下記の4プラグイン が利 用

    されていることがわかる ▶ aws-cni(routed-eni-cni-plugin) ▶ egress-cni + host-local ▶ portmap https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0 . 1 /misc/ 1 0 -aws.con fl ist より
  10. aws-cni(routed-eni-cni-plugin) L-IPAM払い出したIPアドレスを利 用 して下記のような ネットワーク設定を実 行 ▶ PodのMACアドレスを 生 成

    ▶ vethを設定(+IPアドレスを付与) ▶ static arpを設定 ▶ route tableを設定 ▶ route ruleを設定
  11. egress-cni 外部ネットワークと通信するためのネットワーク設定を 行 う ▶ IPAMプラグインを実 行 (host-local)してegress 用 IPアドレスを設定

    + host-localは指定のアドレス範囲からアドレスの払い出しを 行 ってくれるCNIプラグイン ▶ vethなどを設定 ▶ snatを設定
  12. 今回の感想 ▶ はじめてCNIのアプリケーションコードをちゃんと読んでみたけど、読んでみたらCNIの 「ネットワークわからん感」からくる抵抗感がかなりなくなったので良かった ▶ CNIプラグインの実 行 のされ 方 や、CNIプラグインと連携するコンポーネントの実装例とし

    てかなり勉強になった ▶ 今回 生 成AIを多少駆使しながら読んでみたけど、 生 成AIに説明されてわかるのと実際に 自 分でも読むことで、点と点がつながって理解できるのとでは天と地の差があると思ったの で今回みたいなコード読みみたいのはこれからもやっていって良さそうだなと思った
  13. 参考リンク ・ 画像など引 用 元 一 覧 ▶ https://github.com/aws/amazon-vpc-cni-k 8

    s/tree/v 1 . 2 0 . 1 ▶ https://github.com/aws/aws-network-policy-agent/tree/v 1 . 2 . 4 ▶ https://github.com/aws/amazon-vpc-resource-controller-k 8 s/tree/v 1 . 7 . 1 0 ▶ https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0 . 1 /docs/cni-proposal.md ▶ https://github.com/aws/amazon-vpc-cni-k 8 s/blob/v 1 . 2 0 . 1 /misc/ 1 0 -aws.con fl ist ▶ https://docs.aws.amazon.com/eks/latest/best-practices/vpc-cni.html ▶ https://docs.aws.amazon.com/eks/latest/best-practices/pre fi x-mode-linux.html ▶ https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cni-custom-network-tutorial.html ▶ http://docs.aws.amazon.com/eks/latest/userguide/security-groups-pods-deployment.html ▶ https://simyung.github.io/aws-eks-best-practices/networking/custom-networking/ ▶ https://github.com/containernetworking/plugins ▶ https://github.com/cncf/artwork/blob/main/projects/cni/stacked/color/cni-stacked-color.png ▶ https://github.com/cncf/artwork/blob/main/projects/cni/icon/color/cni-icon-color.png ▶ https://about.x.com/ja/who-we-are/brand-toolkit
  14. Thanks / Question? ▶ @bells 1 7 ▶ zenn: https://zenn.dev/bells

    1 7 /scraps/ 9 1 7 1 2 3 fda 6 8 3 4 d 本 日 の調査内容ベース ▶ Slide: https://speakerdeck.com/bells 1 7 ▶ @bells 1 7 _