[アップデート] EKSでマネージドノードグループをデプロイする際のパブリックIPアドレス付与の挙動が変更されました

今回のアップデートは、一見「どんな影響があるのか」分かり辛いものだと思います。既存のEKS運用環境がある方は要チェックです!
2020.04.23

みなさん、こんにちは! AWS事業本部の青柳@福岡オフィスです。

Amazon EKS でアップデートが発表されました。

Amazon EKS managed node groups allow fully private cluster networking

タイトルを和訳すると「Amazon EKSのマネージドノードで完全にプライベートなクラスターネットワーキングが可能になりました」となります。

今回のアップデートは、確かにそのような側面もありますが、実は 既存のEKSクラスター環境の運用において影響が発生する場合があります。

アップデートの内容と、どのような影響があるのかについて、解説します。

何がどう変わったのか?

EKSクラスターにおいて、新たな マネージドノードグループ を作成する際の挙動が変更されています。

これは特に パブリックサブネット上にマネージドノードグループを作成する場合 に影響が発生する場合があります。

これまでの挙動

新たなマネージドノードグループを作成する際、作成先サブネットの「パブリックIPv4アドレス自動割り当て」設定の有効・無効にかかわらず、作成されたワーカーノード (EC2インスタンス) に 必ずパブリックIPアドレスが付与される。

アップデート後の挙動

新たなマネージドノードグループを作成する際、作成されたワーカーノードにパブリックIPアドレスが付与されるか否かは 作成先サブネットの「パブリックIPv4アドレス自動割り当て」設定に従う。

影響は?

「アップデート以前に作成していたEKSクラスター」上で「新たにノードグループを作成した場合」に、影響が発生する可能性があります。

アップデート以前に、Amazon EKSユーザーガイド に記載された手順、あるいはeksctlコマンドを使ってEKSクラスター環境を構築した場合、EKSクラスター環境の一部として作成されたVPCのパブリックサブネットは「パブリックIPv4アドレス自動割り当て」が無効になる仕様でした。

「パブリックIPv4アドレス自動割り当て」が無効のパブリックサブネットにマネージドノードグループを作成した場合、アップデート以前であれば必ずパブリックIPアドレスが付与されるため問題ないのですが、アップデート後はパブリックIPアドレスが付与されない ことになります。

※ なお、アップデート以後は、AWSドキュメントの手順やeksctlコマンドの仕様が改善され、パブリックサブネットの「パブリックIPv4アドレス自動割り当て」が有効になりますので、問題は発生しません。

パブリックIPアドレスが付与されないと、何が問題なの?

マネージドノードグループ内のワーカーノード (EC2インスタンス) が起動する際、EKSのコントロールプレーンに対して「自分 (ワーカーノード) をEKSクラスターの一員として登録してもらう」という要求を行います。

EKSコントロールプレーンへの要求は「Kubernetes APIサーバー」のエンドポイント に対して行われますが、コントロールプレーンはVPCの外部にあるため、VPC内部のワーカーノードはインターネットゲートウェイ経由で通信を行う必要があります。

ご承知の通り、パブリックサブネット上のEC2インスタンスがインターネットゲートウェイ経由でVPC外部と通信を行うためには、パブリックIPアドレスが付与されている必要があります。 よって、パブリックIPアドレスが付与されない場合、EKSコントロールプレーンとの通信が行えない ということになります。

実際に、パブリックサブネットの「パブリックIPv4アドレス自動割り当て」が無効の状態でマネージドノードグループを作成しようとしたところ、エラーが発生してマネージドノードグループの作成に失敗しました。

(エラー内容を大雑把に訳すと「起動したインスタンスにパブリックIPアドレスを自動的に割り当てるようになっていません。サブネットのパブリックIPアドレス自動割り当てを有効にする必要があります」となっています)

対処方法は?

アップデート以前に作成されたパブリックサブネットの設定を確認して、「パブリックIPv4アドレス自動割り当て」が無効になっている場合には「有効」に変更する 必要があります。

これにより、既存のマネージドノードグループに影響を与えること無く、新規にマネージドノードグループを作成する場合の問題発生を回避することができます。

「ノードグループをプライベートサブネットに配置する」という選択

さて、ここまでノードグループがパブリックサブネット上に配置されている前提でお話を進めてきましたが、要件によってはプライベートサブネット上に配置するという選択肢もあります。

ノードグループがインターネットから直接着信する必要が無い場合、パブリックサブネット上に配置する必要性はありません。 むしろ、セキュリティ観点からはプライベートサブネット上に配置することが推奨されます。

ノードグループをプライベートサブネット上に配置した場合、EKSコントロールプレーンに対する通信は「NATゲートウェイ」経由で行うことになります。

もう一つの方法としては、EKSコントロールプレーンの設定で「APIサーバーエンドポイント」の「プライベートアクセス」を有効にするというものです。

プライベートアクセスを有効にすると、ノードグループが配置されるプライベートサブネット上に専用のネットワークインターフェイス (ENI) が作成され、プライベートサブネットからAPIサーバーエンドポイントに対して直接通信が行えるようになります。

NATゲートウェイおよびインターネットゲートウェイ経由でVPC外部に通信が出ていくことがありませんので、より厳格なセキュリティが求められる場合には、こちらの構成が選択肢に挙がるでしょう。

おわりに

今回のアップデートは新機能の追加などではない地味なアップデートでしたが、運用において影響が発生する可能性もある内容でした。

既存のEKSクラスター環境を運用されている方は、チェックされることをお勧めします。