Amazon EKS クラスターで不足している IP アドレスを解決してモニタリングする方法を教えてください。
Amazon Elastic Kubernetes Service (Amazon EKS) クラスターが IP アドレスを割り当てることができません。これは、サブネットに使用可能な IP アドレスがないためです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon VPC CNI で拡張サブネット検出を使用する
拡張サブネット検出を使用して同じ VPC 内のサブネットから IP アドレスを割り当てる Amazon 仮想プライベートクラウド (VPC) コンテナネットワークインターフェイス (CNI) プラグインを作成します。また、このプラグインを使用すると、アベイラビリティゾーン間で負荷が分散されます。
注: Amazon VPC CNI アドオンバージョン 1.18.0 以降を使用する必要があります。また、クラスターでは Amazon EKS 1.25 以降を実行する必要があります。
拡張サブネット検出が有効になっているかどうかを確認するには、次のコマンドを実行します。
kubectl describe ds aws-node -n kube-system | grep ENABLE_SUBNET_DISCOVERY
拡張サブネット検出を有効にするには、使用するツールで次のコマンドのいずれかを実行します。
kubectl:
kubectl set env daemonset aws-node -n kube-system ENABLE_SUBNET_DISCOVERY=true -c aws-node
AWS CLI:
aws eks update-addon --cluster-name CLUSTER_NAME --region AWS_REGION \ --addon-name vpc-cni \ --configuration-values '{"env":{"ENABLE_SUBNET_DISCOVERY":"true"}}'
注: CLUSTER_NAME を実際のクラスター名に、AWS_REGION を AWS リージョンに置き換えてください。
kubernetes.io/role/cni タグをサブネットに追加します。
カスタムネットワークを使用する
セキュリティ上の理由から、場合によっては、ポッドをセキュリティグループが異なる別のネットワーク上で実行する必要があります。カスタムネットワークを使用して、VPC のセカンダリ CIDR 範囲からポッド IP アドレスを割り当てます。
Amazon VPC CNI でカスタムネットワークを使用すると、カスタムネットワークは ENIConfig ファイルのサブネットにセカンダリネットワークインターフェイスを作成します。Amazon VPC CNI はサブネットからポッド IP アドレスを割り当てて、ポッドがノードのプライマリネットワークインターフェイスから異なるセキュリティグループを使用できるようにします。
注: 拡張サブネット検出とカスタムネットワークの両方を使用する場合、カスタムネットワークが優先されます。
セカンダリ CIDR 範囲には、CG-NAT の CIDR (/16) を使用してください。例えば、100.64.0.0/10 や 198.19.0.0/16 を使用します。これらの範囲は、企業ネットワークでは RFC1918 の範囲ほど一般的ではありません。
詳細については、「Amazon EKS ノードのセカンダリネットワークインターフェイスをカスタマイズする」を参照してください。
プレフィックス委任を有効にする
Nitro ベースの Amazon Elastic Compute Cloud (EC2) インスタンスでは、プレフィックス委任を使用できます。プレフィックス委任は、単一の IP アドレスの代わりに /28 IPv4 アドレスプレフィックスを割り当てます。
プレフィックス委任を有効にするには、オペレーティングシステム (OS) で次のコマンドのいずれかを実行します。
Linux:
kubectl set env ds aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
Windows:
kubectl patch configmap amazon-vpc-cni -n kube-system --type merge -p '{"data": {"enable-windows-prefix-delegation": "true", "enable-windows-ipam": "true"}}'
サブネットの IP アドレスが断片化されると、プレフィックス委任では連続した IP アドレスのブロックが必要になるため、プレフィックス委任が失敗する可能性があります。その後、VPC CNI ログに次のエラーメッセージが表示される場合があります。
"Failed to allocate a private IP/Prefix address: InsufficientCidrBlocks: There are not enough free cidr blocks in the specified subnet to satisfy the request."
この問題を解決するには、VPC サブネット CIDR 予約を使用して、プレフィックス割り当て用の IP アドレスを予約します。次に、VPC CNI プラグインは、予約された IP アドレスからプレフィックスを割り当てます。
CNI 最適化パラメータを設定する
使用可能な特定の数の IP アドレスを維持するには、WARM_IP_TARGET、MINIMUM_IP_TARGET、および WARM_ENI_TARGET パラメータを設定します。
WARM_IP_TARGET パラメータを設定して、各ノードに指定された数の IP アドレスを保持します。MINIMUM_IP_TARGET パラメータを設定して、常に使用可能な IP アドレスの数を最小限に抑えます。WARM_ENI_TARGET パラメータを設定して、使用可能な IP アドレスを持つ指定された数のネットワークインターフェイスを維持します。
詳細については、GitHub のウェブサイトで「WARM_ENI_TARGET, WARM_IP_TARGET and MINIMUM_IP_TARGET」(WARM_ENI_TARGET、WARM_IP_TARGET および MINIMUM_IP_TARGET) を参照してください。
WARM_IP_TARGET を設定するには、次のコマンドを実行します。
kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=YOUR_TARGET_VALUE
注: YOUR_TARGET_VALUE をウォーム IP ターゲット番号に置き換えてください。
MINIMUM_IP_TARGET を設定するには、次のコマンドを実行します。
kubectl set env ds aws-node -n kube-system MINIMUM_IP_TARGET=YOUR_MIN_VALUE
注: YOUR_MIN_VALUE を最小の IP ターゲット数に置き換えてください。
WARM_ENI_TARGET を設定するには、次のコマンドを実行します。
kubectl set env ds aws-node -n kube-system WARM_ENI_TARGET=YOUR_ENI_VALUE
注: YOUR_ENI_VALUE をウォームネットワークインターフェイスのターゲット番号に置き換えてください。
IP アドレスの使用状況を監視する
クラスターの IP アドレスの使用状況を監視してアドレスの枯渇を防ぐには、以下の操作を実行します。
- CNI メトリクスヘルパーをインストールして IP アドレスの割り当てを監視します。ツールをインストールするには、GitHub のウェブサイトの「cni-metrics-helper」を参照してください。ツールの詳細については、「CNI metrics helper」(CNI メトリクスヘルパー) を参照してください。
- Amazon Cloudwatch Container Insights を使用して、クラスターの IP アドレスの使用状況に関する以下のメトリクスをモニタリングします。
awscni_total_ip_addresses: Amazon VPC CNI が管理する IP アドレスの総数。
awscni_assigned_ip_addresses: ポッドに割り当てた IP アドレスの数。
awscni_available_ip_addresses: 新しいポッドで使用可能な IP アドレスの数。 - 使用可能な IP アドレスが必要最小値を下回った場合の CloudWatch アラームを作成します。また、使用量がしきい値を超えたときのアラームも作成してください。
新しいクラスターデプロイのベストプラクティスを実装する
新しい Amazon EKS クラスターのデプロイでは、以下のベストプラクティスを実装してください。
- VPC を作成するときは、十分な数の IP アドレスを含む CIDR ブロックを設定します。例えば、/16 は 65,546 個の IP アドレスを提供します。詳細については、「Amazon VPC の仕組み」を参照してください。
- クラスターに IPv6 アドレスを割り当てます。
- トピック
- Containers
- 言語
- 日本語
