Amazon EKS クラスターのポッドに特定の IP アドレスサブネットを指定する方法を教えてください。
Amazon Elastic Kubernetes Service (Amazon EKS) において、ポッドにカスタムサブネットまたは IP アドレス範囲を指定したいと考えています。
解決策
ワーカーノードのサブネットとは異なるサブネットに属するポッドの IP アドレスを割り当てるには、カスタムネットワークを使用します。
カスタムネットワークを有効にする
カスタムネットワークを構成する前に、次のデフォルト動作を確認します。
- ノードとポッドには、Amazon 仮想プライベートクラウド (VPC) クラスターと同じ CIDR 範囲の IP アドレスが割り当てられます。Amazon VPC に追加の IP アドレス CIDR 範囲を割り当てる方法については、「Amazon EKS で複数の CIDR 範囲を指定する方法を教えてください」を参照してください。
- Amazon EKS は、ワーカーノードのサブネットに属するポッドの IP アドレスを割り当てます。
- どのサブネットにより、ポッドに IP アドレスが割り当てられるかを制御することはできません。
- ノードのサブネットに使用可能な IP アドレスがない場合は、他のサブネットに空きアドレスが存在する場合も、新しくポッドを起動することはできません。
- ポッドから Amazon VPC クラスターの CIDR ブロック外の IP アドレスに対するすべてのトラフィックは、ノードのメインインターフェイスと IP アドレスを使用します。このトラフィックは、ノードのプライマリ Elastic ネットワークインターフェイスに属するセキュリティグループとサブネットを使用します。ENIConfig オブジェクトで定義したサブネットとセキュリティグループは使用されません。
- ポッドにセキュリティグループを使用する場合、そのポッドは SecurityGroupPolicy で指定したセキュリティグループを使用します。ENIConfig オブジェクトで指定したセキュリティグループは、ポッドでは使用されません。
注: ポッドのトラフィックルーティングに関する詳細については、「ポッドの外向きインターネットアクセスを有効にする」を参照してください。
Kubernets の Amazon VPC Container Network Interface (Amazon VPC CNI) プラグインでカスタムネットワークを有効化します。使用する Kubernetes バージョンに一致する Amazon VPC CNI プラグインバージョンを使用してください。プラグインへのアクセスについては、GitHub のウェブサイトで amazon-vpc-cni-k8s を参照してください。
次のコマンドを実行して Amazon VPC クラスターにおけるバージョンを確認します。
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
プラグインのバージョンが適切でない場合は、Amazon VPC CNI を更新します。
次のコマンドを実行してカスタムネットワークを有効にします。
kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
VPC CNI v1.18 以降のバージョンでは、自動サブネット検出と、利用可能な複数のサブネットにおける IP アドレス使用率に基づく動的アドレス割り当てがサポートされています。詳細については、「Amazon VPC CNI に強化されたサブネット検出が導入されました」を参照してください。
Amazon VPC CNI プラグインでは、次の操作も可能です。
- ポッドに使用する Amazon VPC サブネットを指定する。
- 各ポッドに個別のセキュリティグループを定義する。
ENIConfig オブジェクトを作成する
ENIConfig オブジェクトを作成する前に、次のデフォルト動作を確認します。
- 各 ENIConfig オブジェクトにより、1 つのサブネットとセキュリティグループのリストが定義される。
- 各ノードには、1 つの ENIConfig オブジェクトのみを割り当てられます。ただし、同じ ENIConfig オブジェクトを複数のノードに割り当てることは可能です。
- ノードに ENIConfig オブジェクトを割り当てると、そのノードに対してスケジュールされたポッドには、ENIConfig オブジェクト内のサブネットとセキュリティグループが割り当てられます。
- ENIConfig オブジェクトの名前は、アベイラビリティーゾーンの名前である必要があります。
ENIConfig オブジェクトの作成には、次のコマンドを実行します。
cat EOF | kubectl apply -f - apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: example-availability-zone spec: securityGroups: - example-security-group-id subnet: example-subnet-id EOF
注: example-availability-zone を目的のアベイラビリティーゾーンに置き換えてください。example-security-group-id をセキュリティグループの ID に置き換えてください。example-subnet-id をサブネットの ID に置き換えてください。
ENIConfig オブジェクトを割り当てる
単一の ENIConfig オブジェクトをアベイラビリティーゾーンに割り当てる場合は、その ENIConfig オブジェクトはノードに自動で割り当てられます。複数の ENIConfig オブジェクトを同じアベイラビリティーゾーンに関連付ける場合は、各 ENIConfig オブジェクトを手動で割り当てます。
ENIConfig オブジェクトを自動で割り当てる
次のコマンドを実行します。
kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone
ENIConfig オブジェクトを手動で関連付ける
重要: ノードおよび、関連付けられた ENIConfig オブジェクトのノードとサブネットは、同じアベイラビリティーゾーンに存在する必要があります。
次のコマンドを実行します。
kubectl annotate node example-node-name k8s.amazonaws.com/eniConfig=example-availability-zone
注: example-node-name をノードの完全な識別子に置き換えてください。example-availability-zone を ENIConfig オブジェクトの作成時に使用したアベイラビリティーゾーン名に置き換えてください。
新しいノードを起動する
ENIConfig サブネットからセカンダリネットワークインターフェイスと IP アドレスを割り当てるには、新しいノードを起動する必要があります。既存のノードは、置き換えられるまで元のネットワーク構成を引き続き使用します。
次の手順を実行します。
- セルフマネージドノードグループのマネージドノードグループでカスタム Amazon マシンイメージ (AMI) ID を使用しているかどうかを確認します。
- カスタム AMI ID を使用する場合は、各ノード値の最大ポッド数を判断します。max-pods-calculator.sh スクリプトの実行時には、--cni-custom-networking-enabled パラメータを追加する必要があります。
注: 起動テンプレートや AMI ID を指定しない場合、Amazon EKS によりポッドの最大数が自動で設定されます。 - 新しいノードのユーザーデータスクリプトを更新し、オペレーティングシステム (OS) に応じた最大数のポッドを使用するよう設定します。
Amazon Linux 2、Bottlerocket、Ubuntu 20.04 以降、Windows Server 2019 以降#!/bin/bash /etc/eks/bootstrap.sh example-cluster-name --use-max-pods false --kubelet-extra-args '--max-pods=example-max-pods'
注: 上記のコマンドにおいて、example-cluster-name を EKS クラスター名に置き換えてください。example-max-pods をノードあたりの最大ポッド数の値に置き換えてください。--user-data '#!/bin/bash /etc/eks/nodeadm init \ --container-runtime containerd \ --cluster-name example-cluster-name \ --max-pods example-max-pods'
bootstrap の詳細については、GitHub のウェブサイトで awslabs/amazon-eks-ami を参照してください。nodeadm の詳細については、「Amazon Linux 2 から Amazon Linux 2023 へのアップグレード」を参照してください。
Amazon Linux 2023 (AL2023) - ポッドを再作成し、新しいカスタムネットワーク構成を適用します。
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
AWS公式更新しました 4ヶ月前