Skip to content

Amazon VPC CNI Plugin for Kubernetes

  • Amazon VPC CNI(Container Networking Interface) Plugin for Kubernetes
  • https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/managing-vpc-cni.html

    Amazon VPC CNI plugin for Kubernetes アドオンは Amazon EKS クラスター内の各 Amazon EC2 ノードにデプロイされます。アドオンは Elastic Network Interface を作成し、Amazon EC2 ノードにアタッチします。またアドオンは、VPC のプライベートIPv4 または IPv6 アドレスを各 Pod およびサービスに割り当てます。

Reference

Install

What you can do?

  • PodにVPCネットワークと同じCIDRのIPアドレスを割り当てることができます
  • PodにNodeと異なるENIをアタッチするができます(InstanceTypeにより1 Nodeあたりアタッチ可能なENI数が決まります)
  • PodにNodeと異なるSecurityGroupをアタッチすることができます(v1.7.7以降)
  • PodにNodeと異なるSubnetセグメントのIPアドレスを割り当てることができます
  • Prefix Modeをサポート
  • Kubernetes NetworkPolicyによりPod間の細かなトラフィックフロー制御ができます

ENI Assign Pattern

PodにVPCネットワークと同じCIDRのIPアドレスを割り当てる時、ENIの割り当て方法にいつかのパターンが存在します。

大きくは以下3つのポイントがあります。

  1. ENIをWorker Nodeと共有する (default)
  2. ENIをWorker Nodeと共有せず、Pod間で共有する (Custom Networking)
  3. ENIをWorker NodeともPod間でも共有せず、1 PodでENIを占有する (SecurityGroup for Pods)

Custom NetworkingやSecurityGroup for Podsは排他利用ではないのでどちらも有効にすることが可能です。 この場合(以下マトリックス表の4番)、SecurityGroupPolicyのselectorにMatchしないPodはCustom Networkingを利用するようになります。

# Custom Networking SecurityGroup for Pods
1 N N
2 N Y
3 Y N
4 Y Y

Default

デフォルトではAmazon VPC CNI PluginはWorker NodeのPrimary SubnetからIPアドレスを取得しPodに割り当てます。 Primary SubnetとはWorker NodeのPrimary ENIが接続しているSubnetを指し、Primary ENIとはWorker Nodeにアタッチされている1つ目のENI(eth0)を指します。 Podに割り当てるIPアドレスはPrimary ENIに割り当てられるSecondary IPアドレスが使用され、PodにアタッチされるSecurityGroupはWorker NodeのPrimary ENIのも>のと同じとなります。

デフォルトの動作では以下のような問題が懸念されます。

  1. SubnetのIPアドレスが枯渇しPodにIPアドレスが割り当てられない
    • Worker Nodeに割り当てるIPアドレスやアプリケーションPodはもちろん、様々なWorkloadsによりIPアドレスが消費される
    • 特にAddonsなどでDaemonSet Workloadsがある場合、Worker NodeごとにPodが起動するためより多くのIPアドレスを消費することになる
  2. (運用上) Worker NodeとPodでSubnetを分けたい場合
    • IPアドレスの枯渇のケースもですが、運用上Worker NodeとPodでSubnetを分けたい場合
  3. (運用上) NodeとPodでSecurityGroupを分けたい場合
    • SecurityGroupはWorker Nodeやアプリケーションが稼働するPodなどでアクセス制御のsource/destが異なります。 Worker Node SGで大きく許可することでPodのアクセス制御を兼ねることも可能ですが、Securityの観点ではよくないです

Custom Networkingはこれらの問題を解決することができます。

Custom Networking

Custom NetworkingとはPodに割り当てるIPアドレスを取得するSubnetやPodにアタッチされるSecurityGroupをPrimary ENIと区別して指定できる機能です。

Custom Networking

Prefix Mode

Prefix Mode

Network Policy

Network Policy

SecurityGroup for Pods

SecurityGroup for Pods