View a markdown version of this page

Amazon EKS Hybrid Nodes ゲートウェイオペレーション - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

Amazon EKS Hybrid Nodes ゲートウェイオペレーション

このページでは、高可用性、フェイルオーバー動作、モニタリング、スケーリング、VXLAN トンネルライフサイクルなど、Amazon EKS Hybrid Nodes ゲートウェイの 2 日目のオペレーションについて説明します。インストール手順については、「EKS Hybrid Nodes ゲートウェイの使用を開始する」を参照してください。

高可用性とフェイルオーバー

Hybrid Nodes ゲートウェイは、Kubernetes リースベースのリーダー選出でアクティブスタンバイモデルを使用します。2 つのゲートウェイポッドは別々の EC2 ノードで実行され、ポッドのアンチアフィニティによって強制されます。どちらのポッドも起動時に VXLAN インターフェイスを作成し、すべてのハイブリッドノードの VTEP エントリを維持するノード調整を実行します。リーダーポッドのみが VPC ルートテーブルと CiliumVTEPConfig CRD を管理します。スタンバイポッドには、既にトンネルエントリの完全なセットがあるため、フェイルオーバー時に常に 3~5 秒以内にトラフィックを転送する準備ができています。

フェイルオーバーシーケンス

アクティブなゲートウェイインスタンスが失敗すると、以下のシーケンスが発生します。

  1. スタンバイポッドは、リーダーリースの有効期限が切れたことを検出します。

  2. スタンバイポッドはリースを取得し、新しいリーダーになります。

  3. 新しいリーダーはリーダーセットアップシーケンスを実行します。

    • VPC ルートテーブルエントリを更新して、ハイブリッドポッド CIDR が新しいリーダーのプライマリ ENI を指すようにします。

    • 新しいリーダーのノード IP と VXLAN MAC アドレスを使用して CiliumVTEPConfig カスタムリソースをアップサートします。

  4. 新しいリーダーを通過するトラフィックが再開されます。

両方のポッドは常に VXLAN インターフェイスと VTEP エントリを保持するため、新しいリーダーはフェイルオーバー中に VXLAN インターフェイスを再作成したり、トンネルエントリを再プログラムしたりする必要はありません。VPC ルートテーブルと CiliumVTEPConfig 更新のみが必要です。

予想されるフェイルオーバー時間は、約 3~5 秒です。フェイルオーバー中、VPC とハイブリッドポッド間のトラフィックは中断されます。

アベイラビリティーゾーンの推奨事項

2 つのアベイラビリティーゾーンにゲートウェイノードを分散して、AZ 障害がリーダーとスタンバイの両方を取り出さないようにします。EKS Auto Mode を使用する場合は、複数の AZ でサブネットセレクタを使用して NodeClass を設定します。マネージド型ノードグループまたはセルフマネージド型ノードの場合は、ラベル付け時に異なる AZ のノードを選択します。

注記

ゲートウェイと VPC 内の他のリソース間のクロス AZ トラフィックには、標準の AWS クロス AZ データ転送料金が発生します。

リーダー選出パラメータ

デフォルトのリーダー選出パラメータは、高速フェイルオーバー用に調整されます。

パラメータ デフォルト 説明

--leader-election-lease-duration

3s

リーダーが更新を停止した後、非リーダーがリースの取得を試みるまで待機する時間。

--leader-election-renew-deadline

2s

リーダーがリースの更新を試行してから断念するまでの時間。

--leader-election-retry-period

1s

候補がリースの取得を再試行する頻度。

これらの値を下げると、フェイルオーバー時間が短縮されますが、ネットワークパーティションで誤ったフェイルオーバーが発生するリスクが高まります。ほとんどのデプロイでは、デフォルトが適切です。詳細については、「Amazon EKS Hybrid Nodes ゲートウェイ設定リファレンス」を参照してください。

VPC ルートテーブル管理

ゲートウェイは VPC ルートテーブルエントリを管理し、ハイブリッドポッド CIDR 宛てのトラフィックがアクティブなゲートウェイインスタンスに到達するようにします。

ルートの管理方法

ゲートウェイポッドがリーダーになると、設定された各 VPC ルートテーブルでルートを作成または置き換えます。各ルートは、送信先 CIDR をハイブリッドポッド CIDR に設定し、ターゲットをリーダーのプライマリ ENI に設定します。ルートが既に存在し、正しい ENI を指している場合、ゲートウェイは更新をスキップします。

フェイルオーバー中、新しいリーダーは既存のルートを置き換えて、自身の ENI を指すようにします。これは、VPC トラフィックを新しいアクティブゲートウェイにリダイレクトするメカニズムです。

ルートテーブルエントリの例

ゲートウェイがルートを設定すると、VPC ルートテーブルには以下のようなエントリが含まれます。

ルーティング先 ターゲット ステータス

10.0.0.0/16

ローカル

アクティブ

HYBRID_POD_CIDR

eni-LEADER_ENI_ID

アクティブ

IAM アクセス許可

ゲートウェイでは、ルートテーブルを管理するために以下の IAM アクションが必要です。

  • ec2:DescribeRouteTables

  • ec2:CreateRoute

  • ec2:ReplaceRoute

  • ec2:DescribeInstances

これらのアクセス許可を、ゲートウェイノードのインスタンスプロファイル、Pod Identity、または IRSA 設定に関連付けられた IAM ロールにアタッチします。

モニタリング

ヘルスエンドポイントと準備状況エンドポイント

ゲートウェイは、ポート 8088 でヘルスエンドポイントと準備状況エンドポイントを公開します。

エンドポイント パス 説明

ヘルスチェック

/healthz

ゲートウェイプロセスが正常であれば、HTTP 200 を返します。Kubernetes ライブネスプローブによって使用されます。

準備状況チェック

/readyz

ゲートウェイがトラフィックを処理する準備ができたら、HTTP 200 を返します。Kubernetes 準備状況プローブによって使用されます。

診断のためにこれらのエンドポイントを手動でクエリするには、一時的なデバッグコンテナを実行するか、ポート転送を実行します。

kubectl port-forward -n eks-hybrid-nodes-gateway POD_NAME 8088:8088 & curl -s http://localhost:8088/healthz curl -s http://localhost:8088/readyz

メトリクスエンドポイント

ゲートウェイは、/metrics パスのポート 10080 で Prometheus 互換メトリクスを公開します。標準のコントローラーランタイムメトリクスに加えて、以下のカスタムメトリクスを使用できます。

ゲートウェイ情報:

メトリクス 説明

hybrid_gateway_info

ゲージ

ゲートウェイインスタンスに関する静的情報。常に 1。ラベル: node_ipnode_namevxlan_interfacevpc_cidrpod_cidr

ハイブリッドノード:

メトリクス 説明

hybrid_gateway_hybrid_nodes_configured

ゲージ

VTEP エントリが設定されたハイブリッドノードの現在の数。

VTEP オペレーション:

メトリクス 説明

hybrid_gateway_vtep_add_total

Counter

成功した VTEP 追加オペレーションの合計。

hybrid_gateway_vtep_add_errors_total

Counter

失敗した VTEP 追加オペレーションの合計。

hybrid_gateway_vtep_remove_total

Counter

正常な VTEP 削除オペレーションの合計。

hybrid_gateway_vtep_remove_errors_total

Counter

失敗した VTEP 削除オペレーションの合計。

リーダー選出とルートテーブル:

メトリクス 説明

hybrid_gateway_leader_is_active

ゲージ

このポッドがアクティブなリーダーの場合は 1、スタンバイの場合は 0。

hybrid_gateway_leader_setup_duration_seconds

ヒストグラム

リーダーセットアップオペレーション (ルートテーブル + CiliumVTEPConfig) の秒単位の所要時間。

hybrid_gateway_aws_route_table_update_total

Counter

AWS ルートテーブルの更新オペレーションが成功した合計。

hybrid_gateway_aws_route_table_update_errors_total

Counter

失敗した AWS ルートテーブルの更新オペレーションの合計。

hybrid_gateway_aws_route_table_update_duration_seconds

ヒストグラム

AWS ルートテーブルの更新オペレーションの秒単位の期間。

ネットワーク統計 (スクレイプごとにオンデマンドで収集):

メトリクス 説明

hybrid_gateway_vxlan_rx_bytes_total

ゲージ

VXLAN インターフェイスで受信した合計バイト数。

hybrid_gateway_vxlan_tx_bytes_total

ゲージ

VXLAN インターフェイスで送信された合計バイト数。

hybrid_gateway_vxlan_rx_packets_total

ゲージ

VXLAN インターフェイスで受信したパケットの合計。

hybrid_gateway_vxlan_tx_packets_total

ゲージ

VXLAN インターフェイスで送信されたパケットの合計。

hybrid_gateway_vxlan_rx_dropped_total

ゲージ

VXLAN インターフェイスによって受信時にドロップされたパケットの合計。

hybrid_gateway_vxlan_tx_dropped_total

ゲージ

VXLAN インターフェイスによって送信時にドロップされたパケットの合計。

hybrid_gateway_vxlan_rx_errors_total

ゲージ

VXLAN インターフェイスの合計受信エラー。

hybrid_gateway_vxlan_tx_errors_total

ゲージ

VXLAN インターフェイスの合計送信エラー。

hybrid_gateway_vxlan_interface_up

ゲージ

VXLAN インターフェイスが UP の場合は 1、それ以外の場合は 0。

hybrid_gateway_vxlan_fdb_entries

ゲージ

VXLAN インターフェイスの現在の FDB エントリの数。

hybrid_gateway_vxlan_route_count

ゲージ

VXLAN インターフェイス経由の現在のルート数。

hybrid_gateway_primary_nic_rx_bytes_total

ゲージ

プライマリネットワークインターフェイスで受信した合計バイト数。

hybrid_gateway_primary_nic_tx_bytes_total

ゲージ

プライマリネットワークインターフェイスで送信された合計バイト数。

hybrid_gateway_primary_nic_rx_packets_total

ゲージ

プライマリネットワークインターフェイスで受信したパケットの合計。

hybrid_gateway_primary_nic_tx_packets_total

ゲージ

プライマリネットワークインターフェイスで送信されたパケットの合計。

hybrid_gateway_primary_nic_rx_dropped_total

ゲージ

プライマリ NIC によって受信時にドロップされたパケットの合計。

hybrid_gateway_primary_nic_tx_dropped_total

ゲージ

プライマリ NIC によって送信時にドロップされたパケットの合計数。

hybrid_gateway_primary_nic_rx_errors_total

ゲージ

プライマリ NIC の合計受信エラー数。

hybrid_gateway_primary_nic_tx_errors_total

ゲージ

プライマリ NIC の合計送信エラー数。

hybrid_gateway_primary_nic_info

ゲージ

プライマリ NIC 名。常に 1。ラベル: interface_name

CloudWatch Observability のアドオン

Amazon CloudWatch Observability アドオンを使用して、ゲートウェイメトリクスとログを収集できます。ポート 10080 でゲートウェイ名前空間 (eks-hybrid-nodes-gateway) をスクレイプするようにアドオンを設定します。正しい設定形式については、上記のアドオンドキュメントを参照してください。

スケーリングに関する考慮事項

Hybrid Nodes ゲートウェイはリーダー選出でアクティブスタンバイモデルを使用するため、一度にトラフィックを処理するポッドは 1 つだけです。ゲートウェイを水平スケーリングする (レプリカの数を増やす) と、フェイルオーバー中に引き継ぐ準備ができている追加のスタンバイポッドを提供することで可用性を向上させることができますが、トラフィックがレプリカ全体に分散されないため、パフォーマンスやスループットは向上しません。パフォーマンスをスケールするには、トラフィック量に十分なネットワーク帯域幅を持つ EC2 インスタンスタイプを選択して、垂直方向にスケールします。

インスタンスタイプのガイダンス

ゲートウェイのスループットは、EC2 インスタンスのネットワークパフォーマンスによって制限されます。インスタンスタイプを選択するときは、以下の点を考慮してください。

  • ネットワーク帯域幅 — ゲートウェイは VPC とハイブリッドポッド間のすべてのトラフィックを転送します。ネットワーク帯域幅がピークトラフィック要件を満たすインスタンスタイプを選択します。

  • パケット/秒 (PPS) — VXLAN カプセル化はパケットあたりのオーバーヘッドを追加します。多数の小さなパケットを含むワークロード (リクエストレートが高いマイクロサービスなど) は、PPS 制限が高いインスタンスタイプからメリットを得られます。

  • ハイブリッドノードの数 — 各ハイブリッドノードは、ゲートウェイがトラフィックを転送する VXLAN トンネルエンドポイントを追加します。ハイブリッドノードの数が増えると、ゲートウェイ経由の集約トラフィックが増加します。クラスターのピーク時のネットワーク間トラフィックを処理するのに十分なネットワーク帯域幅を持つインスタンスタイプを選択します。

推奨インスタンスタイプ

本番稼働 (10~100 ハイブリッドノード、中程度のトラフィック)

安定したネットワーク間トラフィックを持つ標準の本番稼働ワークロードに適しています。

インスタンスタイプ vCPU メモリ Network 注意事項

c6i.xlarge

4

8 GiB

最大 12.5 Gbps

コストとパフォーマンスの適切なバランス

c6in.xlarge

4

8 GiB

最大 30 Gbps

ネットワーク最適化。本番環境に推奨

c7i.xlarge

4

8 GiB

最大 12.5 Gbps

最新世代のコンピューティング最適化

m6i.xlarge

4

16 GiB

最大 12.5 Gbps

ゲートウェイノードで他のワークロードを共同配置する場合に適しています

高スループットの本番稼働 (100 以上のハイブリッドノード、大量のトラフィック)

データ集約型のワークロードや多数の同時接続など、ネットワーク間の帯域幅要件が大きい環境向け。

インスタンスタイプ vCPU メモリ Network 注意事項

c6in.2xlarge

8

16 GiB

最大 40 Gbps

高スループットの本番稼働に推奨

c5n.2xlarge

8

21 GiB

最大 25 Gbps

旧世代のネットワーク最適化、コスト効率

c6in.4xlarge

16

32 GiB

最大 50 Gbps

非常に負荷の高いワークロードの最大スループット

c5n.4xlarge

16

42 GiB

最大 25 Gbps

極端なパケットレートの vCPU 数が多い

ゲートウェイメトリクスを使用してネットワーク使用率をモニタリングし (「メトリクスエンドポイント」を参照)、必要に応じてインスタンスタイプを調整します。

VXLAN トンネルのライフサイクル

ゲートウェイは、ハイブリッドノードがクラスターに参加または終了するときに、ハイブリッドノードへの VXLAN トンネルを自動的に維持します。

トンネルの管理方法

ノードコントローラーは、クラスター内の CiliumNode オブジェクトを監視します。リーダーとスタンバイの両方が最新のトンネル状態になるように、コントローラーは (リーダーだけでなく) すべてのゲートウェイポッドで実行されます。CiliumNode イベントが発生すると、コントローラーは eks.amazonaws.com/compute-type: hybrid ラベルを探してノードがハイブリッドノードであるかどうかをチェックします。

ハイブリッドノードがクラスターに参加する場合:

  1. コントローラーは新しい CiliumNode オブジェクトを検出します。

  2. ノードの内部 IP アドレスとポッド CIDR を CiliumNode 仕様から抽出します。

  3. VXLAN インターフェイスで以下をプログラムします。

    • VXLAN インターフェイスを介したノードの IP を介したノードのポッド CIDR のルート。

    • ノードの IP を決定論的な MAC アドレスにマッピングする静的 ARP エントリ。

    • カプセル化されたパケットをノードの IP に送信するように VXLAN モジュールに指示する FDB エントリ。

ハイブリッドノードがクラスターを離れる場合:

  1. コントローラーは CiliumNode 削除を検出します。

  2. VXLAN インターフェイスからそのノードのルート、ARP エントリ、および FDB エントリを削除します。

このライフサイクルは完全に自動です。ハイブリッドノードを追加または削除するときに、トンネルを手動で設定する必要はありません。

次のステップ