1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CyberAgent Group SREAdvent Calendar 2023

Day 16

VPC CNI IPAMDとSecurity Groups For Podを徹底分析

Last updated at Posted at 2023-12-13

この記事は、CyberAgent Group SRE Advent Calendar 2023の16日目の記事です。

はじめに

技術本部 サービスリライアビリティグループ(SRG)の石川 雲(@kumo_rn5s)です。

SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
SRGでは以前から技術記事を執筆していますが、Google検索での最適化を施していないため、あまり知られていないようです。より多くの方に当社の記事を読んでいただくために、本記事の主要部分をSRGのサイトで是非ご覧ください。

この記事では、VPCCNIアドオンの動作と原理を解説し、Security Groups for Pod(SGP)を使用した際の注意点について説明します。また、2020年から発生し始めた「add cmd: failed to assign an IP address to container」というエラーに関して、ソースコードレベルの説明と分析を行う内容となっています。

AWS VPCアドオン

AWS VPC CNIは、EKSのネットワーキング構成において中心的な役割を果たしており、AWS VPCとネイティブな連携することで、EKS上でのネットワーク管理を効率化しています。

AWS VPC CNIは以下のコンポーネントによって構成されています。

  • CNI Plugin

    CNIの仕様に沿って、gRPCでIPAMDと通信してIPを取得し、ネットワーク設定を行う

  • IPAMD Plugin

    各NodeにおいてAWS ENIを管理し、迅速なPod起動のためにIPアドレスの事前付与を行う

それぞれの関係はProposalに示された図に基づいています(実際に呼ばれる名前と若干違います)。

image.png

仕組み

VPC CNIは、PodのIP割り当てとネットワークルーティングの機能を主に提供しています。

  • PodのIP割り当て

    PodへのIPアドレス割り当ては、EC2 ENIとIPAMDを使用して行われます。一般的なフローは以下のようになります。

  • ネットワークルーティング

    Pod間やPodから外部へのネットワークルーティングは、複数のルーティングテーブルとIPTABLEを使用して構成されています。その使い分けは以下の通りです。

    • Pod ↔ 外部ネットワーク: IPTABLE

      通常のSNATのように、パケットが仮想ネットワークインターフェース(veth)とEC2 ENI(ethなど)を通過する際に実行されます。

    • Pod ↔ Pod: ルーティングテーブル

      Pod間の通信やPodから外部への通信は、主にvethとethなどを介して行われ、さまざまなルーティングテーブルが暗黙的に適用されます。

ライフサイクル

VPCCNIのバイナリは、主に7種類があります

Binary 説明
aws-k8s-agent IPAMDのgRPCサーバ
aws-cni CNI Pluginの実装、主にVPC内ENI/IPとLinux Networkなどの設定を管理する
grpc-health-probe IPAMD向けヘルスプローブの確認ツール
cni-metrics-helper メトリクスを収集し、CloudWatchへPutMetricsするサポートツール
aws-vpc-cni-init (initContainer)システムパラメータ、IPV6、各バイナリファイルの複製など、前提条件が整っていることを保証するための初期化コンポーネント
aws-vpc-cni 過去ではentrypoint.shとして存在し、現在はIPAMDの起動とライフサイクル管理を行うツール
egress-cni CNI Pluginの実装、主にSNATを使用して、アウトバウンドトラフィックのための特定のルーティングルールやポリシーを管理する

aws-vpc-cni: 過去では、entrypoint.shによって起動の順番などを制御していましたが、1.11以降にバイナリファイルの制御は主にGoファイルによって行われます。

......

IPADMとadd cmdエラーについて

残りの内容については、ぜひSRGのサイトでご確認ください。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?