

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

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

# Amazon EKS Hybrid Nodes ゲートウェイオペレーション
<a name="hybrid-nodes-gateway-operations"></a>

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

## 高可用性とフェイルオーバー
<a name="hybrid-nodes-gateway-ha"></a>

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

### フェイルオーバーシーケンス
<a name="hybrid-nodes-gateway-failover-sequence"></a>

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

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

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

1. 新しいリーダーはリーダーセットアップシーケンスを実行します。
   + VPC ルートテーブルエントリを更新して、ハイブリッドポッド CIDR が新しいリーダーのプライマリ ENI を指すようにします。
   + 新しいリーダーのノード IP と VXLAN MAC アドレスを使用して `CiliumVTEPConfig` カスタムリソースをアップサートします。

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

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

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

### アベイラビリティーゾーンの推奨事項
<a name="hybrid-nodes-gateway-az-recommendation"></a>

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

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

### リーダー選出パラメータ
<a name="hybrid-nodes-gateway-leader-params"></a>

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


| パラメータ  | デフォルト  | 説明  | 
| --- | --- | --- | 
|  `--leader-election-lease-duration`  |  `3s`  | リーダーが更新を停止した後、非リーダーがリースの取得を試みるまで待機する時間。 | 
|  `--leader-election-renew-deadline`  |  `2s`  | リーダーがリースの更新を試行してから断念するまでの時間。 | 
|  `--leader-election-retry-period`  |  `1s`  | 候補がリースの取得を再試行する頻度。 | 

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

## VPC ルートテーブル管理
<a name="hybrid-nodes-gateway-route-table-mgmt"></a>

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

### ルートの管理方法
<a name="hybrid-nodes-gateway-route-how"></a>

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

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

### ルートテーブルエントリの例
<a name="hybrid-nodes-gateway-route-example"></a>

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


| ルーティング先 | ターゲット | ステータス | 
| --- | --- | --- | 
|  `10.0.0.0/16`  | ローカル | アクティブ | 
|  {{HYBRID\_POD\_CIDR}}  |  {{eni-LEADER\_ENI\_ID}}  | アクティブ | 

### IAM アクセス許可
<a name="hybrid-nodes-gateway-route-iam"></a>

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

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

## モニタリング
<a name="hybrid-nodes-gateway-monitoring"></a>

### ヘルスエンドポイントと準備状況エンドポイント
<a name="hybrid-nodes-gateway-health-endpoints"></a>

ゲートウェイは、ポート `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
```

### メトリクスエンドポイント
<a name="hybrid-nodes-gateway-metrics"></a>

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

 **ゲートウェイ情報:** 


| メトリクス | 型 | 説明 | 
| --- | --- | --- | 
|  `hybrid_gateway_info`  | ゲージ | ゲートウェイインスタンスに関する静的情報。常に 1。ラベル: `node_ip`、`node_name`、`vxlan_interface`、`vpc_cidr`、`pod_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 のアドオン
<a name="hybrid-nodes-gateway-cloudwatch"></a>

[Amazon CloudWatch Observability アドオン](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-EKS-addon.html)を使用して、ゲートウェイメトリクスとログを収集できます。ポート `10080` でゲートウェイ名前空間 (`eks-hybrid-nodes-gateway`) をスクレイプするようにアドオンを設定します。正しい設定形式については、上記のアドオンドキュメントを参照してください。

## スケーリングに関する考慮事項
<a name="hybrid-nodes-gateway-scaling"></a>

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

### インスタンスタイプのガイダンス
<a name="hybrid-nodes-gateway-instance-guidance"></a>

ゲートウェイのスループットは、EC2 インスタンスのネットワークパフォーマンスによって制限されます。インスタンスタイプを選択するときは、以下の点を考慮してください。
+  **ネットワーク帯域幅** — ゲートウェイは VPC とハイブリッドポッド間のすべてのトラフィックを転送します。ネットワーク帯域幅がピークトラフィック要件を満たすインスタンスタイプを選択します。
+  **パケット/秒 (PPS)** — VXLAN カプセル化はパケットあたりのオーバーヘッドを追加します。多数の小さなパケットを含むワークロード (リクエストレートが高いマイクロサービスなど) は、PPS 制限が高いインスタンスタイプからメリットを得られます。
+  **ハイブリッドノードの数** — 各ハイブリッドノードは、ゲートウェイがトラフィックを転送する VXLAN トンネルエンドポイントを追加します。ハイブリッドノードの数が増えると、ゲートウェイ経由の集約トラフィックが増加します。クラスターのピーク時のネットワーク間トラフィックを処理するのに十分なネットワーク帯域幅を持つインスタンスタイプを選択します。

### 推奨インスタンスタイプ
<a name="hybrid-nodes-gateway-instance-recommendations"></a>

 **本番稼働 (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 数が多い | 

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

## VXLAN トンネルのライフサイクル
<a name="hybrid-nodes-gateway-vxlan-lifecycle"></a>

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

### トンネルの管理方法
<a name="hybrid-nodes-gateway-tunnel-mgmt"></a>

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

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

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

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

1. VXLAN インターフェイスで以下をプログラムします。
   + VXLAN インターフェイスを介したノードの IP を介したノードのポッド CIDR のルート。
   + ノードの IP を決定論的な MAC アドレスにマッピングする静的 ARP エントリ。
   + カプセル化されたパケットをノードの IP に送信するように VXLAN モジュールに指示する FDB エントリ。

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

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

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

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

## 次のステップ
<a name="hybrid-nodes-gateway-operations-next"></a>
+  [Amazon EKS Hybrid Nodes ゲートウェイ設定リファレンス](hybrid-nodes-gateway-configuration.md) — Helm 値、CLI フラグ、リーダー選出パラメータをカスタマイズします。
+  [Amazon EKS Hybrid Nodes ゲートウェイのトラブルシューティング](hybrid-nodes-gateway-troubleshooting.md) — 一般的な問題を診断して解決します。
+  [Amazon EKS Hybrid Nodes ゲートウェイ](hybrid-nodes-gateway-overview.md) — 概要ページに戻ります。