【EKS】自動サブネット検出機能によるPod用IPの拡張

本記事では、EKS VPC CNI Plugin 自動サブネット検出によってPod用IPを拡張する手順について解説する。

dashboard

AWS EKSにおいて、VPC CNI Pluginで自動サブネット検出のサポートが開始された。(Amazon VPC CNI 自動サブネット検出のサポート開始を参照)

本記事では、この機能を利用して新しいサブネットにPodを配置する方法について解説する。

自動サブネット検出機能とは

  • サブネットに特定のタグ(後述)を付与することで、そのサブネットがVPC CNIによって自動的に検出され、PodにIPアドレスが割り当てられる。
  • ワーカーノードのセカンダリENIが作成される際に、プライマリENIと同じサブネットだけでなく、タグを付与したサブネットも対象とする。PodはプライマリENI・セカンダリENIのうち、利用可能なIPが多いサブネットに作成される。

拡張時のイメージ図

拡張時のイメージは以下。新しいサブネットにPodのみ作成される。

dashboard

前提条件

  • Amazon VPC CNIのバージョンがv1.18.0であること
  • EKS on EC2であること

注意点

  • 最初は新規サブネットではなく、既存のサブネットにPodが作成される
  • ワーカーノードが増えるわけではないため、冗長性の向上を目的とした機能ではない
  • ワーカーノード用のサブネットを増やすには、ノードグループを作成し直す必要がある
  • Fargateでは利用できない
  • VPC CNIのデフォルト設定では、VPC内においてPodが通信する場合のIPはNodeのIPとなる
  • EKSの「ネットワーキング」タブで変更・追加可能なサブネットはAPIサーバー用のサブネット

背景

  • EKSの設計において、ワーカーノード用サブネットで利用できるIPが不足していた
  • ノードグループの再作成を避けたかった
  • Container Insights用のCloudWatchや、EBS、GuardDutyのPodについての考慮が漏れていた
  • アプリケーションの拡張についての考慮が漏れていた
  • ワークロードの増加についての考慮が漏れていた

手順

  1. サブネット追加

  2. サブネットにタグを付ける

    • 作成したサブネットに「kubernetes.io/role/cni=1」のタグを付けて、VPC CNIが自動検出するようにする
  3. 環境変数の確認

    • Amazon VPC CNIアドオンの「ENABLE_SUBNET_DISCOVERY」環境変数を確認し、新しい拡張サブネット検出機能が有効になっていることを確認する。

      kubectl describe ds aws-node -n kube-system | grep ENABLE_SUBNET_DISCOVERY
      ENABLE_SUBNET_DISCOVERY: true
      
    • もしfalseだった場合は以下のコマンドでtrueに設定する。

      kubectl set env daemonset aws-node -n kube-system ENABLE_SUBNET_DISCOVERY=true -c aws-node
      
  4. 新しいサブネットの自動登録

    • 新しいサブネットが自動登録され、新しいサブネット上でPodが起動する準備が整う
  5. 公式手順の参照